phpthread
㈠ php Thread Safety enabled 怎么改成disabled
我也在找这个问题的解决方法,网上都说要换php版本,唉 这样我就要重新编译安装php跟apache了,头痛。
㈡ PHP使用Pthread实现的多线程操作实例
本文实例讲述了PHP使用Pthread实现的多线程操作。分享给大家供大家参考,具体如下:
<?php
class
vote
extends
Thread
{
public
$res
=
'';
public
$url
=
array();
public
$name
=
'';
public
$runing
=
false;
public
$lc
=
false;
public
function
__construct($name)
{
$this->res
=
'暂无,第一次运行.';
$this->param
=
0;
$this->lurl
=
0;
$this->name
=
$name;
$this->runing
=
true;
$this->lc
=
false;
}
public
function
run()
{
while
($this->runing)
{
if
($this->param
!=
0)
{
$nt
=
rand(1,
10);
echo
"线程[{$this->name}]收到任务参数::{$this->param},需要{$nt}秒处理数据.\n";
$this->res
=
rand(100,
999);
sleep($nt);
$this->lurl
=
$this->param;
$this->param
=
'';
}
else
{
echo
"线程[{$this->name}]等待任务..\n";
}
sleep(1);
}
}
}
//这里创建线程池.
$pool[]
=
new
vote('a');
$pool[]
=
new
vote('b');
$pool[]
=
new
vote('c');
//启动所有线程,使其处于工作状态
foreach
($pool
as
$w)
{
$w->start();
}
//派发任务给线程
for
($i
=
1;
$i
<
10;
$i++)
{
$worker_content
=
rand(10,
99);
while
(true)
{
foreach
($pool
as
$worker)
{
//参数为空则说明线程空闲
if
($worker->param=='')
{
$worker->param
=
$worker_content;
echo
"[{$worker->name}]线程空闲,放入参数{$worker_content},上次参数[{$worker->lurl}]结果[{$worker->res}].\n";
break
2;
}
}
sleep(1);
}
}
echo
"所有线程派发完毕,等待执行完成.\n";
//等待所有线程运行结束
while
(count($pool))
{
//遍历检查线程组运行结束
foreach
($pool
as
$key
=>
$threads)
{
if
($worker->param=='')
{
echo
"[{$threads->name}]线程空闲,上次参数[{$threads->lurl}]结果[{$threads->res}].\n";
echo
"[{$threads->name}]线程运行完成,退出.\n";
//设置结束标志
$threads->runing
=
false;
unset($pool[$key]);
}
}
echo
"等待中...\n";
sleep(1);
}
echo
"所有线程执行完毕.\n";
希望本文所述对大家php程序设计有所帮助。
㈢ 用php怎样做多线程的方法
php(做为现在的主流开发语言)中实现多线程? 看到这个标题, 你一定以为我疯了..但是事实上我真的这么做了.
下面是我的一些做法, 已经实验过. 确实可以的.
我们知道php(做为现在的主流开发语言)本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的.
也就是说可以同时让多人一起访问. 这也是我在php(做为现在的主流开发语言)中实现多线程的基础.
假设我们现在运行的是a.php(做为现在的主流开发语言)这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php(做为现在的主流开发语言)
那么这两个文件将是同时执行的.
(PS: 一个链接请求发送之后, WEB服务器就会执行它, 而不管客户端是否已经退出)
有些时候, 我们想运行的不是另一个文件, 而是本文件中的一部分代码.该怎么办呢?
其实可是通过参数来控制a.php(做为现在的主流开发语言)来运行哪一段程序.
下面看一个例子:
//a.php(做为现在的主流开发语言)
php(做为现在的主流开发语言)代码:--------------------------------------------------------------------------------
<?php(做为现在的主流开发语言)
function runThread()
{
$fp = fsockopen(localhost, 80, $errno, $errmsg);
fputs($fp, "GET /a.php(做为现在的主流开发语言)?act=b "); //这里的第二个参数是HTTP协议中规定的请求头
//不明白的请看RFC中的定义
fclose($fp);
}
function a()
{
$fp = fopen(result_a.log, w);
fputs($fp, Set in . Date(h:i:s, time()) . (double)microtime() . " ");
fclose($fp);
}
function b()
{
$fp = fopen(result_b.log, w);
fputs($fp, Set in . Date(h:i:s, time()) . (double)microtime() . " ");
㈣ 论坛里面的thread和post分别是什么意思
论坛里thread和post的中文意思是帖子。
thread
一、读音
英 [θred] 美 [θred]
二、含义
n. 线;思路;螺纹;线索;细丝;帖子
vt. 穿过;穿线于;遍布
vi. 滴下成丝状;小心地通过;蜿蜒前进
三、例证
The thread seems to match the cloth.
这线和这布似乎很相称。
四、词汇用法
1、thread用作名词的基本意思是“线”,可指用棉、毛、尼龙等制成的“线”,也可指细如线状的东西(如一丝亮光等),此时常用于a thread of结构。
2、thread用于比喻还可作“(贯穿故事等各部分的)线索”或“(某人的)思路”解,此时常与lose, pick〔take〕 up等连用。
3、thread还可作“螺纹”“衣物,衣服”解,作“衣物,衣服”解时多见于美国俚语中,且常用于复数形式。
(4)phpthread扩展阅读
post的词汇用法:
1、post作“张贴”解时,用作及物动词,接表示张贴物或内容的名词或代词作宾语,引申表示“宣布”“公告”时,接名词或代词作宾语,也可接以as短语充当补足语的复合宾语。
2、post作“邮寄”解时,可接双宾语,其间接宾语可以转化为介词to的宾语。
3、post作“设岗”“布置岗哨位”解时,其宾语为guard, sentry, soldier等名词,常用介词at引出设岗的“地点”;post引申可表示“派某人做某工作或担负某任务”,只用于被动结构。
㈤ PHP non-thread-safe和thread-safe这两个版本的区别
PHP5 non-thread-safe和thread-safe的区别
从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本的可供选择,这两种版本有何不同,作为使用者来说又应该如何选择呢?
先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;
Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式耗尽系统资源。
再来看PHP的两种执行方式:ISAPI和FastCGI。
FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI(搭配IIS)执行 PHP ,都建议下载执行 non-thread safe 的 PHP (PHP 的二进位档有两种包装方式:msi 、zip ,请下载 zip 套件)。
而线程安全检查正是为ISAPI方式的PHP准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP(搭配apache)。
如果你还搞不清楚,那么只需知道你是php+apache还是php+iis组合
non-thread-safe 非 线程安全与IIS搭配环境
thread-safe 线程安全 与apache搭配环境
另外php还有VC6 VC9版本区分
VC6和VC9一个支持apache一个支持IIS
VC9用在apache上也没问题,如果你用iis就必须用vc9的,如果你用apache vc6和vc9都可以用。
㈥ PHP5 non-thread-safe和thread-safe的区别
PHP5 non-thread-safe和thread-safe的区别
从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本的可供选择,这两种版本有何不同,作为使用者来说又应该如何选择呢?
先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;
㈦ 为什么php装了nts版本的,phpinfo打开后Thread Safety还是enabled的怎么办快急哭了
php分为线程安全版和非线程安全版,对于Apache的用户应当选择线程安全版,而IIS用户选择非安全版, 这里还存在一个php与Apache的版本的匹配问题,可根据php 中 php5apache2_4.dll文件判断,此为php5.x和Apache2.4.
㈧ php多线程
以下都是转载, 简单说下, php是不支持多线程的。。。。
PHP语言本身是不支持多线程的. 总结了一下网上关于PHP模拟多线程的方法, 总的来说, 都是利用了PHP的好伙伴们本身所具有的多线程能力. PHP的好伙伴指的就是LINUX和APACHE啦, LAMP嘛.
另外, 既然是模拟的, 就不是真正的多线程. 其实只是多进程. 进程和线程是两个不同的概念. 好了, 以下方法都是从网上找来的.
1. 利用LINUX操作系统
<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(5);
}
?>
上面存成test.php, 然后写一段SHELL代码
#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
php -q test.php &
done
2. 利用fork子进程(其实同样是利用LINUX操作系统)
<?php
declare(ticks=1);
$bWaitFlag = FALSE; /// 是否等待进程结束
$intNum = 10; /// 进程总数
$pids = array(); /// 进程PID数组
echo ("Startn");
for($i = 0; $i < $intNum; $i++) {
$pids[$i] = pcntl_fork();/// 产生子进程,而且从当前行之下开试运行代码,而且不继承父进程的数据信息
if(!$pids[$i]) {
// 子进程进程代码段_Start
$str="";
sleep(5+$i);
for ($j=0;$j<$i;$j++) {$str.="*";}
echo "$i -> " . time() . " $str n";
exit();
// 子进程进程代码段_End
}
}
if ($bWaitFlag)
{
for($i = 0; $i < $intNum; $i++) {
pcntl_waitpid($pids[$i], $status, WUNTRACED);
echo "wait $i -> " . time() . "n";
}
}
echo ("Endn");
?>
3. 利用WEB SERVER, PHP不支持多线程, APACHE可是支持的, 呵呵.
假设我们现在运行的是a.php这个文档. 但是我在程式中又请求WEB服务器运行另一个b.php
那么这两个文档将是同时执行的.
<?php
function runThread()
{
$fp = fsockopen('localhost', 80, $errno, $errmsg);
fputs($fp, "GET /a.php?act=brnrn");
fclose($fp);
}
function a()
{
$fp = fopen('result_a.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
function b()
{
$fp = fopen('result_b.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
if(!isset($_GET['act'])) $_GET['act'] = 'a';
if($_GET['act'] == 'a')
{
runThread();
a();
}
else if($_GET['act'] == 'b') b();
?>
当然啦,也可以把需要多线程处理的部分交给java去处理, 然后在PHP里调用, 哈哈.
<?php
system('java multiThread.java');
?>
㈨ php 线程
以下都是转载, 简单说下, php是不支持多线程的。。。。
PHP语言本身是不支持多线程的. 总结了一下网上关于PHP模拟多线程的方法, 总的来说, 都是利用了PHP的好伙伴们本身所具有的多线程能力. PHP的好伙伴指的就是LINUX和APACHE啦, LAMP嘛.
另外, 既然是模拟的, 就不是真正的多线程. 其实只是多进程. 进程和线程是两个不同的概念. 好了, 以下方法都是从网上找来的.
1. 利用LINUX操作系统
<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(5);
}
?>
上面存成test.php, 然后写一段SHELL代码
#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
php -q test.php &
done
2. 利用fork子进程(其实同样是利用LINUX操作系统)
<?php
declare(ticks=1);
$bWaitFlag = FALSE; /// 是否等待进程结束
$intNum = 10; /// 进程总数
$pids = array(); /// 进程PID数组
echo ("Startn");
for($i = 0; $i < $intNum; $i++) {
$pids[$i] = pcntl_fork();/// 产生子进程,而且从当前行之下开试运行代码,而且不继承父进程的数据信息
if(!$pids[$i]) {
// 子进程进程代码段_Start
$str="";
sleep(5+$i);
for ($j=0;$j<$i;$j++) {$str.="*";}
echo "$i -> " . time() . " $str n";
exit();
// 子进程进程代码段_End
}
}
if ($bWaitFlag)
{
for($i = 0; $i < $intNum; $i++) {
pcntl_waitpid($pids[$i], $status, WUNTRACED);
echo "wait $i -> " . time() . "n";
}
}
echo ("Endn");
?>
3. 利用WEB SERVER, PHP不支持多线程, APACHE可是支持的, 呵呵.
假设我们现在运行的是a.php这个文档. 但是我在程式中又请求WEB服务器运行另一个b.php
那么这两个文档将是同时执行的.
<?php
function runThread()
{
$fp = fsockopen('localhost', 80, $errno, $errmsg);
fputs($fp, "GET /a.php?act=brnrn");
fclose($fp);
}
function a()
{
$fp = fopen('result_a.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
function b()
{
$fp = fopen('result_b.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
if(!isset($_GET['act'])) $_GET['act'] = 'a';
if($_GET['act'] == 'a')
{
runThread();
a();
}
else if($_GET['act'] == 'b') b();
?>
当然啦,也可以把需要多线程处理的部分交给JAVA去处理, 然后在PHP里调用, 哈哈.
<?php
system('java multiThread.java');
?>
㈩ php 队列等待问题。高分悬赏
php 中是有Thread这个扩展类的 这个就是支持队列安装我不说了
<?php
classTextThreadextendsThread{
public$url;
public$data;
publicfunction__construct($url){
$this->url=$url;
}
publicfunctionrun(){
$this->data=curlGet($this->url);
}
}
//获取信息
functioncurlGet($url){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_TIMEOUT,5);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$data=curl_exec($ch);
curl_close($ch);
return$data;
}
//
functioncreateThread($urlArray){
$threadDataArray=array();
foreach($urlArrayas$key=>$val){
$threadArray[$key]=newTextThread($val);
$threadArray[$key]->run();
}
foreach($threadArrayas$key=>$thread){
while($thread->isRunning()){
usleep(100);
}
if($thread->join()){
$threadDataArray[$key]=$thread->data."====".$key."<br/>";
}
//var_mp($thread->join());
}
return$threadDataArray;
}
for($i=0;$i<=100;$i++){
$url='http://newyibo.com/Index/getThread';
$urlArray[]=$url;
}
$t=microtime(true);
$data=createThread($urlArray);
$e=microtime(true);
var_mp($data);
echo"多线程:".($e-$t)."<br/>";
这是我原来研究的的一个例子,仅供参考
貌似这个还有一个Event扩展类也有关系,这个没研究过