- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでUNIXコマンドを発行してファイルへ追記できない)
PHPでUNIXコマンドを発行してファイルへ追記できない
このQ&Aのポイント
- PHPでUNIXコマンドを使用してファイルへの追記ができない問題についての質問です。
- 現在、/etc/aliasesファイルへの文字列追加がうまくいかず、解決方法を求めています。
- コマンドの実行が失敗しており、追記されない原因についてのアドバイスをいただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> echo 'apache-password' | sudo -S echo 'user-name: | /var/www/html/test.php' >> /etc/aliases このコマンド実行だと、sudo の引数は「echo 'user-name: | /var/www/html/test.php'」までで、「>> /etc/aliases」 は、sudo コマンドではなく、それを呼び出しているシェルが解釈して処理することになります。 そのため、ファイル追記そのものはapache権限で実行しようとして、それで失敗します。 最初のecho自体が意味ありませので、実行すべきコマンドは、 > sudo -S /bin/sh -c "echo 'user-name: | /var/www/html/test.php' | >> /etc/aliases" といった感じになるかと。試してませんが、元のPHPコードなら、 > $command = "sudo -S sh -c \"echo '{$_POST['user_name']}: | /var/www/html/test.php' >> /etc/aliases\""; といったところでしょうか。
お礼
ありがとうございました! 無事,aliasesファイルへ追記できました. ただ,少し補足なのですが,apacheユーザでsudoコマンドを実行するためにはセキュリティ上,パスワードを毎回入力する必要があるように設定しています. ですので,はじめのechoでsudoコマンドにapacheユーザのパスワードを渡しているのです. はじめのechoを削ると,パスワードが違うというエラーが返ります. ですので,今回回答者様に頂いたコマンドに,前のechoを足しまして, $command = "echo '".___APACHEPASS___."' | sudo -S sh -c \"echo '{$_POST['user-name']}: | /var/www/html/test.php' >> /etc/aliases\""; で無事追加できました. 本当に,ありがとうございました!