web-dev-qa-db-ja.com

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>" 

CGIスクリプトはHTMLプログラムから呼び出されています。また、INTO OUTFILEmysqlコマンドで使用することもできますが、どのコマンドでも出力リダイレクトが機能するようにしたいと思います。

所有権は次のとおりです。

  #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

どうすれば問題を解決できますか?

2
Zama Ques

まず、このスクリプトの設定は、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

また、バックティックは不要なので、取り出すことができます。

1
slm