首頁  >  文章  >  後端開發  >  php cli模式學習-PHP命令列模式

php cli模式學習-PHP命令列模式

不言
不言原創
2018-04-08 15:30:2412249瀏覽

之前知道php—cli模式是一種類似shell命令式的執行php程序,不過一直以為這個是一種落後的方式,應該沒有什麼意義,因為從沒有遇到過使用這個cli模式編程的。不過今天遇到了使用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程式

之前本人總結關於《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 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 === &#39;cli&#39;)
{
   // ...
}
//方法2
if (php_sapi_name() === &#39;cli&#39;)
{
   // ...
}



PHP_ClI如何接收參數?
預設/usr/local/php/bin/php接收參數是$argv,這個變數是固定的!在php檔案中var_dump($argv);

得到下面結果:

php cli模式學習-PHP命令列模式

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

簡單程式碼:

複製程式碼 程式碼如下:

<?php 
function parseArgs($argv){ 
array_shift($argv); 
$out = array(); 
foreach ($argv as $arg){ 
if (substr($arg,0,2) == &#39;--&#39;){ 
$eqPos = strpos($arg,&#39;=&#39;); 
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) == &#39;-&#39;){ 
if (substr($arg,2,1) == &#39;=&#39;){ 
$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模式學習-PHP命令列模式

当然实现的方法不止一个,大家可以尝试其他方法实现!

例外关于php的cli还有很多参数可以加入:具体可以参考:http://php.net/manual/en/features.commandline.php

关于定时执行
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业,周期性作业,比如备份数据 打开/etc/crontab,添加:

复制代码 代码如下:

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



关于corntab的详细使用参考51cto专题:Linux计划任务——cron服务

本文参考资料
http://www.php.cn/php-weizijiaocheng-312213.html

http://www.php.cn/php-weizijiaocheng-307840.html

http://www.php.cn/php-weizijiaocheng-307856.html

附注:2012-06-16 增加php_cli编程需知等

相关推荐:

vue cli升级webapck4的使用方法

以上是php cli模式學習-PHP命令列模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn