pcntlphp
(1)下載後得到php-5.1.2-Win32.zip,解壓至C:\php(這個路徑可以隨意,不過下面要是用到這個路徑,請相應修改);(2)再將C:\php\libmysql.dll和C:\Inetpub\php\ext\php_mysql.dll復制到C:\Windows\system32下;(3)將C:\PHP\php.ini-dist復制到C:\Windows(Windows2000下為C:\WINNT)並將改名為php.ini,然後用記事本打開,利用記事本的查找功能搜索:extension_dir="C:\PHP\ext"將其路徑指到你的PHP目錄下的extensions目錄,比如:extension_dir="C:\Inetpub\php\ext";搜索;WindowsExtensions並僅打開需要的模塊以節省內存(去掉每個模塊前的;號即可):extension=php_gd2.dllGD庫支持,如果不打開該模塊則Discuz!論壇圖片水印不能使用。extension=php_mbstring.dll為了支持phpMyAdmin,打開mbstring。extension=php_mysql.dll不用說了吧,支持MySQL。首先必須確定系統中已經正確安裝IIS,如果沒有安裝,需要先安裝IIS。PHP與IIS整合時支持CGI和ISAPI兩種模式,推薦使用ISAPI模式。這里只解介紹ISAPI模式安裝方法:ISAPI模式安裝步驟:在「控制面板」的「管理工具」中選擇「Internet服務管理器」,打開IIS後停止服務,然後在左側「你需要支持PHP的Web站點上單擊右鍵選擇「屬性」,在打開的「Web站點屬性」窗口的「ISAPI篩選器」標簽里找到並點擊「添加」按鈕,在彈出的「篩選器屬性」窗口中的「篩選器名稱」欄中輸入:PHP,再將可執行文件指向php5isapi.dll所在路徑,如:C:\PHP\php5isapi.dll。打開「Web站點屬性」窗口的「主目錄」標簽,找到並點擊「配置」按鈕,在彈出的「應用程序配置」窗口中找到並點擊「添加」按鈕,在彈出的窗口中新增一個擴展名映射,擴展名為.php,單擊「瀏覽」將可執行文件指向php5isapi.dll所在路徑,如:C:\PHP\php5isapi.dll,然後一路確定即可。確定Web目錄的應用程序設置和執行許可中選擇為純腳本,然後關閉Internet信息服務管理器,在命令提示符中執行如下命令:然後在「Internet服務管理器」左邊的「WEB服務擴展」中設置ISAPI擴展允許,ActiveServerPages允許
B. php中pcntl_fork是什麼意思,pcntl_fork創建子進程如何進行的
一、php中pcntl_fork函數概述
pcntl_fork()函數是php中用於創建子進程的一個函數,返回創建的子進程的pid。
該函數創建子進程具體fork的過程:
(1)調用該函數即創建一個子進程,創建成功父進程返回子進程的pid,子進程返回0;
(2)創建子進程實際上對父進程的一個拷貝,共享代碼空間,拷貝父進程的數據,也就是說父進程改變父進程的數據,子進程改變子進程
二、示例代碼分析
1.代碼示例:
<?php
$curr_pid=posix_getpid();//獲取當前的進程id
//將當前進程的id寫入文件中
echo'當前進程:'.$curr_pid.PHP_EOL;
//開始創建子進程
$son_pid=pcntl_fork();//返回子進程的id
//查看當前進程
echo'創建子進程之後當前的進程為:'.posix_getpid().PHP_EOL;
//創建了子進程之後
if($son_pid>0){
echo'子進程id:'.$son_pid.PHP_EOL;
}
2.以上代碼執行後結果為:
3.示例代碼分析:
(1)發現創建了子進程之後,系統會切換到子進程中,而子進程中的代碼是從含有pcntl_fork函數的那行執行的
(2)創建子進程之後,子進程的代碼段是拷貝pcntl_fork函數及之後的代碼段,之前的代碼段並不拷貝,但是具體的數據變數子進程仍然會拷貝
(3)可見,fork之後程序會分叉執行,即子進程執行
三、pcntl_fork的業務場景舉例
1.php的多進程中,常用pcntl_fork來實現並發,多用於一些簡單工具的實現。
2.例如監控工具,想要監控幾個不同指標的情形,可以使用主進程監控各指標的配置變化,然後對每個指標分別fork一個子進程來監控其具體的情形,當主進程發現指標的配置改變則kill掉之前的子進程重新創建子進程進行監控。
3.主進程進行業務分發操作,子進程進行具體的業務邏輯執行。(BY三人行慕課)
C. 請教PHP的非同步處理,pcntl
client:
<?php
$client=newGearmanClient();
$client->addServer('127.0.0.1', 4730);//本機可以直接addServer(),默認伺服器端使用4730埠
$client->setCompleteCallback('completeCallBack');//先綁定才有效
$result1=$client->do('say','do');//do是同步進行,進行處理並返回處理結果。
$result2=$client->doBackground('say','doBackground');//非同步進行,只返回處理句柄。
$result3=$client->addTask('say','addTask');//添加任務到隊列,同步進行?通過添加task可以設置回調函數。
$result4=$client->addTaskBackground('say','addTaskBackground');//添加後台任務到隊列,非同步進行?
$client->runTasks();//運行隊列中的任務,只是do系列不需要runTask()。
echo'result1:';
var_mp($result1);
echo'<br/>';
echo'result2:';
var_mp($result2);
echo'<br/>';
echo'result3:';
var_mp($result3);
echo'<br/>';
echo'result4:';
var_mp($result4);
echo'<br/>';
//綁定回調函數,只對addTask有效
functioncompleteCallBack($task)
{
echo'CompleteCallback!handle result:'.$task->data().'<br/>';
}
worker:
<?php
$worker=newGearmanWorker();
$worker->addServer();
$worker->addFunction('say',function(GearmanJob$job){
$workload=$job->workload();//接收client傳遞的數據
echo'receive data:'.$workload.PHP_EOL;
returnstrrev($workload);//僅作反轉處理
});
//無際循環運行,gearman內部已有處理,不會出現佔用過高死掉的情況
while($worker->work()){
if($worker->returnCode() !== GEARMAN_SUCCESS){
echo'error'.PHP_EOL;
}
}
以上client輸出:
CompleteCallback!handle result:ksaTdda
result1:string(2) 「od」
result2:string(17) 「H:iZ943bixttyZ:87″
result3:object(GearmanTask)#2 (0) { }
result4:object(GearmanTask)#3 (0) { }
worker輸出:
receive data:do
receive data:doBackground
receive data:addTaskBackground
receive data:addTask
D. php pcntl 僵屍進程怎麼產生的
一個進程在調用exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下一個稱為僵屍進程(Zombie)的數據結構(系統調用exit,它的作用是使進程退出,但也僅僅限於將一個正常的進程變成一個僵屍進程,並不能將其完全銷毀)。
E. 怎麼在linux運行php文件
1、打開我們的linux命令行,准備好。
2、找到php的安裝目錄,主要是找到linux環境下,php可執行文件的目錄。如圖所示。筆者的目錄為/opt/lampp/bin/php,將此目錄記下,備用。
3、找到要運行的php文件所在的目錄,隨便寫點php代碼就可以,在此筆者已經准備好。/opt/lampp/htdocs/wechat/xjtest-web_browser/pcntl_test.php,將此目錄記下,接下來就要正式開始運行了。
4、打開剛剛第一步打開的linux命令行,輸入/opt/lampp/bin/php /opt/lampp/htdocs/wechat/xjtest-web_browser/pcntl_test.php(即依次輸入剛剛的兩個目錄)注意兩個目錄中間有空格。
5、按下回車,可以看到,php文件已經正確執行了。
F. 怎麼安裝PHP的pcntl擴展模塊
1、進入php源碼包里擴展目錄
[root@nginx ~]# cd ./php-5.6.7/ext/pcntl/
2、用phpize生成配置文件
[root@nginx pcntl]# phpize
[root@nginx pcntl]# ./configure
3、make && make install安裝
[root@nginx no-debug-non-zts-20131226]# ls
bcmath.so gd.so opcache.a pcntl.so
calendar.so mcrypt.so opcache.so pdo_mysql.so
curl.so memcache.so openssl.so posix.so
4、php.ini配置載入pcntl.so擴展
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/pcntl.so
G. 怎麼在linux的CLI下運行php文件
准備:已安裝PHP運行環境的Linux系統。
步驟:
打開Linux命令行,輸入whereis php找到PHP文件所在目錄(我的在/usr/bin/php);
回車,這時可以看到PHP文件成功執行了。
H. php的關於pcntl_fork()函數的問題!
這是個多線程方法,在windows下不可用,在LINUX下需要編譯.
I. 求助,Windows PHP PCNTL擴展有替代方法嗎
這個windows沒有替代方案, 你可以使用虛擬機做一個linux系統