最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php cli模式學習(PHP命令行模式)

 更新時間:2013年06月03日 16:23:28   作者:  
之前知道php—cli模式是一種類似shell命令式的執(zhí)行php程序,不過一直以為這個是一種落后的方式,應該沒有什么意義,因為從沒有遇到過使用這個cli模式編程的。不過今天遇到了使用cli模式的應用

php_cli模式簡介

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

PHP-cli應用場景:

1.多線程應用
這方面的好處,引用鳥哥的話:

優(yōu)點:
1. 使用多進程, 子進程結(jié)束以后, 內(nèi)核會負責回收資源
2. 使用多進程,子進程異常退出不會導致整個進程Thread退出. 父進程還有機會重建流程.
3. 一個常駐主進程, 只負責任務分發(fā), 邏輯更清楚.

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

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

2.定時執(zhí)行php程序

之前本人總結(jié)關(guān)于《PHP定時執(zhí)行計劃任務》的三種方式,利用有一張就是利用linux的cron方式,那么這個方式是如何定時執(zhí)行php程序?請看下文

3.開發(fā)桌面程序

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

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

PHP_CLI使用方法

win下面的執(zhí)行方法:
假設php.exe 在D:xamppphp在dos命令在可以這個執(zhí)行:

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


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

linux下php_cli使用
首先找到你安裝php的路徑,以我為例:



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

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


就可以執(zhí)行a。php文件

PHP_CLI編程需知
如何檢測環(huán)境支持php_cli模式?

復制代碼 代碼如下:

<?php
//方法1
if (PHP_SAPI === 'cli')
{
   // ...
}
//方法2
if (php_sapi_name() === 'cli')
{
   // ...
}


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

得到下面結(jié)果:



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

簡單代碼:
復制代碼 代碼如下:

<?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;


執(zhí)行結(jié)果:



當然實現(xiàn)的方法不止一個,大家可以嘗試其他方法實現(xiàn)!

例外關(guān)于php的cli還有很多參數(shù)可以加入:具體可以參考:http://php.net/manual/en/features.commandline.php

關(guān)于定時執(zhí)行
cron是一個linux下的定時執(zhí)行工具,可以在無需人工干預的情況下運行作業(yè),周期性作業(yè),比如備份數(shù)據(jù) 打開/etc/crontab,添加:

復制代碼 代碼如下:

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


關(guān)于corntab的詳細使用參考51cto專題:Linux計劃任務——cron服務

本文參考資料
http://m.fzitv.net/article/1716.htm 
http://m.fzitv.net/article/37804.htm 
http://m.fzitv.net/article/37796.htm

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

相關(guān)文章

最新評論

灵川县| 永寿县| 定襄县| 大港区| 介休市| 甘孜| 新昌县| 曲麻莱县| 济南市| 泉州市| 绥中县| 介休市| 凤山市| 石阡县| 曲水县| 博爱县| 霍州市| 小金县| 常山县| 福泉市| 中方县| 调兵山市| 和平县| 湛江市| 门源| 秭归县| 宁晋县| 桂林市| 乌兰察布市| 贵港市| 红桥区| 德庆县| 香河县| 涡阳县| 石渠县| 出国| 阿城市| 岳阳县| 勐海县| 丰台区| 淮南市|