Bash
CGI 程序重定向失敗
我正在嘗試將命令輸出的內容重定向到 CGI 程序中的文件。我的問題是沒有創建輸出文件。
CGI 程式碼片段如下:
#!/bin/bash echo "Content-type: text/html" echo "" echo "<html>" echo "<body>" `mysql -u root -predhat -H -D mysql -e "select host,db from db;" > output.txt` echo "</body>" echo "</html>"
從 HTML 程序呼叫 CGI 腳本。此外,我可以使用
INTO OUTFILE
命令mysql
,但我希望輸出重定向適用於任何命令。所有權如下:
#ls -l /var/www/cgi-bin/example.sh -rwxr-xr-x 1 root root 839 Apr 11 21:34 /var/www/cgi-bin/example.sh
# ps -ef | grep httpd root 2442 1 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2464 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2465 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2466 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2467 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2468 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd
我該如何解決這個問題?
首先是這個腳本設置,以便執行您的 Web 伺服器(我猜是 Apache)的使用者可以執行它?您可以通過查看腳本的權限來檢查:
$ ls -l somescript.cgi -rwxrwxr-x. 1 apache apache 1199 Jan 17 20:47 somescript.cgi
您將需要任何人都可以執行它的權限,或者如果腳本歸使用者所有,
apache
那麼至少只有所有者可以執行它。如果是這種情況,那麼我接下來將關注
mysql
命令輸出的位置。Apache 可能無法寫入mysql
嘗試寫入文件的位置output
。我會把它變成一個像這樣的實際物理位置:mysql -u root -predhat -H -D mysql -e "select host,db from db;" \ > /tmp/output.txt
反引號也是不必要的,因此您可以將它們取出。