PHPでchmodする

PHPでchmodする

PHPPHPでchmodする

さて、今日はディレクトリやファイル権限(パーミッション)のお話。Windows だと、あまり意識することのない話ですが、Linux では非常に重要な話となります。一歩間違えると、やられたい放題です。

でも、今回は Linux などのシェルの話ではなく、PHP でファイルの権限を操作します(笑)PHP なので Web サーバ用のユーザーやグループ(一般的には www とか www-data とか apache)などで権限変更が可能なファイルがターゲットとなります。

なんで、こんな話になったかというと、レンサバ上の PHP で画像をアップロードしたら、ファイルのパーミッションが 600(rw-|---|---) になっちゃってたんですよねぇ・・・。ちなみに owner と group は Web サーバ用のユーザーとグループ(ここでは仮に www とします)です。

特にブラウザ経由で見る場合には何も問題はないのですが、FTP でファイルをクライアントに送信する権限がないので、画像のバックアップができないのです。例え SSH などでサーバ上のシェルが使えるようなレンサバだったとしても、これは権限的に難しいと判断し(シェルのユーザーで www ユーザーの権限を操作する権限がないだろう)、こうなったら PHP で権限変更しちゃえということで、この話に至ったわけです。

さて、前置きが長くなりましたが、実際に作った即席スクリプトです。 PHP の chmod 関数ではパーミッションを 8 進数で表現することになります。今回は 644(rw-|r--|r--)にしますので、0644 と定義します。go+r などのシェルっぽい文字列での操作はできません。 さらに、ディレクトリのファイル一覧にはカレントディレクトリなどのドットも含まれるので、画像ファイル(ここでは拡張子が jpg)のみが対象となるようにしておきます。

仮に、画像のディレクトリを /home/www/saratoga/image とします。

<?php
$targetDir = dir("/home/www/saratoga/image");
$i = 0;

while (($targetFile = $targetDir->read()) !== false) {
    if (substr_count($targetFile, "jpg") > 0) {
        chmod("/home/www/saratoga/image/" . $targetFile, 0644);
    }
    $i++;
}

$targetDir->close();

exit();
?>

それにしても、やっぱスクリプト言語って便利だなぁっと思います。

最終更新日:

関連記事

人気記事

新着情報