ロリポップでPHP5を使ってディレクトリやファイルを削除する方法

この記事は次のブログに引っ越しました。

所有者がapacheの場合、PHPでchown,chmod,touch,unlinkが実行できない ロリポップ!(Lolipop)サーバで、PHPスクリプトが作成したディレクトリやファイルが、PHPFTPソフト(FFFTP)から削除できなくなりました。 原因は、ロリポップではPHP5からスクリプトの実行者がユーザーとなったため、所有者(オーナー)がapacheのファイルは当然削除できないのが原因した。 スクリプトだけで処理させようと、なにげにハマりました…。散々調べたのですが、結論から言うと ロリポップ!FTPで、所有者がapacheの親ディレクトリを所有者をユーザーに変更してから削除する 以外ないようです。(2009年12月20日、現在) 下記手順で、その下のディレクトリやファイルの所有者を全てユーザーに変更してくれます。後は、スクリプトなりFTPソフトなりで削除できるようになります。 ロリポップ!FTPにアクセス 所有者がapacheディレクトリを開く 「所有者を変更する」項目にチェックを入れて「保存する」 一括でしてくれるので手間ではありませんし、色々トライするよりはPHP5に以降してから1回だけの作業なので、急がば回れでした。 PHP4時代にスクリプトで作成されたものはapacheとなっていたので、当然といえば当然なのですが、PEARを入れなおそうとして気づきました。安定して動いていたというのも危険ですな。 ちなみに、一括削除用スクリプトはこちら。 ディレクトリ、ファイル一括削除用スクリプト ※参考サイト:PHP公式サイト 経緯 年末だしサーバ内も大掃除しようかなと思い立ち、PEARを再インストールしようとPEARのインストール先ディレクトリをFFFTPで削除したところ、削除できないファイルやディレクトリがごっそり出てきました。それらの所有者を見ると いずれもapacheでした。 PHPで作成したのであればPHPで削除(unlink)すればいいやと安易に思ったのですがNG。system関数やexec関数(shell_exec関数)も使えませんでした。 そこで、再帰処理でファイルやディレクトリの権限をchownで変更しようとしたのですが、警告(warningメッセージ)が表示され変更できませんでした。 ■エラーの例 Warning: chmod() [function.chmod]: Operation not permitted in /home/sites/lolipop.jp/users/xxxx/web/xxxx.php on line xx Warning: chown() [function.chmod]: Operation not permitted in /home/sites/lolipop.jp/users/xxxx/web/xxxx.php on line xx PHPのセーフモードかな?とも思ったのですがSAFE MODEはOFFになっていました。ダメ元でONにもして見たのですがセーフモードだからできないと怒られてしまいました。そりゃそうだ。 結局、数時間調べても「所有者がapacheのファイルやディレクトリをPHPだけでごっそり削除するスクリプト」の決定版も見つからず仕舞いでした。 宴もたけなわになってきたので、PHP4→PHP5への環境移行で一回は通る道として不本意ながらロリポップ!FTPディレクトリの所有者を手動で変えたところ、上記スクリプトで一発で削除できました。 先生も走るこの時期、急がば回れという結果でした。アチョンブリケ。とほほほ。