我正在用PHP的CGI包裝進行時間問題。我對CGI和PHP知之甚少。用於PHP的CGI包裝的問題
這就是我知道的系統:
- 的Solaris 10在386
- 了Suhosin
- PHP運行正常爲CGI,使用的cgiwrap(http://cgiwrap.sourceforge.net/)。我無法在服務器上找到一個示例wrapper.cgi來查看。
- 共享主機(虛擬主機),所以我沒有訪問Apache配置。但管理員沒有幫助。切換主機不是一個選項。
- 選項指令不能在.htaccess中覆蓋(例如ExecCGI)。
htaccess的:
AddHandler php-handler .php
Action php-handler "/bin/test.cgi"
〜/的public_html/bin中/ test.cgi:
#!/usr/bin/sh
# Without these 2 lines, I get an Internal Server Error
echo "Content-type: text/html"
echo ""
exec "/path/to/php-cgi" 'foo.php';
/bin/foo.php:
<?php
echo "this is foo.php!";
輸出的http://mysite.com/bin/test.cgi :
X-Powered-By: PHP/5.2.11 Content-type: text/html echo "Content-type: text/html" echo "" exec "/path/to//php-cgi" 'foo.php';
輸出爲http:/ /mysite.com/anypage.php:
X-Powered-By: PHP/5.2.11 Content-type: text/html echo "Content-type: text/html" echo "" exec "/path/to//php-cgi" 'foo.php';
我注意的事情是:
- PHP被執行,如由
X-Powered-By ...
頭指出。 - 在結果中輸出源的
/bin/test.cgi
。 - 無論我把它作爲
exec
的第二個參數,它都不會傳遞給php二進制文件。我試過'-i'
獲得的phpinfo,'-v'
得到的版本... - 當我通過外殼執行
test.cgi
,我得到預期的結果(參數傳遞到PHP,並將其反映在輸出)。
有關如何使這項工作的任何想法?
UPDATE
- 看來,源
test.cgi
的是出現的原因是由於錯誤。任何時候發生致命錯誤,無論是在CGI本身還是在執行命令exec
時,都會導致cgi的出現。 - 在
test.cgi
之內,我可以通過exec "/path/to/php-cgi" -h
獲得正確的輸出結果(我從CLI獲得的結果與我的結果相同)。
我來試試。該包裝方法是一個我見過很多,所以它是唯一一個我熟悉的(雖然包裝通常命名爲比「test.cgi」以外的東西)。 – kentr
當我這樣做,我在日誌中得到一個錯誤:「文件不存在:/full/path/to/public_html/bin/php-cgi/bin/foo.php」。 它固定該腳本的路徑上定義爲處理程序的路徑,並嘗試使用新的值作爲處理程序。(請注意,我在一個子目錄中進行此操作以保留實際的網站。) – kentr
我的意思是直接將php-cgi文件複製到您的cgi可執行文件中。 test.cgi所在的地方。 – blockhead