2011-07-27 26 views
0

當調用一個PHP文件,它包含的功能正在失去ARGS:php system();當通過CGI運行,但不會從CLI

<?php system('/bin/sh /usr/local/bin/myScript.sh '.'myArg'); ?> 

從CLI通過php myScript.php一切都正常運行,但通過CGI這樣做的時候,在瀏覽器中打開的網址( apache在後臺)myArg字符串丟失。 有誰知道什麼可能會失敗?

PD:myScript.sh只是一個

echo "$# $*" >> /tmp/foo.txt 

所以尾部/tmp/foo.txt顯示一切正常,從CLI罰款從Apache的CGI。我需要在php.ini中進行任何額外的配置嗎?我需要什麼特別的在我的apache別名文件?它是不祥的嗎?

回答

1

如果您的代碼與上面列出的一樣,'myArg'不會丟失。但是,如果動態填充參數,則需要確保以適合調用方法的方式收集參數。

當您通過瀏覽器執行腳本時,可以通過$_REQUEST$_GET$_POST收集參數。當您通過CLI執行腳本時,參數將在中找到。

如果您已驗證您獲得了參數的正確值,那麼下一步就是檢查權限。確保CLI用戶有權執行指定參數的命令。

+0

Thx爲答案,現在myArg只是一個字符串,所以它應該適用於cli和cgi,不是嗎? – user846226

+0

@ user846226:請看我更新的答案。 –

+0

Thx很多答案,但正如我在主要帖子中所述,myScript.php和myScript.sh都可以毫無問題地執行。 myArgv是一個php'字符串',但我已經知道如何從cli/cgi獲取參數。這不是一個編碼問題,我可能是與任何類型的PHP CGI配置或與OS內部相關的東西相關的東西。只是爲了說明php myScript.php在通過uri運行時做的很好,但沒有任何參數。 – user846226

1

確保運行Apache的用戶在/etc/passwd中有一個shell。默認用戶是nobody

+0

嗨,謝謝你的答案。運行apache的用戶是www-data。 myScript.php由ubuntu用戶擁有cat/etc/passwd | grep -i www www-data:x:33:33:www-data:/ var/www:/ bin/sh – user846226

+0

@ user846226也許你的cgi文件wasn沒有執行。檢查文件的文件權限。 (無論如何,它可能導致403錯誤...) – Zaffy

+0

嗨,你在談論哪個CGI文件? :) – user846226

相關問題