chmodでパーミッション変更できない場合

PHPにももちろんパーミッションを変更する関数はある*1。ところがこれでエラーになる場合がある。

PHPのchmodでエラーになる場合

<?php
// パーミッションを0666へ変更する。
chmod ('hoge/hoge.php', 0666);

// ところが以下のようなエラーになる場合がある。
//Operation not permitted
?>

原因は実行する側の権限の問題。いろいろ調べた結果、systemという関数を使用した*2。スマートではないけどレンタルサーバーでSSHアクセス出来ない場合はこれしか方法がないのかなぁ、という感じ。

対策方法

<?php
// 使用しているサーバーでchmodコマンドが使えることが前提
system('chmod 666 ./hoge/hoge.php');exit;
?>

備考

相変わらずスマートさにかける・・・。

*1:[http://php.net/manual/ja/function.chmod.php:title=PHP Manual : chmod]

*2:[http://php.net/manual/ja/function.chmod.php:title=PHP Manual : system]