在网上看一个哥们配置如下:
Intel i7 920 Nehalem架构 原生4核+HT超线程 2.66GHz
华硕ASUS 玩家国度 Rampage II Extreme X58 主板
技嘉GIGABYTE Nvidia GTX295 显卡
三星Samsung 2233rz 3D显示器 120Hz
金士顿Kingstone DDR3 6GB(2GB x 3)
希捷Seagate 7200.11 32M 500GB x 2(Raid0)
Nvidia 3D Vision套装(3D眼镜 + 红外线定位器)
创新Creative Supreme X-Fi 声卡 7.1声道 + 光纤输出
TT(Thermal Take)ARMOR 透明纯铝机箱
海盗船Corsair HX1000w电源
Intel i7 920 Nehalem架构 原生4核+HT超线程 2.66GHz
华硕ASUS 玩家国度 Rampage II Extreme X58 主板
技嘉GIGABYTE Nvidia GTX295 显卡
三星Samsung 2233rz 3D显示器 120Hz
金士顿Kingstone DDR3 6GB(2GB x 3)
希捷Seagate 7200.11 32M 500GB x 2(Raid0)
Nvidia 3D Vision套装(3D眼镜 + 红外线定位器)
创新Creative Supreme X-Fi 声卡 7.1声道 + 光纤输出
TT(Thermal Take)ARMOR 透明纯铝机箱
海盗船Corsair HX1000w电源
PDO 类, 发现也会有 UTF-8 乱码问题, 以下解决方案:
// 方法一:
PDO::__construct($dsn, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8';"));
// 方法二:
PDO::__construct($dsn, $user, $pass);
PDO::exec("SET NAMES 'utf8';");
两种方法都能解决问题, 原理一样的, 使用哪中看自己喜欢了
$db->query("SET NAMES 'utf8'");
In your bootstrap file...
$db = Zend_Db::factory($adapter, $config);$db->query("SET NAMES 'utf8'");then you save this instance in your registry
Zend_Registry::set('db', $db);
// 方法一:
PDO::__construct($dsn, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8';"));
// 方法二:
PDO::__construct($dsn, $user, $pass);
PDO::exec("SET NAMES 'utf8';");
两种方法都能解决问题, 原理一样的, 使用哪中看自己喜欢了
$db->query("SET NAMES 'utf8'");
In your bootstrap file...
$db = Zend_Db::factory($adapter, $config);$db->query("SET NAMES 'utf8'");then you save this instance in your registry
Zend_Registry::set('db', $db);
在 php.ini 配置文件里面有这个选项
disable_functions = ; This directive allows you to disable certain
; functions for security reasons. It receives
; a comma separated list of function names.
; This directive is *NOT* affected by whether
; Safe Mode is turned on or off.
写成
disble_function = phpinfo
disable_functions = ; This directive allows you to disable certain
; functions for security reasons. It receives
; a comma separated list of function names.
; This directive is *NOT* affected by whether
; Safe Mode is turned on or off.
写成
disble_function = phpinfo
$a = "cd";
$$a = "finished";
$aa = "ok";
echo $cd;
?>
输出:
0> php abc.php
finished
$$a = "finished";
$aa = "ok";
echo $cd;
?>
输出:
0> php abc.php
finished
如何把: a1.txt b1.txt 合并为c1.txt
cat a1.txt b1.txt >c1.txt
但是如下合并呢?
来自:Linux文档
现载:Www.8s8s.coM
地址:无名
两个文件a1,b1
内容分别如下:
a1:
1
2
3
b1:
a
b
c
如何把它们合在一起内容如下的:
1 a
2 b
3 c
-----------------------------
paste -d" " a1 a2阅读全文
cat a1.txt b1.txt >c1.txt
但是如下合并呢?
来自:Linux文档
现载:Www.8s8s.coM
地址:无名
两个文件a1,b1
内容分别如下:
a1:
1
2
3
b1:
a
b
c
如何把它们合在一起内容如下的:
1 a
2 b
3 c
-----------------------------
paste -d" " a1 a2阅读全文
参看N久前写的一篇文章:http://blog.5ifd.com/post/1253/
朋友要匹配:123.html
code:
result:
Array
(
[0] => Array
(
[0] => http://www.test.com/123.html
)
[1] => Array
(
[0] => 123
)
)
取得$str_out的$str_out[1][0]即可!
第一示例:
可以用来简化Nginx的$1,$2。
rewrite "^/(\d*)/trends-list-(\w*)\.html$" /index.php?d=front&c=index&a=trends&uid=$1&page=$2&tag=list&max_age=1800 last;
---------- 调试PHP ----------
Array
(
[0] => 12204886/trends-list-4
[1] => 12204886
[2] => 4
)
第二示例:
rewrite "^/(\d*)/friend-(myfans|myfollow)-(\w*)\.html$" /index.php?d=front&c=index&a=friend&uid=$1&tag=$2&page=$3&max_age=1800 last;
---------- 调试PHP ----------
Array
(
[0] => /30991799/friend-myfollow-5.html
[1] => 30991799
[2] => myfollow
[3] => 5
)
第三示例:
rewrite "^/list-(\d*)-(\d*)-(\d*)-(.*)\.html$" /index.php?d=site&c=list&a=index&type=$1&label=$2&period=$3&name=$4 last;
---------- 调试PHP ----------
Array
(
[0] => /list-0-0-1-测试.html
[1] => 0
[2] => 0
[3] => 1
[4] => 测试
)
______________________________________________________________
接合Nginx的urlrewrite进行$1,$2类似配置的方法:
通过print_r打印数组是不错的调试nginx重写的适用方法:
index2.php代码如下:
http://jackxiang.com/12204886/trends-list-4.html
Array
(
[d] => front
[c] => index
[a] => trends
[uid] => 12204886
[page] => 4
[tag] => list
[max_age] => 1800
)
http://jackxiang.com/30991799/friend-myfollow-5.html
Array
(
[d] => front
[c] => index
[a] => friend
[uid] => 30991799
[tag] => myfollow
[page] => 5
[max_age] => 1800
)
朋友要匹配:123.html
code:
result:
Array
(
[0] => Array
(
[0] => http://www.test.com/123.html
)
[1] => Array
(
[0] => 123
)
)
取得$str_out的$str_out[1][0]即可!
第一示例:
可以用来简化Nginx的$1,$2。
rewrite "^/(\d*)/trends-list-(\w*)\.html$" /index.php?d=front&c=index&a=trends&uid=$1&page=$2&tag=list&max_age=1800 last;
---------- 调试PHP ----------
Array
(
[0] => 12204886/trends-list-4
[1] => 12204886
[2] => 4
)
第二示例:
rewrite "^/(\d*)/friend-(myfans|myfollow)-(\w*)\.html$" /index.php?d=front&c=index&a=friend&uid=$1&tag=$2&page=$3&max_age=1800 last;
---------- 调试PHP ----------
Array
(
[0] => /30991799/friend-myfollow-5.html
[1] => 30991799
[2] => myfollow
[3] => 5
)
第三示例:
rewrite "^/list-(\d*)-(\d*)-(\d*)-(.*)\.html$" /index.php?d=site&c=list&a=index&type=$1&label=$2&period=$3&name=$4 last;
---------- 调试PHP ----------
Array
(
[0] => /list-0-0-1-测试.html
[1] => 0
[2] => 0
[3] => 1
[4] => 测试
)
______________________________________________________________
接合Nginx的urlrewrite进行$1,$2类似配置的方法:
通过print_r打印数组是不错的调试nginx重写的适用方法:
index2.php代码如下:
http://jackxiang.com/12204886/trends-list-4.html
Array
(
[d] => front
[c] => index
[a] => trends
[uid] => 12204886
[page] => 4
[tag] => list
[max_age] => 1800
)
http://jackxiang.com/30991799/friend-myfollow-5.html
Array
(
[d] => front
[c] => index
[a] => friend
[uid] => 30991799
[tag] => myfollow
[page] => 5
[max_age] => 1800
)
经验一:光鲜的招聘现场背后不一定代表一个正规友善、蓬勃向上的公司。比如2007年春我经历过一个大型的超市,它很快就倒闭了,招聘现场非常热闹,招聘手法非常有现代感——但是,两个月后,这家公司倒闭了。所以判断一个公司的实力,最好还是上网查一下、到公司问一下,像这个公司的供货商或者合作伙伴打听一下,绝人不能看招聘时的场面或者招聘人员的自我宣传。
经验二:招聘人员的高素质,不代表将来直接和你一起工作的人同样素质高;很多朋友都遇到过这样的问题,好不容易看到了一个知情达理的HR,谈得也很好。去工作了以后,才发现那个公司很乱套,除了那个HR以外的人员都非常差,甚至你会发现那个HR也很差。阅读全文
经验二:招聘人员的高素质,不代表将来直接和你一起工作的人同样素质高;很多朋友都遇到过这样的问题,好不容易看到了一个知情达理的HR,谈得也很好。去工作了以后,才发现那个公司很乱套,除了那个HR以外的人员都非常差,甚至你会发现那个HR也很差。阅读全文
E文参看:http://www.ietf.org/rfc/rfc1867.txt
中文描述:http://blog.sina.com.cn/s/blog_4c4a58ca0100091l.html
RFC1867协议介绍
RFC1867协议主要是在HTTP协议的基础上为INPUT标签增加了file属性,同时限定了Form的method必须为POST,ENCTYPE必须为multipart/form-data。当然还增加了一些与此相关属性,但都不是很重要,我们在此不作讨论。
在一般的基于Web的程序中,我们往往使用<input type=”file”>标签,该标签在被浏览器解析后会产生一个文本框和一个浏览按钮,单击浏览按钮会出现系统的文件选择框。
2. 执行上传及<input type=”file”>标签的一些特性阅读全文
中文描述:http://blog.sina.com.cn/s/blog_4c4a58ca0100091l.html
RFC1867协议介绍
RFC1867协议主要是在HTTP协议的基础上为INPUT标签增加了file属性,同时限定了Form的method必须为POST,ENCTYPE必须为multipart/form-data。当然还增加了一些与此相关属性,但都不是很重要,我们在此不作讨论。
在一般的基于Web的程序中,我们往往使用<input type=”file”>标签,该标签在被浏览器解析后会产生一个文本框和一个浏览按钮,单击浏览按钮会出现系统的文件选择框。
2. 执行上传及<input type=”file”>标签的一些特性阅读全文
每一种创伤,都是一种成熟
1.活着一天,就是有福气,就该珍惜。当我哭泣我没有鞋子穿的时候,我发现有人却没有脚。
2.宁可自己去原谅别人,莫让别人来原谅你。
3.世界原本就不是属于你,因此你用不着抛弃,要抛弃的是一切的执著。万物皆为我所用,但非我所属。阅读全文
1.活着一天,就是有福气,就该珍惜。当我哭泣我没有鞋子穿的时候,我发现有人却没有脚。
2.宁可自己去原谅别人,莫让别人来原谅你。
3.世界原本就不是属于你,因此你用不着抛弃,要抛弃的是一切的执著。万物皆为我所用,但非我所属。阅读全文
我们通常开启keep-alive,这种模式,即使apache的服务进程/线程已经和client完成了IO通信,也仍然无法处理新的请求,因为连接未被断开。event就是为了解决这种场景下的,IO空等。
思路类似于协程
apache的一个线程处理完之后,要给客户端回复10K内容,处理过程是下面哪一种情况:
1、apache线程将10K内容丢给底层,apache线程立即空闲出来可以处理下一个请求,底层将10k内容发给客户端
2、apache线程等客户端接收完10K内容后才空闲
应该是1,底层buffer也有大小限制,10k全部写到内核的buffer中,线程会再次进行系统调用select(假设工作在select模式下),获取下一个ready的文件描述符
如果按写文件来理解发送网络内容,感觉是2,文件内容写完了线程才能空闲出来
will说的写到buffer的可能性比较大
Apache的prefork模式,也就是多进程模式,是完整处理完一个用户请求后,才能处理下一个请求。
worker模式,同上,只是处理的者从进程变为线程。(线程比进程轻量,占据更少内存空间等)
event模式(比较新版本的Apache才完整支持),可以做到遇到IO等待的时,执行其新的请求。
http://hansionxu.blog.163.com/blog/static/2416981092014112933930779/
__________________________________________________
prefork和worker模式的比较
prefork模式使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。
worker模式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起”死掉”.由于线程共享内存空间,所以一个程序在运行时必须被系统识别为”每个线程都是安全的”。
总的来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker。
1、prefork.c模块(一个非线程型的、预派生的MPM)
prefork MPM 使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:他能够使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,他也更容易调试一些。阅读全文
思路类似于协程
apache的一个线程处理完之后,要给客户端回复10K内容,处理过程是下面哪一种情况:
1、apache线程将10K内容丢给底层,apache线程立即空闲出来可以处理下一个请求,底层将10k内容发给客户端
2、apache线程等客户端接收完10K内容后才空闲
应该是1,底层buffer也有大小限制,10k全部写到内核的buffer中,线程会再次进行系统调用select(假设工作在select模式下),获取下一个ready的文件描述符
如果按写文件来理解发送网络内容,感觉是2,文件内容写完了线程才能空闲出来
will说的写到buffer的可能性比较大
Apache的prefork模式,也就是多进程模式,是完整处理完一个用户请求后,才能处理下一个请求。
worker模式,同上,只是处理的者从进程变为线程。(线程比进程轻量,占据更少内存空间等)
event模式(比较新版本的Apache才完整支持),可以做到遇到IO等待的时,执行其新的请求。
http://hansionxu.blog.163.com/blog/static/2416981092014112933930779/
__________________________________________________
prefork和worker模式的比较
prefork模式使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。
worker模式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起”死掉”.由于线程共享内存空间,所以一个程序在运行时必须被系统识别为”每个线程都是安全的”。
总的来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker。
1、prefork.c模块(一个非线程型的、预派生的MPM)
prefork MPM 使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:他能够使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,他也更容易调试一些。阅读全文
PHP运行超时 不修改php.ini的情况下,如果没有set_time_limit(0),那么下面这段程序将很快报超时错误,加了之后可以耐心等待运行结束了
=======================================================================
在运行一个较长脚本的时候遇到超时的问题了,所以查了下,在php.ini中设置下就可以了
搜索max_execution_time = 30 ; 每个脚本的最大执行时间, 按秒计的
个人认为改成60秒已经很高了!
可用程序修改:set_time_limit (0);
=================================================
语法 : void set_time_limit (int seconds)
说明 :
设定一个程式所允许执行的秒数,如果到达限制的时间,程式将会传回错误。它预设的限制时间是30秒,max_execution_time的值定义在结构档案中(在PHP3中叫做php3.ini,在PHP4则叫做php.ini),如果将秒数设为0,表示无时间上的限制。
当呼叫此函式时,set_time_limit( )会从零重新开始计算最长执行的时间,也就是说,如果最长执行时间为预设的30秒,而在呼叫此函式set_time_limit(20)之前已花了25秒来执行程式,则程式最长执行的时间将会是45秒。
注意 : 当PHP是执行在安全模式时,set_time_limit( )将不会有结果,除非是关闭安全模式或是修改结构档案中(在PHP3中叫做php3.ini,在PHP4则叫做php.ini)的时间限制。
例 :
set_time_limit(1000)
=======================================================================
在运行一个较长脚本的时候遇到超时的问题了,所以查了下,在php.ini中设置下就可以了
搜索max_execution_time = 30 ; 每个脚本的最大执行时间, 按秒计的
个人认为改成60秒已经很高了!
可用程序修改:set_time_limit (0);
=================================================
语法 : void set_time_limit (int seconds)
说明 :
设定一个程式所允许执行的秒数,如果到达限制的时间,程式将会传回错误。它预设的限制时间是30秒,max_execution_time的值定义在结构档案中(在PHP3中叫做php3.ini,在PHP4则叫做php.ini),如果将秒数设为0,表示无时间上的限制。
当呼叫此函式时,set_time_limit( )会从零重新开始计算最长执行的时间,也就是说,如果最长执行时间为预设的30秒,而在呼叫此函式set_time_limit(20)之前已花了25秒来执行程式,则程式最长执行的时间将会是45秒。
注意 : 当PHP是执行在安全模式时,set_time_limit( )将不会有结果,除非是关闭安全模式或是修改结构档案中(在PHP3中叫做php3.ini,在PHP4则叫做php.ini)的时间限制。
例 :
set_time_limit(1000)
create TABLE myIndex ( i_testID INT NOT NULL AUTO_INCREMENT, vc_Name VARCHAR(50) NOT NULL, vc_City VARCHAR(50) NOT NULL, i_Age INT NOT NULL, i_SchoolID INT NOT NULL, PRIMARY KEY (i_testID) );
在这10000条记录里面7上8下地分布了5条vc_Name="erquan"的记录,只不过city,age,school的组合各不相同。
来看这条T-SQL:
select i_testID FROM myIndex where vc_Name='erquan' AND vc_City='郑州' AND i_Age=25;
首先考虑建单列索引:
在vc_Name列上建立了索引。执行T-SQL时,MYSQL很快将目标锁定在了vc_Name=erquan的5条记录上,取出来放到一中间结果集。在这个结果集里,先排除掉vc_City不等于"郑州"的记录,再排除i_Age不等于25的记录,最后筛选出唯一的符合条件的记录。
虽然在vc_Name上建立了索引,查询时MYSQL不用扫描整张表,效率有所提高,但离我们的要求还有一定的距离。同样的,在vc_City和i_Age分别建立的单列索引的效率相似。
为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将vc_Name,vc_City,i_Age建到一个索引里:
alter TABLE myIndex ADD INDEX name_city_age (vc_Name(10),vc_City,i_Age);--注意了,建表时,vc_Name长度为50,这里为什么用10呢?因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高insert的更新速度。
执行T-SQL时,MySQL无须扫描任何记录就到找到唯一的记录!!
肯定有人要问了,如果分别在vc_Name,vc_City,i_Age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率一样吧?嘿嘿,大不一样,远远低于我们的组合索引~~虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。
建立这样的组合索引,其实是相当于分别建立了
vc_Name,vc_City,i_Age
vc_Name,vc_City
vc_Name
这样的三个组合索引!为什么没有vc_City,i_Age等这样的组合索引呢?这是因为mysql组合索引"最左前缀"的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个T-SQL会用到:
select * FROM myIndex WHREE vc_Name="erquan" AND vc_City="郑州"
select * FROM myIndex WHREE vc_Name="erquan"
而下面几个则不会用到:
select * FROM myIndex WHREE i_Age=20 AND vc_City="郑州"
select * FROM myIndex WHREE vc_City="郑州"
在这10000条记录里面7上8下地分布了5条vc_Name="erquan"的记录,只不过city,age,school的组合各不相同。
来看这条T-SQL:
select i_testID FROM myIndex where vc_Name='erquan' AND vc_City='郑州' AND i_Age=25;
首先考虑建单列索引:
在vc_Name列上建立了索引。执行T-SQL时,MYSQL很快将目标锁定在了vc_Name=erquan的5条记录上,取出来放到一中间结果集。在这个结果集里,先排除掉vc_City不等于"郑州"的记录,再排除i_Age不等于25的记录,最后筛选出唯一的符合条件的记录。
虽然在vc_Name上建立了索引,查询时MYSQL不用扫描整张表,效率有所提高,但离我们的要求还有一定的距离。同样的,在vc_City和i_Age分别建立的单列索引的效率相似。
为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将vc_Name,vc_City,i_Age建到一个索引里:
alter TABLE myIndex ADD INDEX name_city_age (vc_Name(10),vc_City,i_Age);--注意了,建表时,vc_Name长度为50,这里为什么用10呢?因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高insert的更新速度。
执行T-SQL时,MySQL无须扫描任何记录就到找到唯一的记录!!
肯定有人要问了,如果分别在vc_Name,vc_City,i_Age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率一样吧?嘿嘿,大不一样,远远低于我们的组合索引~~虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。
建立这样的组合索引,其实是相当于分别建立了
vc_Name,vc_City,i_Age
vc_Name,vc_City
vc_Name
这样的三个组合索引!为什么没有vc_City,i_Age等这样的组合索引呢?这是因为mysql组合索引"最左前缀"的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个T-SQL会用到:
select * FROM myIndex WHREE vc_Name="erquan" AND vc_City="郑州"
select * FROM myIndex WHREE vc_Name="erquan"
而下面几个则不会用到:
select * FROM myIndex WHREE i_Age=20 AND vc_City="郑州"
select * FROM myIndex WHREE vc_City="郑州"
一个剑客要想修炼成为可御剑飞升的剑仙,就要提高自身素质和用剑的本领,开发人员也是一样,我们的\"剑\"就是技术。那么要在哪些方面下功夫呢?
阅读全文
阅读全文
走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的10年的路程,有些心得体会你可以借鉴一下,觉得说得有道理的你就接纳,觉得说得没道理的,你就抛弃,以下是我发自内心的,给大家的忠告,特别是针对那些小弟弟妹妹们。阅读全文
看老外在做PHP的comet的时候往往在做推送数据的时候呢,往往就是进入while(1)里面循环发送,然后sleep(1)一下,往往不能再和外面的程序推送数据给它而后很难实现客户端的访问给予提交相关的数据进而推出需要返回的数据,由于是长连接,这个php.ext一直不能退出,我刚刚突然想到了通过共享内存来实现,php.exe永不退出,而php2.exe去修改php.exe的共享内存内容,进而在php.exe里面还没有退出就得到了新的内容不断吐数据给浏览器端,这样就扩展了php的应用范围,可以实现真正的推送数据了,呵呵!
这仅仅是我自己的一个想法。【向东】其实socket也是可以写在while(1) 里面从别的程序拿到数据的,PHP4好像对socket的支持不是很好,PHP5不知如何??。
参考:PHP下利用共享内存处理session的代码 http://blog.jackxiang.com/post/1853/
PHP进程间通讯之共享内存: http://blog.jackxiang.com/post/1852/
这仅仅是我自己的一个想法。【向东】其实socket也是可以写在while(1) 里面从别的程序拿到数据的,PHP4好像对socket的支持不是很好,PHP5不知如何??。
参考:PHP下利用共享内存处理session的代码 http://blog.jackxiang.com/post/1853/
PHP进程间通讯之共享内存: http://blog.jackxiang.com/post/1852/