本文目錄一覽:
- 1、如何讓php執行shell
- 2、如何通過php頁面執行shell腳本?
- 3、如何將PHP作為Shell腳本語言使用
- 4、php如何執行shell腳本
- 5、ubuntu12.04 怎麼用php調用shell
- 6、PHP下利用shell後台運行PHP腳本,並獲取該腳本的Process ID的代碼
如何讓php執行shell
php給我們提供了system(),exec(),passthru()這三個函數來調用外部的命令.
雖然這三個命令都能執行linux系統的shell命令,但是其實他們是有區別的:
system() 輸出並返回最後一行shell結果。
exec() 不輸出結果,返回最後一行shell結果,所有結果可以保存到一個返回的數組裡面。
passthru() 只調用命令,把命令的運行結果原樣地直接輸出到標準輸出設備上。
相同點:都可以獲得命令執行的狀態碼
例子:system(“/usr/local/bin/webalizer/webalizer”);
如何通過php頁面執行shell腳本?
如果php允許那麼大的權限,可以用 exec 函數, 不過這樣做很危險。
換個思考方式, 可以php向某個文件寫入一個指定數據, shell腳本定時監測這個文件,然後判斷內容,再執行指定腳本
如何將PHP作為Shell腳本語言使用
我們都知道,PHP是一種非常好的動態網頁開發語言(速度飛快,開發周期短……)。但是只有很少數的人意識到PHP也可以很好的作為編寫Shell腳本的語言,當PHP作為編寫Shell腳本的語言時,他並沒有Perl或者Bash那麼強大,但是他卻有着很好的優勢,特別是對於我這種熟悉PHP但是不怎麼熟悉Perl的人。
要使用PHP作為Shell腳本語言,你必須將PHP作為二進制的CGI編譯,而不是Apache模式;編譯成為二進制CGI模式運行的PHP有一些安全性的問題,關於解決的方法可以參見PHP手冊()。
一開始你可能會對於編寫Shell腳本感到不適應,但是會慢慢好起來的:將PHP作為一般的動態網頁編寫語言和作為Shell腳本語言的唯一不同就在於一個Shell腳本需要在第一行生命解釋本腳本的程序路徑:
#!/usr/local/bin/php -q
我們在PHP執行文件後面加入了參數“-1”,這樣子PHP就不會輸出HTTP Header(如果仍需要作為Web的動態網頁,那麼你需要自己使用header函數輸出HTTP Header)。當然,在Shell腳本的裡面你還是需要使用PHP的開始和結束標記:
現在讓我們看一個例子,以便於更好的了解用PHP作為Shell腳本語言的使用:
#!/usr/local/bin/php -q
print(“Hello, world!\n”);
?
上面這個程序會簡單的輸出“Hello, world!”到顯示器上。
一、傳遞Shell腳本運行參數給PHP:
作為一個Shell腳本,經常會在運行程序時候加入一些參數,PHP作為Shell腳本時有一個內嵌的數組“$argv”,使用“$argv”數組可以很方便的讀取Shell腳本運行時候的參數(“$argv[1]”對應的是第一個參數,“$argv[2]”對應的是第二個參數,依此類推)。比如下面這個程序:
#!/usr/local/bin/php -q
$first_name = $argv[1];
$last_name = $argv[2];
printf(“Hello, %s %s! How are you today?\n”, $first_name, $last_name);
? 具體詳細的你可以向我一樣在後盾人多看看就明白了,希望能幫到你,努力(๑๑)
php如何執行shell腳本
這些shell命令一般服務商是不允許運行的,要不然服務器很快就讓攻擊掉了
ubuntu12.04 怎麼用php調用shell
第一,應該查閱php.ini配置文檔(我的配置文檔位置是/etc/php5/php.ini),關閉安全模式 safe_mode=Off。
第二,給予php運行的用戶和本機用戶權限。php運行的用戶名可以通過在localhost運行以下的php文件查到:
?php
echo shell_exec(“id -a”);
?123123
我的Ubuntu系統的php運行用戶名是www-data(好蠢的名字…)
控制台下,執行 visudo,可以打開/etc/sudoers文件進行修改(利用visudo命令的意義在於,sudoers文件很重要,如果修改錯了,visudo會提示你,而直接修改會導致系統出錯,無法使用sudo…)
修改的地方在root的下一行:
‘查到的php運行的用戶名’ ALL=(ALL) NOPASSWD:ALL
‘本機用戶名’ ALL=(ALL) ALL
通過以上設置,應該就能完成ubuntu系統下php調用並執行shell腳本。
PS.相關的命令(詳細請百度google之)
$output = shell_exec(“xxx.sh”);//只有失敗的時候返回NULL
system(“cmd string”,$status);//$ststus在調用成功時返回true,失敗返回false
PHP下利用shell後台運行PHP腳本,並獲取該腳本的Process ID的代碼
複製代碼
代碼如下:
$command
=
‘/usr/bin/php
/pub/www/u111/job/Crondo/auto_collector.php
‘;
$process
=
proc_open($command,
array(),$pipes);
$var
=
proc_get_status($process);
proc_close($process);
//pid就是進程ID,至於為什麼要加1,我現在也沒有搞懂,經過多次的測試,發現$var[‘pid’]得到的ID比實際的少1
$pid
=
intval($var[‘pid’])+1;
//殺死進程
proc_close(proc_open(‘kill
-9
‘.$pid,
array(),
$pipes));
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/243352.html