今天,遇到:... Firebug 达到了 Post 请求大小限制。 ...

   今天在做post表单提交多个textarea控件中的内容时,出现一些意外情况,为了避免以后再出现这种情况,有个清晰的思路,特此写下以下琐碎细节。测试环境为windows的iis。
        以下内容针对一个textarea输入内容测试遇到的问题。当提交数据量比较小时,保存正常。当提交数据量为一篇文章时(大约30k左右),点击保存出现白页现象,没有任何反应。通过firebug查看网络查看表单提交情况,post选项中出现“... Firebug 达到了 Post 请求大小限制。 ...”这样的提示。
总结:
(1)post提交表单数据量限制为100k左右,超过将无法提交。
(2)在iis6.0中表单最大传输大小为200k,因此需要通过以下方式修改配置文件,实现大数据传输
     1. 关闭 IIS Admin Service 服务
     2. 打开 %WinDir%\system32\inetsrv\metabase.xml
     3. 修改 AspMaxRequestEntityAllowed 的值为自己需要的, 默认为 204800,AspBufferingLimit也改成相同值,
    4. 启动 IIS Admin Service
(3)在iis5.1以下post   方法限制传递的数据为2M
(3)get最大提交数据量为4k左右
(4)表单控件(如textarea)最大提交的数据量为30k左右,超过将出现以上异常情况,导致表单无法提交成功.
来自:http://blog.csdn.net/zouqingfang/article/details/7220229
    前言,近来fastCGI流行,也有人提出了相反的看法,并作出了原因解释,觉得有道理,So。。。
    php群里的兄弟:
    nginx这么厉害吗?答:我测试,10000次,10次并发 机器,就是不死 65%cpu了,还不死。。。nginx防盗链牛逼可以根据参数加密。
    php-fpm确实,听蛋疼的 5个进程,每个占12% 我操,cpu干不了别的了,php-fpm是相当的不行 cpu占用太厉害.用apache啊.apache有些特性不行。。。
    Nginx 502:
  fast_cgi设置
   fastcgi_connect_timeout 30;
    fastcgi_send_timeout 30;
    fastcgi_read_timeout 30;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    Php-fpm设置
   <value name="listen_address"> /dev/shm/php-fpm.sock </value>
   <value name="max_children">128</value>
   <value name="request_terminate_timeout">10s</value>
   <value name="request_slowlog_timeout">5s</value>
   <value name="slowlog">/path/to/slow.log</value>
   <value name="rlimit_files">65535</value>

    
    php(fastcgi)不够稳定,经常出现502错误,生成相对复杂的页面没有优势,反而会使php-cgi进程变为僵尸进程.
    安全性,多用户多站点权限问题.php(fastcgi)在应对多用户多站点往往捉襟见肘,不易于实施.
    整合其他开发语言,apache表现得游刃有余.资源利用恰到好处.
为什么采用nginx做前端,apache作为后端的方案?nginx在处理静态内容上较apache是几倍或几十倍的差异,因而放在前面过滤静态内容是最为恰当的.同时nginx也是一个负载均衡器,低资源消耗,高性能转发是它的特点.经过nginx在前面的过滤,后端的apache需要处理的内容相对就比较少了.只需负责处理动态内容就可以了.在性能与稳定性的权衡下,使用nginx+apache搭配会让它们在各自擅长的领域展现自身的价值.
http://www.vpser.net/build/nginx-apache-guide.html
关于php的session文件垃圾回收机制。我已经在网上看了不少资料。大致是说session过期并不会马上清除session文件,而是每次有请求过来的时候根据session.gc_probability/session.gc_divisor的值为概率去遍历以便session目录下的session文件看是否存在过期的session文件,如果过期则清楚。阅读全文
10.zendstudio如何进行两个文件的比较?
选中你要比较的两个文件,右键点击,在弹出来的菜单中选取Compare With -> Each Other,这时会开启一个比较编辑器,就可以进行两个文件的比较了。(右上角的几个比较按钮自行测试它的功能)
11.新建PHP文件时怎么缺少后面的?>,如何补全?
选择window菜单->Preferences->PHP->Code Style->Code Templates,在右测点Code,选择“Simple php file” 点“Edit...”进行编辑增加?>,这样新建文件时就有后面的?>。
12.zend studio9在线汉化没有成功,有汉化离线包没?
还是在线汉化吧,经测试离线汉化包有问题,已不提供了。

