0
我想從php腳本內執行bash腳本。從php執行bash腳本
PHP腳本是:
<?php
$clientName = $_POST['clientName'];
$startDate = $_POST['startDate'];
$endDate = $_POST['endDate'];
$mode = $_POST['mode'];
echo("Current working directory = " . getcwd());
echo("Client Name = " . $clientName . "<br/>\n");
echo("Start date = " . $startDate . "<br/>\n");
echo("End date = " . $endDate . "<br/>\n");
echo("Mode = " . $mode . "<br/>\n");
$cmd = "/webroot/argRepeater.bash escapeshellarg($clientName) escapeshellarg($startDate) escapeshellarg($endDate) escapeshellarg($mode)";
echo("Command = " . $cmd . "<br/>\n");
var_dump($cmd);
exec("/bin/bash ./argRepeater.bash escapeshellarg($clientName) escapeshellarg($startDate) escapeshellarg($endDate) escapeshellarg($mode)", $output, $output2);
echo("Output array = " . print_r($output) . "<br/>\n");
echo("Output = " . $output2 . "<br/>\n");
?>
上面PHP腳本從HTML表單接受參數。 bash腳本argRepeater.bash
只重複提供給它的任何參數。輸出如下:
Current working directory = /home/content/31/10199331/htmlClient Name = yum
Start date = 2013-05-14
End date = 2013-05-24
Mode = fir
Command = ./argRepeater.bash escapeshellarg(yum) escapeshellarg(2013-05-14) escapeshellarg(2013-05-24) escapeshellarg(fir)
string(128) "./argRepeater.bash escapeshellarg(yum) escapeshellarg(2013-05-14) escapeshellarg(2013-05-24) escapeshellarg(fir)" Array () Output array = 1
Output = 1
我的問題:
1.什麼更多的事情要做,以確保argRepeater被執行?
2.如何在網頁上顯示argRepeater的輸出?
糾正我,如果我錯了,但'output2'將包含命令的退出狀態。因爲bash在不成功完成時返回非零值,所以我認爲bash腳本沒有正確執行。我對嗎? – Sriram 2013-05-04 20:04:25
這取決於bash腳本。每個bash腳本都可以使用它自己的返回代碼,並且1本身不能表示失敗。這意味着你可能是對的,是的。然而它也可以表明某件事情有效(我也沒有說你不應該進一步麻煩 - 拍這個)。 http://tldp.org/LDP/abs/html/exit-status.html – hakre 2013-05-04 20:05:37
我的PHP編寫了一些很好的shell命令故障排除指南,我會把它們挖出來,如果我看到它們可能會有所幫助那是正確的。 *編輯:*請參閱[我的答案](http://stackoverflow.com/a/14021630/367456)[*「php shell exec與直接運行命令不同」*](http://stackoverflow.com/ q/14021352/367456)以獲得有效的調試技術。 – hakre 2013-05-04 20:09:30