• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPのSystem関数でcdしてもうまくできない)

PHPのSystem関数でcdしてもうまくできない

このQ&Aのポイント
  • PHPのSystem関数を使用して特定のフォルダにcdしようとすると正常に実行されない問題が発生しています。
  • フルパスを使用すると正常に実行できるが、圧縮ファイルに無駄な階層が含まれてしまうため、解決策ではありません。
  • 所有権と書き込み権限の設定に問題がないことや、一部のフォルダでは正常に実行されることから、権限に関する問題ではない可能性があります。解決策があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10361)
回答No.1

考えにくいですね。念のため、 ls -ld /var /var/www /var/www/html /var/www/html/hoge の結果を出してください。 あとは、タイプミスの可能性がないか、再度見直し。 シェルのコマンドラインで、 sudo -u apache php -r 'system("cd /var/;pwd");' でも駄目ですか?

yukitakao
質問者

お礼

回答ありがとうございます。 >ls -ld /var /var/www /var/www/html /var/www/html/hoge >の結果を出してください。 実際はもう少し深い階層になっているので以下の通りです。 (一部aaa,bbb,cccに変えました) drwxr-xr-x 22 root root 4096 3月 30 2009 /var drwxr-xr-x 8 root root 4096 5月 13 2009 /var/www drwxrwxrwx 24 apache apache 4096 8月 9 14:42 /var/www/html drwxrwxrwx 7 apache apache 4096 8月 10 12:07 /var/www/html/aaa/ drwxrwxrwx 3 apache apache 4096 7月 13 10:27 /var/www/html/aaa/report/ drwxr-xr-x 3 apache apache 4096 8月 10 2:30 /var/www/html/aaa/report/bbb/ drwxr-xr-x 2 apache apache 4096 8月 10 16:38 /var/www/html/aaa/report/bbb/ccc/ 上の圧縮ではbbbフォルダにcdして cccフォルダを圧縮使用としています。 >あとは、タイプミスの可能性がないか、再度見直し。 Systemに渡してる内容をそのまま画面出力して 出力したものをコピペでコマンドラインで実行すると正しく実行されましたのでタイプミスの可能性はないです。 >sudo -u apache php -r 'system("cd /var/;pwd");' こちらは問題なく実行できました。 sudo -u apache php -r 'system("cd /var/~;zip -r~");' でも正しくZIP化できました。 ということはPHPに直で渡した場合は問題ないってことですよね。 うーん。なんでだろう。 もう少し試してみます。

yukitakao
質問者

補足

念のため上記の確認用に作ったソースをそのまま載せます。 /var/www/html/上のPHPファイルを実行 <?php $cmd = sprintf("cd %s;pwd;whoami;" ,"/var/" ); print($cmd); print("<BR>"); system($cmd); ?> 実行結果 cd /var/;pwd;whoami; /var/www/html/ apache あと上記プログラムをWEBブラウザ経由で(つまりapache経由で)実行した結果は上記の通りですが コマンドラインから実行すると正しく実行されていました。 実行結果 # sudo -u apache php test.php cd /var/;pwd;whoami;<BR>/var apache コマンドラインとapacheの違いの可能性ってことで試しに.htaccessを消して実行してみましたが結果は変わらずでした。

関連するQ&A