2011-06-08 94 views
14

我想用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調用失敗。

我該怎麼做?

回答

25

您的通話,因爲你使用的是網絡式的失敗語法(?parameter=value)與命令行調用。我明白你在想什麼,但它根本行不通。

你會想用來代替。請參閱the PHP manual

要看到這個動作,這個只有一行寫入文件:

<?php print_r($argv); ?> 

然後在命令行帶參數調用它:

php -f /path/to/the/file.php firstparam secondparam 

你會看到,包含腳本本身的名稱作爲元素零,後面跟隨其他任何參數。

+3

什麼是對-f PARAM? – Hailwood 2011-06-08 03:42:08

+4

這真是一個深刻的問題。如果你從命令行執行php --help,它會這樣寫: 「-f 解析並執行」。 但是,由於無論如何PHP(無需調用-f選項),我想這是一個很好的問題:它是幹什麼用的? :) – 2011-06-08 03:45:22

+3

也許它的強迫症患者誰必須通過一個標誌;) – Hailwood 2011-06-08 06:52:55

2

嘗試echo exec("php /var/www/unity/src/emailer.php 123");在您的腳本中,然後閱讀commandline parameters

+0

,包括線 – 2013-02-21 01:58:15

1

如果你想一個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);。)

1

此適配腳本顯示了將參數傳遞給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在調用的腳本

相關問題