PHPでファイルをアップロード。

これからやる仕事でPHPを使うので、PHPが動くサーバでいろいろ試してみました。ハマりそうになったところを簡単にまとめておきます。

  • ファイルアップロード時のファイルのアクセス権限(パーミッション)について

1.問題
PHPのmove_uploaded_file()を使って画像をアップロードする機能を作成した。アップロード後、そのパスにアクセスしたが画像が表示されずに警告が表示された。実際にFFFTPでサーバの中を覗いたら、画像は存在していた(アップロードは成功していた)。よく見たら、画像のパーミッションが原因だということが判明した。

2.調査結果
o アップロード時の画像のパーミッションは「rw-------」だった。
o これだとOtherが画像を読み込むことはできないので、「rw-r--r--」(644)に変更する必要がある。
o PHPのソースでパーミッションを変更するコマンドが存在するか調べる。あった! → chmod("対象ファイル",0644)

3.さっそく実装
7行目がパーミッション変更メソッド。

<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
	if ($error == UPLOAD_ERR_OK){
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "./upload/{$name}");
        chmod("./upload/{$name}",0644);
        
	    print("<b> $name </b> uploaded <br/>");
	    print("<img src='./upload/{$name}'/><br/>");
	}
	else {
	    print("Upload failed");
	    print($error);
	    print("<br/>");
	}
}
?>

4.あとがき
1つ目の参考サイトにも書いてあるけど、ファイルのアップロードに関する解説サイトはたくさんあるのに、そのファイルのアクセス権限を変更する必要があることを解説しているサイトが見つからなかったのでうっかりハマりそうになりました。


−参考サイト−
PHP 画像 アップロード 備忘録 アクセス権限変更 - 何となく歩いた結果
http://www.kent-web.com/pubc/axsken/