来源:http://www.geekso.com/zendstudioquestion/
阅读全文
(1)closest和Index的混合使用示例:
closest会首先检查当前元素是否匹配,如果匹配则直接返回元素本身。如果不匹配则向上查找父元素,一层一层往上,直到找到匹配选择器的元素。


(2)Index:
搜索与参数表示的对象匹配的元素,并返回相应元素的索引值。如果找到了匹配的元素,从0开始返回;如果没有找到匹配的元素,返回-1。

Index 的Js:

而我们这儿是这样的:



阅读全文
回忆未来(372647693)  15:40:50
近来遇到smarty缓存问题,当一个模板被新的模板替代后,其输出没有变化,但模板已经变了,这种问题偶尔会出现,不知道是怎么一回事。。。
[Tx]向东(372647693)  15:42:29
偶尔会出现,刚开始以为是没有上传新模板上去或者属组问题,但发现不是这个问题,楼上的什么意思?
vacas(905876351)  15:43:37
你检查一下这个模板有可能被缓存在哪儿
服务器文件 内存 浏览器
[Tx]向东(372647693)  15:44:10
说白了就是那个:template_c 这个目录没有给更新。
vacas(905876351)  15:41:46
内存有缓存...
David(254091767)  15:41:20
缓存没有更新的
解析模板时,会生成一个缓存文件,这个缓存文件没有更新,所以就没有变化
竖琴螺(421033770)  15:42:01
把缓存文件全删掉
David(254091767)  15:42:07
你把浏览器的缓存清一下,再次打开,就没有这个问题了
还有浏览器的缓存呢?
我最近开发的项目,也是老遇到这个问题
竖琴螺(421033770)  15:42:44
之前好像也遇见过,是怎么解决的也忘了,呵呵
莫莫<happy.yin@qq.com>  15:43:09
我差了 你们还用SMARTY那??
框架 里自身就有缓存机制了
回忆未来(372647693)  15:43:27
浏览器强制刷新了的。
WANG(896186882)  15:43:54
smarty的模板缓存清掉
竖琴螺(421033770)  15:43:57
_templates_c里的文件都删除掉
然后刷新页面
竖琴螺(421033770)  15:46:35
smarty的缓存开关变量是$caching
回忆未来(372647693)  15:47:29
但是加一个新的模板应该会自动去重新编译一次啊,但就是没有做这事情,不是说根据修改时间比对会去重新编译一次新模板的么?但偶尔会没有做
回忆未来(372647693)  15:44:29
说白了就是那个:template_c 这个目录没有给更新。 是不是smarty的一个bug啊。
[CIECC]NVSky(365650070)  15:45:05
把TC干掉
[free]你懂得(337207961)  15:59:39
直接看编译以后的模板的生成时间跟你的模板更改时间一致吗
[Tx]向东(372647693)  16:00:35
嗯,我觉得是由于某种原因导致判断没有更新模板,导致根本没有编译。
这种几率很少发生,但时有发生。
[free]你懂得(337207961)  16:02:42
你先看看啊,编译后的模板里边有模板的最新生成时间
[Tx]向东(372647693)  16:04:05
没有吧?还是我没有找到,在哪儿?
<?php /* Smarty version 2.6.18, created on 2012-05-24 09:37:07
这玩意?
[free]你懂得(337207961)  16:04:53



[Tx]向东(372647693)  16:05:39
这个时间是老的时间,所以,没有把新模板的改动给加进来。
就把这个模板给丢给浏览器了。所以,一直是老的模板,新的模板没有给重新编译。
[TX]-金灶沐(86297986)  16:06:43
你应该干掉缓存啊
[free]你懂得(337207961)  16:06:45
smarty有个重新编译的选项吧,试了吗
[TX]-金灶沐(86297986)  16:06:50
你是不是is_cache了
[Tx]向东(372647693)  16:07:22
什么选项?
一个一个来,我是替那帮微博开放平台的兄弟们排查一下,再就是我自己偶尔会有这样的问题,所以,想聊出个水落石出。
[free]你懂得(337207961)  16:08:31
Example 13-9. clear_compiled_tpl
例子 13-9. 清除已编译模板


// clear a specific template resource// 清除指定模板资源的编译文件$smarty->clear_compiled_tpl("index.tpl");
// clear entire compile directory// 清除所有已编译的模板文件$smarty->clear_compiled_tpl();


[Tx]向东(372647693)  16:09:13
他们好像没,现在兄弟们都懒,想smarty自己判断有更新就编译呢。
[free]你懂得(337207961)  16:09:42
如果再不行的话只能找源码看了,新浪这边的发布系统也这样,主要是由其他延时
[TX]-金灶沐(86297986)  16:09:56
你是新浪的啊..
[Tx]向东(372647693)  16:10:04
嗯,多谢兄弟们。。。
[TX]-金灶沐(86297986)  16:10:05
smarty会自动找过期时间的..
我看源码的时候 他编译的时候回去看 然后对比..
[free]你懂得(337207961)  16:11:46
文件的更新时间也有缓存
[free]你懂得(337207961)  16:14:52
金灶沐 那个作对比用的什么方法啊,是调用的受clearstatcache影响的函数吗
[free]你懂得(337207961)  16:15:49
我就是再说这个问题,如果用的clearstatcache影响的方法可能判断出错

可能文件有缓存,smary在做相关操作时用到调用的受clearstatcache影响的函数的缘故。
解决方法:
=============
也只有每次都必须给把那个smarty的template_c目录下的文件全给干掉了。
在Bo-blog兄弟提供的空间里用date发现时间不准,于是查了一下,如下设置及可:
在PHP5中, 时间默认 是  格林尼治时间

想要用北京时间,可以用以下方法

程序中调整
PHP代码:
date_default_timezone_set (PRC);

php.ini中调整
代码:
date.timezone = PRC
4月26日,PHP开发团队发布了PHP 版本5.3.11 和 5.4.1,这些更新侧重于对现有的版本分支的bugs修正,还包括了一些和安全性相关的内容。
PHP 5.3.11 和PHP 5.4.1安全性增强包括:

Fixed bug #54374 (Insufficient validating of upload name leading to corrupted $_FILES indices). (CVE-2012-1172).
Add open_basedir checks to readline_write_history and readline_read_history.

仅针对5.3.11 版本的安全性提升:
Fixed bug #61043 (Regression in magic_quotes_gpc fix for CVE-2012-0831).

在这次的发布中还有如下的关键提升:
Added debug info handler to DOM objects.
Fixed bug #61172 (Add Apache 2.4 support).

需要看到一个完整的更新列表的话请到这里看 changelog,源码下载页面在这里;Windows版可以到这里下载。

来源:www.php.net
 一个问题,怎样在js中判断一个对象是null还是undefined,我总结了一下,对于undefined推荐使用===(注意是三个等号,bt吧)或使用typeof,为什么呢?

  先看一段Code

var obj;
alert(obj == null);
alert(obj == undefined);

  结果是什么?true,true那obj到底是undefined呢还是defined呢?当然是defined的了,而且是null,显然通过==是区分不了的,那要将==替换为===呢?结果就是false,true,个中原因我就不说了,(偷一下懒 :-) ),那如何区分呢?应该使用===或者是typeof,用法?很简单:

  if(typeof obj == "undefined")

  if(obj === undefined)



实践Ok的代码片段:
主要是表格背景,字体交替等在smarty中的运用:

阅读全文
PHP百分号转小数:

php 小数转换百分数函数:


阅读全文
PHP 5.4.0 正式版发布了,该版本包含大量的新特性,同时也修复了很多的 bug ,其中新特性有 traits、一些数组语法的提升、内建的 Web 服务器、性能提升等等,想去请看 changelog

官方发行说明:http://php.net/releases/5_4_0.php
5.3 到 5.4 的移植指南:http://php.net/migration54
下载地址:http://php.net/downloads.php#v5.4.0

来自:http://www.oschina.net/news/26249/php-5-4-0-final
新特性:http://www.oschina.net/question/54100_33123

今天试装了一下这个最新的版本,PHP的ea加速有问题:
lroot@192.168.225.128:~/software/eaccelerator-0.9.6.1# make
make: Warning: File `Makefile' has modification time 2.7e+04 s in the future

Build complete.
Don't forget to run 'make test'.

make: 警告:检测到时钟错误。您的创建可能是不完整的。
2)APC加速:
文件上传进度反馈, 这个需求在当前是越来越普遍, 比如大附件邮件. 在PHP5.4以前, 我们可以通过APC提供的功能来实现. 或者使用PECL扩展uploadprogress来实现.

虽然说, 它们能很好的解决现在的问题, 但是也有很明显的不足:

1. 他们都需要额外安装(我们并没有打算把APC加入PHP5.4)
。。。来自:http://www.laruence.com/2011/10/10/2217.html
无大文件上传和进度需求,先安一下试试:
root@192.168.225.128:~/software/APC-3.1.9# phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
config.m4:180: warning: AC_CACHE_VAL(PHP_APC_GCC_ATOMICS, ...): suspicious cache-id, must contain _cv_ to be cached
../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from...

root@192.168.225.128:~/software/APC-3.1.9# make
make: *** 没有指明目标并且找不到 makefile。 停止

3)Memcache Client扩展,安装成功,但有问题:
root@192.168.225.128:~/software/memcache-2.2.6# ls /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
问题:
root@192.168.225.128:~/software/memcache-2.2.6# php -m
PHP Warning:  PHP Startup: Unable to load dynamic library ' /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so' -  /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so: cannot open shared object file: No such file or directory in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library ' /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so' -  /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so: cannot open shared object file: No such file or directory in Unknown on line 0

其他扩展,还没有试,我估计也有很多这样那样的问题,为此,我估计这个PHP5.4.0应该是一个过渡版本,还有很多东东,不光是它本身,还有周边配合主件的完善,这还是需要一短时间的。So,建议大家还是用这个:PHP5.3.10吧,毕竟生产环境不是实验场所。
有时我们在Post的Ajax请求时还是需要一个Get的请求,但Ajax在Jquery封装的Get,Post都是默认异步的,要想同步还是得更加底层,于是有了下面的代码,其实还有更好的方法,
或者在全局设置Ajax属性

再用post,get就是同步的了

网上也有,Url及内容贴在最下面:阅读全文
常用的参数
$#  参数的个数
$* 所有的参数
$@ 所有的参数
shift来处理参数 一般两种形式阅读全文
序言:在使用jquery操作js时,经常整不明白this与$(this)。抽空仔细测试了一把,记录下来以供在忘记的时候拉出来参考参考!
$(this)生成的是什么
$()生成的是什么呢?实际上$()=jquery(),那么也就是说返回的是一个jquery的对象。

题外话:通常我们为了简便直接使用$(),实际上,该函数省略了一个参数context,即$(selector)=$(selector,document).如果指定context,可以指定context为一个dom元素集或者jquery对象。
那么依照,$()返回的是jquery对象这一结论,我们可以得出$(this)得到的是一个jquery对象.我们可以使用万能的alert()方法打印出一个对象:
alert($('#btn'));显示的结果:
test 该图红色框勾选出来的是一个object,不用考虑,该object自然是jquery的对象咯。也即是说我们用通过$('#btn')来调用jquery的方法和属性等。
this代表什么?
this,编程的人都知道this表示上下文所处的这个对象,这个自然是不错的,可是这个对象到底是个什么对象呢?加入js里面也有getType的话返回的值会是什么呢?其实js里面不需要使用getType,因为我们有万能的alert.请看看下面的代码:

根据我们的经验(因为$()生成的是jquery的对象嘛),this自然是一个jquery的对象咯。可是我们看看返回的结果:
test1返回的是什么?【object HTMLInputElement】——伟大的html对象,嘿嘿。所以我们通常在直接使用this.val()或者直接通过this来调用jquery所特有的方法或属性的时候会报错误:mistake  为什么呢?明知故问!html对象当然“不包含属性或方法”了。那么为什么在一个jquery对象的上下文中调用this返回的是一个html对象而不是jquery对象 呢?翻遍jquery的api文档,貌似jquery中并未对this这一关键字进行过特殊“处理”,也就是说这里this是js中的,而不是jquery重新定义了的。so...当然这仅仅是我自己的想法,如果有对此更了解的朋友可以留言更正。而我们再看一下以上代码中alert($(this));的返回,自然是jquery的对象了,在此调用jquery特有的方法和属性,完全没有问题。
结论:
this,表示当前的上下文对象是一个html对象,可以调用html对象所拥有的属性,方法
$(this),代表的上下文对象是一个jquery的上下文对象,可以调用jquery的方法和属性值。

测试代码:



来源:http://www.cnblogs.com/iceWolf/archive/2009/08/27/1555138.html


阅读全文
通常我们会有一个统一的上传接口,这个接口会被其他的服务调用。如果出现不同域,还需要无刷新上传文件,并且获取返回值,这就有点麻烦了。比如,新浪微博启用了新域名www.weibo.com,但接口还是使用原来的域:picupload.t.sina.com.cn。

研究了一下新浪微博的处理方法,这里大概演示一下。

首先是一个正常的上传页面 upload.html


这里有一个关键点是form的target要指向iframe,同时把iframe隐藏起来,这样上传的处理结果就会显示在该iframe里。action里的cb(callback)参数表示处理完成后要跳转的url,因为我们的目标是iframe,所以只会把跳转的页面输出到iframe,而不会让当前页面跳转。

还有一点,callback url要和当前页面同域。跨域的iframe无法调用父页面的内容。【这儿如跨域了怎么办呢?】

再来看看deal.php,也就是form的action


这里可以处理文件,然后入库。操作完成后,把文件的id及其他信息都放在url里,最后跳转到这个url。

最后来看看deal_cd.html,也就是刚刚deal.php跳转到的url,这个文件的内容会填充到页面的iframe里。

b.a.com上的deal.php (这个是请求API的页面,如上传文件的页)

这种方式适用于{www.a.com, a.com, script.a.com, css.a.com}中的任何页面相互通信。这儿的关键在于两个页面都要有设定document.domain =XXX,如果有一个不设定的话,都会报错!!!

备注:某一页面的domain默认等于window.location.hostname。主域名是不带www的域名,例如a.com,主域名前面带前缀的通常都为二级域名或多级域名,例如www.a.com其实是二级域名。 domain只能设置为主域名,不可以在b.a.com中将domain设置为c.a.com。
常规用document.domain+iframe的设置,也就是上面这种方法。
当然还有其他的上传跨域方法:利用iframe和location.hash window.name实现的跨域数据传输 Html5等。
如跨域文件上传解决方案:上传文件到A网站,然后通过PHP的ftp函数、或HTTP模拟上传到B,这样的话返回的json一直是在A网站上的;另外也可以参考一下腾讯的,如果两个网站都是你的,比如你a网站的域名为www.a.com,在B网站同时绑定一个域名upload.www.a.com,就可以直接上传到B网站并返回json数据了,来自:http://www.gosenz.com/blog/Default.aspx?__tencentip=10.16.64.112&__tencentid=1&__tencentrawurl=http://www.gosenz.com/blog/?p=89
以上稍微整理自网上By:jack。
参考:http://blog.leezhong.com/tech/2011/05/06/crossdomain-upload.html
        http://developer.51cto.com/art/201102/245701.htm
经常对提交过来的数据进行双重循环,或者如下的for循环,但是数组为空时会报错:

这里的$tstSumOptionArr是由数据库查询出来的,有可能为Null,所以PHP在foreach 一个Null时会报警,而在前面强制一个这个是数组就不会报警了。
否则,你可能会这样来处理,如下:
当一个网站项目进入运营维护阶段以后,不会再频繁地更新全部源文件到服务器,这个时间的修改大多是局部的,因此更新文件只需更新修改过的文件,其他没有修改过的文件就没有必要上载到服务器。但一个稍微上规模的网站项目,文件是很多的,而且对于团队协作开发更难知道每次修改到哪些文件,这时候SVN的作用发挥出来了。
主要优点:打开导出来的文件,文件夹层次是保留不变的,这样你可以打包上传服务器,然后解压覆盖。不用担心漏传文件,也不用担心会覆盖错文件。
阅读全文
Jack's Note:
共享内存再顺带提一下消息队列Message Queue(也是在System V IPC函数组中),消息队列似乎可以视为另一种共享内存,只是数据存储的方式有些不同。简单来说,就是每个key对应一个队列,每个队列可以保存多个数据,数据间按照先进先出的原则进行操作。
这个简单的方式,健壮性超过大多的 免费MQ server,限制是只能在Unix下用
Linux编译php时option加上--enable-sysvmsg
PHP编译Configure如下:

出现编译问题如下:

php在make过程中出现“usr bin ld cannot find lltdl”错误,详细错误如下:
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1
在Google上搜了好久,终于找到答案,原来是在编辑php时添加的“–with-mcrypt”选项造成[上面的编译暂时去掉了–with-mcrypt就Ok了]。所以“usr bin ld cannot find lltdl”错误解决办法如下:
1、如果不需要mcrypt,那么编辑php时去掉该选项,然后再make、make install。
2、如果需要mcrypt,那么需要安装libltdl
libltdl在libmcrypt软件包中就有,具体过程:

经过测试,果然去掉“–with-mcrypt”选项编译通过。
send.php

Receive.php
yum install libevent-dev 安装libevent
yum install libevent
PHP Extention: http://pecl.php.net/package/libevent/0.0.5



再就是:自己编译 http://libevent.org/

缘起:PHP5的先进之处在于,你可以用stream_select()处理几乎所有的stream-例如你可以通过include STDIN用它接收键盘输入并保存进数组,你还可以接收通过proc_open()打开的管道中的数据。
目的:想用这个函数进行对文件句柄进行监控,其并不是想用于网络的socket句柄,为此做了如下试验:
探索:能否用PHP的stream_select的方式对CentOs下的串口进行监控呢?经过一系列的研究,发现是可以进行多串口的监控的。
研究: 发现会报错,stream_select(): cannot represent a stream of type dio as a select()
解决: 最后,见代码吧。代码下载:
如果,你想时间更短一点,E文是这样说的:
If you want to set an absolute maximum execution time for stream_select in a loop, it's important to decrement the max_time value passed to stream_select.修改了一下的情况,好像效果不明显,呵呵:

完善的第三个版本备案下载,这个实现了对多个串口的同时读写。By:jack
  其实主要是对这个超时机制的理解。见下面这段代码的超时:

插曲:dio.raw://[device]
for raw streams anddio.serial://[devicefor serials streams. 这两种stream有什么区别啊?用serial不行,而用raw就Ok了。但是会出现上面的报错:stream_select(): cannot represent a stream of type dio as a select()
php有个libevent扩展,我觉得这个扩展应该可以有更广泛的用途,比如:
(1)异步的服务器端开发框架.
(2)类似unix下的tail命令行.
(3)用php和ZeroMQ实现的一个事件驱动服务器端
http://blog.sina.com.cn/s/blog_60b9ee7f0100qdmh.html
搞录:
问题:
有没有办法在php中实现多线程呢?
假设你正在写一个基于多台服务器的php应用,理想的情况时同时向多台服务器发送请求,而不是一台接一台。
可以实现吗?
回答:
当有人想要实现并发功能时,他们通常会想到用fork或者spawn threads,但是当他们发现php不支持多线程的时候,大概会转换思路去用一些不够好的语言,比如perl。
其实的是大多数情况下,你大可不必使用fork或者线程,并且你会得到比用fork或thread更好的性能。
。。。

PHP5的先进之处在于,你可以用stream_select()处理几乎所有的stream-例如你可以通过include STDIN用它接收键盘输入并保存进数组,你还可以接收通过proc_open()打开的管道中的数据。

日常生活中:
如对多个URL进行异步访问,那个curl_multi一族函数的函数是循环,而用这个就是真正调用类似Linux下的select函数:
实践安装步骤如下:
wget http://pecl.php.net/get/libevent-0.0.4.tgz
checking for libevent support... yes, shared
checking for libevent headers in default path... not found
configure: error: Cannot find libevent headers
root@192.168.1.108:~/software/libevent-0.0.4# yum -y install libevent-devel   libevent
不安libevent-devel会在具体安php的libevent扩展时出现找不到.h文件,用指定路径也成也就是下面的:
最好还是安上吧,但要是版本低于1.4还是指定的好,可能会出现问题,这样:
在安php的libevent扩展时加上 -with-libevent=/usr/local/webserver/libevent/:
./configure  -with-libevent=/usr/local/webserver/libevent/
---
原因是如下的包没有安装
libevent-devel
把此包安装上去就好了
yum -y install libevent-devel

root@116.255.139.240:~/software# rpm -qa|grep libevent
libevent-1.4.13-1
root@116.255.139.240:~/software# rpm -ql libevent-1.4.13-1
/usr/lib/libevent-1.4.so.2
/usr/lib/libevent-1.4.so.2.1.3
/usr/lib/libevent_core-1.4.so.2
/usr/lib/libevent_core-1.4.so.2.1.3
/usr/lib/libevent_extra-1.4.so.2
/usr/lib/libevent_extra-1.4.so.2.1.3
/usr/share/doc/libevent-1.4.13
/usr/share/doc/libevent-1.4.13/README

libevent的官网:http://libevent.org/
wget https://github.com/downloads/libevent/libevent/libevent-2.0.16-stable.tar.gz

yum -y install libevent-devel  主要是防止编译PHP扩展Configure时出现找不到.h文件,有了它就不用指明:-with-libevent=/usr/local/webserver/libevent/
./configure prefix=/usr/local/webserver/libevent/

扩展安装:http://pecl.php.net/package/libevent
wget http://pecl.php.net/get/libevent-0.0.4.tgz
/usr/local/webserver/php/bin/phpize
./configure  -with-libevent=/usr/local/webserver/libevent/
自己安或者yum,注意:yum安可能会出现问题:由於 PHP libevent 需要搭配C 的 libevent 1.4 以上版本 , 所以並非每個 Linux 套件都有 , 例如我的 CentOS 的 libevent 版本就比較舊 , 因此要自行編譯 , 以下就說明 CentOS 5.4 下成功編譯 PHP libevent 的步驟,PHP Warning:  stream_select(): supplied argument is not a valid stream resource .
root@192.168.1.108:~/software/libevent-0.0.4# ./configure  -with-libevent=/usr/local/webserver/libevent/
root@192.168.1.108:~/software/libevent-0.0.4# make;make install
......
........
Build complete.
Don't forget to run 'make test'.
Installing shared extensions:     /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/

安装完毕,如下:
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/libevent.so
DownLoad 测试源码,来自网上:


代码示例,来自网上,注释部分代码,测试读部分是ok的,如下:






网上其他的步骤,主要是注意不有yum默认的安装方法【由於 PHP libevent 需要搭配C 的 libevent 1.4 以上版本 , 所以並非每個 Linux 套件都有 , 例如我的 CentOS 的 libevent 版本就比較舊 , 因此要自行編譯 , 以下就說明 CentOS 5.4 下成功編譯 PHP libevent 的步驟】:

1. 編譯 libevent

解開 libevent source code , 進入 source code 目錄

執行 ./configure –prefix=/usr/local

執行 make

執行 make install

2. 編譯 PHP libevent

解開 PHP libevent source code , 進入 source code 目錄

執行 phpize

執行 ./configure –with-libevent=/usr/local

執行 make

執行 make install

這樣會把 libevent.so 安裝到 /usr/lib/php/modoules 或 /usr/lib64/php/modules , 看 os 是 32bit 或 64bit

同时呢,也可以参考下这个URL:http://www.ooso.net/archives/607

附录,关于curl_multi一族函数的问题:
阅读全文
1.模拟Linux下的82端口:[Linux自带的nc (netcat) ]
Suse: netcat -l -p 82
Centos: nc -l localhost 82

参考:http://linux.vbird.org/linux_server/0140networkcommand.php
2.查看某个特定进程的CPU,内存等信息:
top只能看前几位,但是这样就可能看到任意,top -p 进程号,如:


3.tcpdump之监听某个端口:


4.gdb 之调试某个启动后的进程(注意该进程必须编译时加 -g):
通过ps 知道进程号为:16418,这样:

有某个文件的106行停止。

5.尽量在调试C++服务程序时不要用到 -O2,也就是不要用优化,这样更方便GDB调试。

6.善于用ipcs -m查看共享内存:

Eof。
Write -By:jack


实践情况:
端口收到实践:
netcat -l -p 82
gooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygoodday
root@116.255.139.240:~#  nc -l localhost 82
goodday
端口监听情况:
tcpdump -n -ilo port 82  
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
14:04:10.344635 IP 127.0.0.1.38541 > 127.0.0.1.82: S 3710369840:3710369840(0) win 32767 <mss 16396,sackOK,timestamp 1126784740 0,nop,wscale 2>
14:04:10.344859 IP 127.0.0.1.82 > 127.0.0.1.38541: S 3702073690:3702073690(0) ack 3710369841 win 32767 <mss 16396,sackOK,timestamp 1126784740 1126784740,nop,wscale 2>
分页: 15/18 第一页 上页 5 6 7 8 9 10 11 12 13 14 15 16 17 18 下页 最后页 [ 显示模式: 摘要 | 列表 ]