カレントディレクトリを一旦変更してから元に戻す
(知らなかったとはいえ)あぶねーことしてたので反省がてら。
もしかしたら初心者レベルかもしれないアレでアレなんですが…
サーバに置いてあるファイルを参照するシェルスクリプトをPHPから呼んでいたのですが、
シェルスクリプト内でファイルを相対パス指定しているのを素で呼んでいたという。
雑な例なんですが
ls -l ../hoge
exec("/abc/def/fuga/hoge.sh");
という感じ。
カレントディレクトリがどこかを意識していないので危ないやつ。
というかシェルに対しての相対パスかと思っていた。確かにそんなはずはない。
んでPHP側をこういう感じで修正しました。
※場合によってはパーミッションで弾かれるので注意
// カレントディレクトリを一旦保存 $dir = getcwd(); // 特定のディレクトリに移動+必要に応じてエラー処理 if (!chdir("/abc/def/fuga")){ /* だめ */ } // コマンド実行 exec("/abc/def/fuga/hoge.sh"); // 元のディレクトリに移動+必要に応じてエラー処理 if (!chdir($dir)){ /* だめ */ }