Bash

CGI 程序重定向失敗

  • August 16, 2016

我正在嘗試將命令輸出的內容重定向到 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

反引號也是不必要的,因此您可以將它們取出。

引用自:https://unix.stackexchange.com/questions/124237