- ベストアンサー
mkdirでディレクトリを生成し写真を保存する方法
- phpを使用してディレクトリを生成し、写真ファイルを保存する方法について教えてください。
- 現在、ディレクトリを生成することはできますが、写真を保存する段階で問題が発生しています。
- Apacheに書き込み権限を与える設定を行う必要があるのでしょうか?他に方法はありますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
おそらくumaskの値の影響だと思います。 PHPマニュアルより引用 ---- モードを八進数で指定したくなることもあるかもしれません。 その場合は先頭にゼロをつける必要があります。 また、モードは、現在設定されている umask の影響も受けます。 umask を変更するには umask() を使用します。 ---- 以上より、mkdirの前にumask(0);と記述してやれば777のパーミッションでディレクトリが作成できるはずです。 もしくは、パーミッションを指定せずにmkdirした後、chmodでパーミッションを変更する方法でも良いと思います。 どちらの方法にするかは以下より判断するのがよいかと思います。 PHPマニュアルより引用 ---- 注意: マルチスレッドな Web サーバでこの関数を使用することは避けてください。 ファイルを生成後、chmod() を使用してファイル権限を 変更するのがより良い方法です。全て同じ umask が使用されるので、 umask() の使用は、スクリプトを同時に実行する場合や Web サーバ自身の予期しない動作を引き起こす原因になる可能性があります。 ----
その他の回答 (2)
- UmJammer
- ベストアンサー率58% (115/196)
ANo.1です。 詳しい補足情報のご提供ありがとうございます。 アップロードエラーは発生していない上、エラーメッセージを見る限り当初からご指摘になっていたようにセーフモードであるために制限を受けているということで間違いなかったわけですね。 私の方がマニュアルに記述されている内容を正しく理解できていなかったようです。大変失礼しました。 php.iniの設定を変更できない環境であるならば、目先を変えてアップロード先のディレクトリを予め用意しておくしかないような気もします(但しそれはなんらかの理由で好ましくないと考えておられるのだとは思いますが)。 結局のところお役に立てず申し訳ありません。
お礼
色々ご意見有難うございます。 自分以外の方からも確認して頂けると、とても助かります。 サーバーを移転するものですから、環境が変わり、このような状況にぶつかってしまったわけです。 php.iniの設定を変えられるか、サーバー管理者に確認をとって、だめなら、写真の保存に関する一連の仕様を変更します。 速やかな回答を頂き、有難うございました。 大変ためになりました。
- UmJammer
- ベストアンサー率58% (115/196)
ANo.1です。 解決に至らなかったということなので、改めてマニュアルに目を通してみたのですが、move_uploaded_file()についてはセーフモードでも制限を受けるものの不可能というわけではないんですよね。その制限もmkdir()、chmod()と差が無いように見えるのでなぜアップロードができないか非常に気になります。 私自身、セーフモードで実行した経験もなく、再現する環境もないのでこれ以上首を突っ込むのもはばかられますが少しだけ確認させてください。 ・どのようなエラーメッセージがでているか ・全くエラーが表示されていない場合はdisplay_errorsやerror_reportingの値はどうなっているか ・アップロードエラーになっていないか($_FILES["photoA"]["error"]の値はどうなっているか) もし既に解決しておられましたら参考までに解決方法をご報告頂けますでしょうか。
補足
再度、ご連絡頂き有難うございます。 本来なら私がマニュアルを解釈できれば良いのですが、そこまで至りませんで、申し訳ありません。 さて、エラーメッセージは、以下のように出ています。 Warning: move_uploaded_file() [function.move-uploaded-file]: SAFE MODE Restriction in effect. The script whose uid is 10231 is not allowed to access /virtual/***/public_html/img/DirA owned by uid 1000 in /virtual/***/public_html/reg.php on line 91 $_FILES["photoA"]["error"]の値は、0です。 これは、テンポラリディレクトリへのアップロード成功を意味しますよね。 つまり、DirAの所有者がApacheで、reg.phpの所有者がFTPユーザーなので、move_uploaded_fileが使えませんよ、ということかと考えています。
お礼
非常に適切な回答有難うございました。 chmodでパーミッションを変更する方法で、うまくいきました。 しかしながら、その後のmove_uploaded_file関数が、うまく行かず、最終的な目的には至りませんでした。(おそらくセーフモードがオンになっていることが理由のようです。) パーミッションの件については、的確な回答有難うございました。大変参考になりました。