我想用exec調用一個php文件。在一個PHP文件上調用exec並傳遞參數?
當我打電話時,我想能夠通過(一個id)傳遞一個變量。
我可以打電話echo exec("php /var/www/unity/src/emailer.php");
很好,但是現在我添加了像echo exec("php /var/www/unity/src/emailer.php?id=123");
這樣的exec調用失敗。
我該怎麼做?
我想用exec調用一個php文件。在一個PHP文件上調用exec並傳遞參數?
當我打電話時,我想能夠通過(一個id)傳遞一個變量。
我可以打電話echo exec("php /var/www/unity/src/emailer.php");
很好,但是現在我添加了像echo exec("php /var/www/unity/src/emailer.php?id=123");
這樣的exec調用失敗。
我該怎麼做?
您的通話,因爲你使用的是網絡式的失敗語法(?parameter=value
)與命令行調用。我明白你在想什麼,但它根本行不通。
你會想用來代替。請參閱the PHP manual。
要看到這個動作,這個只有一行寫入文件:
<?php print_r($argv); ?>
然後在命令行帶參數調用它:
php -f /path/to/the/file.php firstparam secondparam
你會看到,包含腳本本身的名稱作爲元素零,後面跟隨其他任何參數。
嘗試echo exec("php /var/www/unity/src/emailer.php 123");
在您的腳本中,然後閱讀commandline parameters。
,包括線 – 2013-02-21 01:58:15
如果你想一個GET參數傳遞給它,那麼它必須爲調用提供的php-cgi的二進制:
exec("QUERY_STRING=id=123 php-cgi /var/www/emailer.php");
但是這可能需要更多的假CGI環境變量。因此,通常建議重寫被調用的腳本,並讓其採用正常的命令行參數,並通過$_SERVER["argv"]
來讀取它們。
(您同樣可以只是假冒的php-cgi的行爲與一個正常的PHP解釋器和上面的例子在您的腳本的頂部添加parse_str($_SERVER["QUERY_STRING"], $_GET);
。)
此適配腳本顯示了將參數傳遞給php scr的兩種方式IPT從PHP exec命令: 調用腳本
<?php
$fileName = '/var/www/ztest/helloworld.php 12';
$options = 'target=13';
exec ("/usr/bin/php -f {$fileName} {$options} > /var/www/ztest/log01.txt 2>&1 &");
echo "ended the calling script";
?>
調用的腳本
<?php
echo "argv params: ";
print_r($argv);
if ($argv[1]) {echo "got the size right, wilbur! argv element 1: ".$argv[1];}
?>
不要忘記,以驗證執行權限和創建具有寫入權限的log01.txt文件(Apache的用戶通常會WWW的數據)。
結果
的argv PARAMS:數組
(
[0] => /var/www/ztest/helloworld.php
[1] => 12
[2] => target=13
)
得到了大小合適的,wilburargv元素1:12
選擇你喜歡的任何解決方案傳遞參數,所有你需要做的就是訪問argv arr ay並按照它們傳遞的順序檢索它們(文件名是0元素)。
TKS @hakre在調用的腳本
什麼是對-f PARAM? – Hailwood 2011-06-08 03:42:08
這真是一個深刻的問題。如果你從命令行執行php --help,它會這樣寫: 「-f解析並執行」。 但是,由於無論如何PHP(無需調用-f選項),我想這是一個很好的問題:它是幹什麼用的? :) –
2011-06-08 03:45:22
也許它的強迫症患者誰必須通過一個標誌;) – Hailwood 2011-06-08 06:52:55