當前位置:編程學習大全網 - 源碼下載 - Php cli是守護進程的嗎

Php cli是守護進程的嗎

php_cli模式簡介

php-cli是php Command Line Interface的簡稱,如同它名字的意思,就是php在命令行運行的接口,區別於在Web服務器上運行的php環境(php-cgi, isapi等) 也就是說,php不單可以寫前臺網頁,它還可以用來寫後臺的程序。 PHP的CLI shell腳本適用於所有的PHP優勢,使創建要麽支持腳本或系統甚至與GUI應用程序的服務端!——註:windows和linux下都支持php_cli模式

PHP-cli應用場景:

1.多線程應用

這方面的好處,引用鳥哥的話:

優點:

1. 使用多進程, 子進程結束以後, 內核會負責回收資源

2. 使用多進程,子進程異常退出不會導致整個進程Thread退出. 父進程還有機會重建流程.

3. 壹個常駐主進程, 只負責任務分發, 邏輯更清楚.

php的多線程—沒錯就是php多線程應用,雖然大家都普遍認為php沒有多線程(curl屬於模擬多線程而不是真實的),但是在php_cli模式下的php徹底的是屬於多線程。這個時候php屬於linux的壹個守護進程。 在本人之前寫過的《PHP多線程批量采集下載美女圖片(續)》的時候在采集程序裏雖然使用curl來模擬多線程,但是在瀏覽器執行的時候也是會遇到執行超時或內存abort而導致程序中斷,(要嘗試幾次才可以徹底成功),但是如果在php-cli模式下執行,妳就會發現這個程序執行的很快,php多線程執行的優勢被徹底表現出來了.

備註:這種多線程方式不是很成熟,不適合大規模的生成應用,偶爾使用還是可以的

2.定時執行php程序

利用linux的cron方式,那麽這個方式是如何定時執行php程序?請看下文

3.開發桌面程序

妳可以做您的Windows或Linux中使用PHP的圖形用戶界面(GUI)應用!所有妳需要的是PHP的命令行接口和壹包GTK。這將允許建立真正的便攜式圖形用戶界面應用程序(呵呵,之前只是知道php可以做桌面程序,現在才知道是使用php_cli模式),並且不需要學習別的。

4.編寫PHP的shell腳本

如果妳不會bash shell或者Perl等的使用,但是妳又需要壹些腳本去執行的時候,怎麽辦?這個時候妳完全可以使用妳熟悉的php編寫shell腳本,這個時候妳是不是突然感覺PHP是不是太強大了!—–真正做到壹種語言,到處開發!

PHP_CLI使用方法

win下面的執行方法:

假設php.exe 在D:xamppphp在dos命令在可以這個執行:

復制代碼 代碼如下:D:\xamppphpphp.exe D:\xampphtdocstest.php

就可以執行test.php這個文件了 。這裏推薦win平臺下xampp集成環境,真正比wamp強大N倍,這個集成包可以直接進入dos模式。

linux下php_cli使用

首先找到妳安裝php的路徑,以我為例:

php安裝在路徑/usr/local/php/bin/php下

復制代碼 代碼如下:/usr/local/php/bin/php /usr/local/apache/htdocs/a.php ?

就可以執行a。php文件

PHP_CLI編程需知

如何檢測環境支持php_cli模式?

復制代碼 代碼如下:

<?php

//方法1

if (PHP_SAPI === 'cli')

{

// ...

}

//方法2

if (php_sapi_name() === 'cli')

{

// ...

}

PHP_ClI如何接收參數?

默認情況下/usr/local/php/bin/php接收參數是$argv,這個變量是固定的!在php文件中var_dump($argv);

得到下面結果:

可以寫個簡單的處理函數把這個方式轉化為大家常用的GET/post的參數模式。

簡單代碼:

復制代碼 代碼如下:

<?php

function parseArgs($argv){

array_shift($argv);

$out = array();

foreach ($argv as $arg){

if (substr($arg,0,2) == '--'){

$eqPos = strpos($arg,'=');

if ($eqPos === false){

$key = substr($arg,2);

$out[$key] = isset($out[$key]) ? $out[$key] : true;

} else {

$key = substr($arg,2,$eqPos-2);

$out[$key] = substr($arg,$eqPos+1);

}

} else if (substr($arg,0,1) == '-'){

if (substr($arg,2,1) == '='){

$key = substr($arg,1,1);

$out[$key] = substr($arg,3);

} else {

$chars = str_split(substr($arg,1));

foreach ($chars as $char){

$key = $char;

$out[$key] = isset($out[$key]) ? $out[$key] : true;

}

}

} else {

$out[] = $arg;

}

}

return $out;

}

var_dump($argv);

var_dump(parseArgs($argv));exit;?

執行結果:

當然實現的方法不止壹個,大家可以嘗試其他方法實現!

例外關於php的cli還有很多參數可以加入:具體可以參考:mandline.php

關於定時執行

cron是壹個linux下的定時執行工具,可以在無需人工幹預的情況下運行作業,周期性作業,比如備份數據 打開/etc/crontab,添加:

復制代碼 代碼如下:

/usr/bin/php -f /data/htdocs/test.php

  • 上一篇:用.bat關閉瑞星。該怎麽編寫呢?
  • 下一篇:怎麽使用Dojo
  • copyright 2024編程學習大全網