2011-04-26 40 views
2

我想PHP變量發送到功能,但沒有下面的是路過的變量發送變量。如何使用EXEC()PHP

$vars='email=' . $_POST['email'] . '&password=' . $_POST['password'] . '&server=' . $_POST['server']; 
$function = 'nohup php unsubscribefunction.php ' . escapeshellarg($vars); 
exec($function); 
exec('nohup php unsubscribefunction.php ' . $vars); 
exec('nohup php unsubscribefunction.php $vars '); 


$vars='?email=' . $_POST['email'] . '&password=' . $_POST['password'] . '&server=' . $_POST['server']; 
$function = 'nohup php unsubscribefunction.php' . $vars; 
exec($function); 

這裏是the php.net page說,關於這個

當允許用戶提供的數據是 傳遞給這個函數,使用 escapeshellarg()或escapeshellcmd()將 ,以確保用戶不能誘騙 系統執行任意的 命令。

但是,沒有關於如何傳遞變量的例子,任何見解或例子將不勝感激。

+0

是否有一個原因,你必須調用另一個PHP腳本,你已經在使用PHP腳本的背景? – ashurexm 2011-04-26 22:29:20

+0

是的,長話短說,我正在爲沒有啓用JavaScript的我的用戶的50%+構建此項目。我需要爲沒有啓用JavaScript的用戶進行頁面刷新。因此,如果沒有JavaScript,我需要使用exec在後臺調用該函數,然後刷新到告訴用戶搜索已成功開始的頁面。 (我愛javascript ...) – 2011-04-26 22:30:47

回答

2

試圖通過一些幫助here閱讀。基本上,您需要確保通過$argc/getopt()或其他方式使用命令行變量。

調用具有標誌劇本,像這樣:php myscript.php -a foo -b bar -c baz 測試打印參數:

<?php 
      $arguments = getopt("a:b:c:"); 
      print_r($arguments); 
    ?> 
Array 
(
    [a] => foo 
    [b] => bar 
    [c] => baz 
) 
+0

謝謝 - 我能夠得到這個工作 - 唯一的問題是,它不會在後臺執行,當我在命令前使用「nohup php」時 - 任何我需要改變的見解,以便在後臺運行允許下一頁加載? – 2011-04-27 00:17:35

+0

$ vars = escapeshellcmd($ _ POST ['email'])。 「」。 escapeshellcmd($ _ POST ['password'])。 「」。 escapeshellcmd($ _ POST [ '服務器']); exec(「nohup php unsubscribefunction.php」。$ vars); header('Location:http://location.php'); – 2011-04-27 00:19:42

+0

試一下這些代碼:'exec(sprintf(「%s>%s 2>&1&echo $!>>%s」,$ cmd,$ outputfile,$ pidfile));'其中$ cmd是你的命令AND參數作爲一個變量,$ outputfile是一個文件來存儲你的第二個腳本的輸出,$ pidfile是一個文件來存儲你正在踢的腳本的進程ID。這當然,假設你在一臺基於Linux/Unix的機器上。 – ashurexm 2011-04-28 21:13:36

1

這不是你所遇到的問題。你不能以這種方式發送變量;您需要使用command line arguments來捕獲要放入變量的值。

+0

這種情況下的電話會是什麼?以及如何使用nohup在後臺運行它? – 2011-04-26 22:32:29

+0

與在shell提示符下完成的方式相同。 – 2011-04-26 22:33:23