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擴展類也有關系,這個沒研究過