WindowsでPHPのアップロード系処理を扱うときのディレクトリパーミッションに注意!

このQ&Aのポイント
  • Windows7+Apache2.2.x+PHP3.1でアップロード処理を行ったときに、一時ディレクトリの値を取得できずに移動ができない問題に遭遇しました。
  • Webサーバのディレクトリと同じパーミッションを与えることで解決する方法があるようですが、試しても改善しない状況です。
  • 具体的な手順をご存知の方がいらっしゃれば、教えていただけると助かります。
回答を見る
  • ベストアンサー

WindowsでPHPのアップロード系処理を扱うときのディレクトリパー

WindowsでPHPのアップロード系処理を扱うときのディレクトリパーミッションについて。 Windows7+Apache2.2.x+PHP3.1でアップロード処理を行ったときに、php.ini内で設定されているアップロード一時ディレクトリからmove_uploaded_fileでファイルを移動させるときにうまくいきません。$_FILES変数から一時ディレクトリの値をとってくることすらできていないようです。サーバを起動しているマシン内から行うとできます。リモートからのときにできません。 で、探してみたらこの問題で引っかかっている人が結構いたようで、Webサーバのディレクトリと同じパーミッションを与えてやればいいというような記述があったので、アップロード用ディレクトリにApacheのルートディレクトリから属性を継承ささせ、「Everyone」ユーザにフルコントロールを与えてみたのですが改善しませんでした。具体的な手順をご存知の方がおられましたら教えていただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.1

>$_FILES変数から一時ディレクトリの値をとってくることすらできていないようです。 なら、何をmove_uploaded_fileしているのでしょう? php.iniの upload_max_filesize post_max_size そのあたりの関係で、そもそもファイルがアップロードされていないとか。 もしくは、POSTではなくGETで送っているとか。 ※理屈の上ではファイルサイズさえ小さければGETでも構わないのかも知れませんが、現実的ではないでしょう。 $_FILE['hoge']['error'] はチェックしていますか? http://php.net/manual/ja/function.move-uploaded-file.php

crysis5375
質問者

補足

$_FILES['hoge']['error']ではエラーが出ていません。 ちなみにLinuxサーバでアップロード先と一時ディレクトリのパーミッションをapacheにしてやってアップロードを行うと問題なく行えるようなコードです。 一応Webに答えらしきものはあって、ディレクトリのパーミッションであることはわかっているのですが、Windowsで管理者権限ユーザで作成したアップロード用ディレクトリのパーミッションをどうしてやればいいのかがつかめていないようです。 これまでひたすらプログラミングをしてきたのはいいのですが、Windowsをサーバにしてこういった処理をするということを意外とやっていなかったもので、Windowsにおけるディレクトリのパーミッションの仕組みをいまいち理解していないというなんとも恥ずかしい話ですwww

