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
コメントを残す