PHPで再帰的にパーミッション変更

PHPを使って再帰的にパーミッションを変更するプログラムを書きました。

事の発端は、当方が使用しているさくらサーバーにおいて、PHPのパーミッションを755に設定しないと「Internal Server Error」が発生してしまうことでした。さらに当方が使用しているCMSのWordpressは、オンラインでプログラムのアップデートをすると、パーミッションがデフォルトに戻ってしまうことが発覚。この二重苦によって、延々とFFFTPでパーミッションを変更する日々が続いていたのですが・・・流石に我慢できなくなりましたw

そこで自動化できないかと、色々思案したわけです。まず思いついたのがWindowsに付属しているftpプログラムを使用する方法。パーミッションを変更するchmodは動作するのですが、PHPファイルだけを抽出するfindが使用できず、断念。

次に一番慣れているC++を活用する方法を検討。FTP関連のライブラリを漁るのが面倒になり断念w

最後に行き着いたのがPHPで直接たたく方法。

function FuncChmod($dir, $int = 0) {
	$dh  = opendir($dir);

	while (false !== ($filename = readdir($dh))) {
		$t = "";
		for($i = 0; $i < $int; $i++)
			$t .= "  ";

		if($filename == "." || $filename == "..")
			continue;

		if(is_dir("{$dir}/{$filename}")){
			chmod($filename, 0755);
			echo "{$t}dir {$dir}/{$filename}\n";
			FuncChmod("{$dir}/{$filename}", $int + 1);
		}
		else {
			if(end(explode('.', $filename)) == "php")
			{
				chmod($filename, 0755);
				echo "{$t}{$filename}\n";
			}
		}
	}
	closedir($dh);
}

FuncChmod("/home/hoge/www");

我ながら汚いコードw再帰的に回して、PHPファイルなら755に属性変更しているだけです。あとディレクトリも同様の処理が必要らしいので、ディレクトリもchmodの一文を追加しました。普段は使わないときは、当ファイルのパーミッションを000に設定して放置すれば、安全かしら。

参考
  • さくらサーバーでWordPressをインストールすると「Internal Server Err」
    ameblo.jp/saitstick98/entry-11401681544.html
  • phpで特定のディレクトリ配下のパーミッションを再帰的に変更する
    www.atyks.org/blog/detail/2012-03-14-3
投稿日:
カテゴリー: ICT

作成者: きたけん

神戸出身&在住。大学では環境を学び、今はまちづくりに携わる。思い立ったらすぐに飛び出してしまう。