関連するQ&A

  • PHPでのファイルアップロードについて

    初めて質問させていただきます。 PHPの勉強をはじめたばかりの初心者です。教本をもとに勉強を進めています。すべて教本どおりに設定し進めてきましたが、ファイルアップロードの箇所でどうしてもうまくいきません。いろいろ、php.iniを修正したり、PHPを修正したりしましたが本どおりの結果になりません。ご指導お願いします。 以下2種類のhtmlファイルとphpファイルを使用 (1)upform.htmlの内容 <HTML><BODY> <FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA" ACTION="upload.php"> <INPUT TYPE="FILE" NAME="upfile"><br> <INPUT TYPE="SUBMIT" VALUE="アップロード"> </FORM> </BODY></HTML> (2)upload.phpの内容 <html><body> <?php if(move_uploaded_file ($_FILES['upfile']['tmp_name'], "./htdocs/phpbook/" ) == FALSE) { print "失敗しました。"; }else{ print ($_FILES['upfile']['name']); print "をアップロードしました。"; } ?> </BODY></HTML> 上記内容でhtmlファイルを呼び出し、abc.txt(デスクトップに保存している)をアップロードしようとすると、以下のエラーが返されます。 ↓↓エラー内容 Warning: move_uploaded_file(./htdocs/phpbook/) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\phpB.tmp' to './htdocs/phpbook/' in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7 失敗しました。 ↑↑エラー内容 いろいろ思考錯誤し、upload.phpファイルの6行目"./htdocs/phpbook/"の箇所を、"abc.txt"としてみると、『アップロードしました』とアップロードに成功(?)し、abc.txtはC:\Program Files\Apache Group\Apache2\htdocs\phpbook内にアップロードされました。 教本では、"./htdocs/phpbook/"はファイルの保存先と注記されていますが、エラーになります。"abc.txt"に書き換えることでアップロードに成功しています。また、なぜ、アップロード先がC:\Program Files\Apache Group\Apache2\htdocs\phpbook内になるのかもわかりません。php.iniファイルの設定でしょうか。質問が長くなり、また、内容に足りない面もあるかもしれないですが、どうかよろしくお願いします。 【参考】 php.iniのFile Uploadsを抜きました。 ;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). upload_tmp_dir = ; Maximum allowed size for uploaded files. upload_max_filesize = 2M

    • ベストアンサー
    • PHP
  • PHPでファイルのアップロード

    OSはLinuxのfedoraを利用しており、WebサーバーソフトはApacheを利用しています。 PHPを使って、クライアントからサーバーにファイルのアップロードをしたいのですが、プログラミングがあまり理解できておらず、アップロードができません。ちなみにphp.iniファイルの設定に関しては、アップロードは受け付けるようにしていますし、設定にミスはないと思います。 sample.phpというファイル名で下記のファイルを作ってみたのですが、アップロードすることができませんでした。まだPHPは初心者で間違いだらけだと思うのですが、こうすればアップロードできるようになるといった指摘をお願い致します。 <html> <head> <title> </title> </head> <body> <form enctype="multipart/form-data" action="sample.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="30000"> Send this file: <input name="userfile" type="file"> <input type="submit" value="Send File"> </form> <?php if(isset($uploadfile) and is_uploaded_file($uploadfile)) { if(move_uploaded_file($uploadfile, $path . "/var/www/html/test/" . $uploadfile_name)){ print("<br>Uploaded file saved."); }else{ print("<br>Uploaded file save failed."); } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • ファイルアップロード(Windows2000環境)

    Windows2000にApacheとPHPをインストールして、 ファイルアップロードのフォームを 作ったのですが、アップロードしようとすると、 ~Permission denied in ~ というWarningが表示され、アップロードすることが できません。 アップロードするディレクトリにはどういう権限を 与えればよいのでしょうか?

    • 締切済み
    • PHP
  • PHPのファイルアップロードについて

    現在CakePHPでファイルのアップロードを行おうとしています。 で一通りアップの手順は書き終わったのですが、じつはアップロードするファイルが マックスで100MBほどになる可能性があるのです。 現在、仮のサーバーで試してみたところ10~11MBほどのファイルであればちょっと時間がかかりますが、アップはできました。 ただしそれ以上の重いファイルになるとBadRequestとなりアップできません。 通常PHPはデフォルトでは2MBが最大アップ容量だと思います。 それの制限を #Apache側でのリクエストのバイト制限 LimitRequestBody 300000000 #PHP.ini側でのPOSTリクエストのバイト制限 php_value post_max_size 300M #PHP.iniでのファイルアップロードのバイト制限 php_value upload_max_filesize 300M 上記のような記述をhtaccessに記述しています。 ところが、12MB~以上のファイルになるとブラウザがBadRequetを返してしまいます。 これは実際のレンタルサーバーだけでなく、ローカルのApache環境でも同様の現象が起きます。 他に、アップ時に制限をかけているプロパテイ的なものがApacheやPHPの設定にあるのでしょうか? アップロードに詳しい方ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • phpで巨大なファイルをアップロード

    お世話になります。 PHP・Apacheを使用して大きな容量のファイルをアップロードしようとしています。 php.iniで下記のように値を変更しました。 max_execution_time = 1800 max_input_time = 1800 memory_limit = 2048M post_max_size = 2048M upload_max_filesize = 2048M default_socket_timeout = 1800 この状態でApacheを再起動して1.2GBほどのファイルをアップロードしてみたのですが エラーも起こらず、正常にアップロードされたかと思ったら160バイト程の容量でサーバーにあがっていました。 600MBくらいのファイルでためしたところ正常にアップロードされたのですが 1GB以上のファイルをアップロードするためにはまだなにか設定が足りない、または間違っているのでしょうか? サーバーはCentOS5.5の64bit、メモリは16GBあります。 回答よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのパーミッションの設定について

    PHPのパーミッションの設定について 自分でアパッチを設定したのですが、 自分のサーバーでPHPのテストをするには サーバーと同じようにパーミッションの設定をしないといけないです。 これはどうやったら出来るんでしょうか? また、詳しくファイルの性質ごとに属性を変える基準がかいてるページは無いでしょうか? 分かる方教えていただけますか?

    • ベストアンサー
    • PHP
  • アップロード後にphpが動かない

    すいません。初めてphpを組んでアップロードしてみたのですが、上手く動かずプログラムがそのまま表示されます。 普通のhtmlのみで作ったサイトは持っているのですが、phpは初めてでググっても実際にどのようにアップロードして動かすのか説明したサイトなどが見つからず困っています。 サーバーはさくらのレンタルサーバーでphpは使えます。 サーバーのphpの設定画面にphp.iniというのがありますがこれを何か弄らないとダメなのでしょうか? ローカル環境では動いたのですが、他に何が必要なのでしょうか? (ファイル名はちゃんとindex.phpとしてあります)

    • ベストアンサー
    • PHP
  • ファイルアップロードが出来ません。

    phpとApacheを利用して、ファイルのアップロードしたいのですが以下のようなエラーが出て上手くいきません。 エラー文 Warning: move_uploaded_file(C:\Program File\Apache Group\Apache2\htdocs\image\200708090925000.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\view.php on line 12 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\php11.tmp' to 'C:\Program File\Apache Group\Apache2\htdocs\image\200708090925000.jpg' in C:\Program Files\Apache Group\Apache2\htdocs\view.php on line 12 正常にアップロード処理されませんでした。 php.iniの設定はfile_upload=On upload_tmp_dir=NULL upload_max_size=2M です。 phpinfo()で確認したところ、upload_tmp_dirがno valueになっているのですが、設定が反映されていないのでしょうか? 参考までに作成したプログラムを載せておきます。 <HTML> <HEAD> <TITLE>PHPのテキスト</TITLE> </HEAD> <BODY> <?php $file_dir = 'C:\Program File\Apache Group\Apache2\htdocs\image\\'; $file_path = $file_dir.$_FILES["uploadfile"]["name"]; if(move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $file_path)){ $img_dir ="/image/"; $img_path = $img_dir.$_FILES["uploadfile"]["name"]; $size = getimagesize($file_path); ?> ファイルアップロードを完了しました。<BR> <IMG src="<?=$img_path?>"<?=$size[3]?>><BR> <B><?=mb_convert_encoding($_POST["comment"], "EUC-JP","SJIS")?></B><BR> <?php }else{ ?> 正常にアップロード処理されませんでした。<BR> <?php } ?> </BODY> </HTML> 原因が分かる方、ご意見よろしくお願いいたします。

    • 締切済み
    • PHP
  • phpでのファイルアップロード

    ファイルのアップロードについてご質問があります。 宜しくお願いします。 基礎phpという本でファイルをアップロードするサンプルがあり、このスクリプトでアップロードされたファイルを格納する『upload』というディレクトリをサーバに作成し、スクリプトを実行して、実際にファイルがアップロードできているかffftpにて『upload』ディレクトリの中を見てみると、なにも表示されませんでした。しかしブラウザから http://myドメイン/upload/ファイル名 にアクセスすると表示されます。 ですのでアップロードはできているがファイルが見えないという状態になっております。また『upload』ディレクトリの削除などもできなくなってしまいます。 サーバの設定が関係しているのかとも思ったのですが、サーバの設定を変更することはできないので、プログラムがわで何とかできないでしょうか? 大変申し訳ありませんが宜しくお願いいたします。 以下がそのコードです。 【up.html】 <html> <head><title>File Uploader</title></head> <body> <form method="post" enctype="multipart/form-data" action="up.php"> <input type="file" name="upfile"> <input type="submit" value="upload"> </form> </body> </html> 【up.php】 <html> <head><title>File Uploader</title></head> <body> <p> file uploader </p> <?php $updir = "./upload/"; $filename = $_FILES['upfile']['name']; if (move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename) == FALSE){ print("Upload failed..."); print($_FILES['upfile']['error']); }else { print("<b>" . $filename . "</b> uploaded!"); } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPにてファイルがアップロードできません。

    PHPにてファイルがアップロードできません。 今回PlugSheevaの亜種である玄柴(ubuntu)にてapache2+PHP5でAjaXplorerという phpで動作する物を設置しようと試みているのですが AjaXplorerにブラウザでアクセスしアップロードしようとすると there has been an IO Error:Error #2038 There has been an HTTP Error:412 というエラーが発生します。 色々試みたのですが諦めてaxlope20というphpでブラウザからアップロードを試みたのですが 転送を試みると転送画面が自動で閉じ、何の変化もなしに前のディレクトリ画面に戻されます。 このことからphpの設定でアップロードの設定ができていないと考えたのですが 解決方法がわかりません。 php.iniの設定を以下のものにしました。 safe_mode = Off (デフォルトのまま) max_execution_time = 300 max_input_time = 600 memory_limit = 32M register_globals = On post_max_size = 3500M file_uploads = On upload_tmp_dir = /tmp upload_max_filesize = 3500M と、したのですが結果は変りませんでした。 chmod 777 tmpでtmpフォルダにパーミッション777を渡してあります。 容量の小さなファイルもアップロードできません。 しかし設置当初一度だけAjaXplorerで500Kbのexeファイルがアップロードすることができたのですが それもなぜできたのか不明です。 後に同じファイルを何度も転送しようと試みましたが駄目でした。 ext3でフォーマットしたUSBを差込み、それをmount /dev/sda /mnt/usb/としてマウント /mnt/usb/www/htmlがapache2の公開ディレクトリにしております 今は実験段階ですのでAjaXplorerもaxlope2も chmod 777 -Rでフォルダ全体にパーミッション777を与えてあります 上記の事以外は初期設定のままであると思います。 phpでファイルをアップロードできるようにするにはどうすればいいのでしょうか? 回答よろしくお願いします。

    • ベストアンサー
    • PHP