- 締切済み
【PHP+ImageMagick】画像アップロード
【PHP+ImageMagick】現在、PHP Version 5.1.6にて以下の事をしようとしています。 1画像のUPLOAD(move_uploaded_file関数) 2UPLOADした画像のサムネイル作成(ImageMagickのconvertコマンド) 「手順START」 ・00003.JPGをアップロード ・00003.JPGのサムネイル作成失敗。 ・サムネイル作成部のみを抽出したスクリプトにて00003.JPGに対してサムネイル作成を実行 ・サムネイル作成失敗 ・cp -p 00003.JPG 000033.JPG とし000033.JPGを作成 ・権限等を00003.JPGと同じ物とし修正。 ・サムネイル作成部のみを抽出したスクリプトにて000033.JPGに対してサムネイル作成を実行 ・サムネイル作成成功 「手順END」 convertコマンドにて標準出力に吐き出されたログを見ると、画像ファイルに対して「Permission denied」と出力されていました。 ちなみに、コマンドベースでのphp実行は問題なく処理されます。今回の現象はWebブラウザからのアクセス時のみに発生しています。 php.iniのセーフモードはOFFになっています。 この現象について、わかる方がいらっしゃいましたら教えて頂けないでしょうか?よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
Permission deniedと言う事なので、文字通りパーミッションじゃないかと。 > コマンドベースでのphp実行 これはシェルの実行者、つまりログインしたユーザが実行者になります。 >Webブラウザからのアクセス時 これはapacheまたはnobody等のhttpdユーザが実行者になります。 1. サムネイルを作成するディレクトリはPHP(Apache)で実行権限がありますか? 無いならば、ディレクトリのパーミッションを変更して下さい。 2. PHP(Apache)の実行権限でImageMagickを使う事が出来ますか? 通常PHPの実行者はapacheやnobody等ですが、それにImageMagickの利用権限がなければ駄目です。ImageMagickの実行権限をsudoなどの設定で追加する必要があります。 参考まで。
補足
回答ありがとうございますm(__)m ■パーミッションについて 手順上で、 ------------ ・cp -p 00003.JPG 000033.JPG とし000033.JPGを作成 ・権限等を00003.JPGと同じ物とし修正。 ・サムネイル作成部のみを抽出したスクリプトにて000033.JPGに対してサムネイル作成を実行 ・サムネイル作成成功 ------------ となっており、加えて、 ディレクトリには、777にて全実行権限を与えており、 apacheユーザにて実行を行ったところ、問題なく動作しました。 % php test.php (test.phpはsystem(/usr/bin/convert ....)を使い画像を 変換するスクリプトです) apacheユーザでもコマンドライン上での実行であれば、00003.JPG、000033.JPGともに実行可能なのです。 ■内容 ところが、Webブラウザより http://localhost/test.phpにアクセスし、以下、2つのファイル変換を行ったところ、 1)-rw-rw-rw- 1 apache apache 1542953 2月 1 11:54 00003.JPG 2)-rw-rw-rw- 1 apache apache 1542953 2月 1 11:54 000033.JPG 1)は変換可能だが、2)が変換不可といった状態です。 違いは、00003.JPGはphpのmove_uploaded_file関数でアップロードを行ったという違いしか思いつきません・・・(ToT) move_uploaded_file関数でアップロードした画像は何かセキュリティがかかる事等があるのでしょうか??(そんな話は聞いた事がないのですが・・・) 何かお知恵がありましたらご教授ください。よろしくお願いいたします。