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

このQ&Aのポイント
  • PHPのファイルアップロードについての制限について教えてください。
  • ファイル容量が大きい場合にアップロードできない現象が発生しています。
  • Apacheや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
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
回答No.2

追加で。 php.iniのmax_execution_time。300秒くらいにしてみるとか。 設定変更後、Apacheを再起動したか。 アップロード失敗時のログファイルの確認。

1000vicki
質問者

補足

ご教授ありがとうございます。 ご指示いただいた一点HTMLのhidden属性にマックスサイズというのを指定してみました。 すると、前回よりも大きな28MB程のサイズまでアップすることができました。。。。が やはりそれ以上大きなサイズをアップするとBadRequestになるようです。 ただ面白いことにファイヤーフォックスでは、BadRequestがでるものの Operaでは最大81MBのファイルがアップできてました。 ほかクロームでも同様に81MBのファイルはアップできました。 問題はFFだけなのですが・・・。 少なくともFF・Operaブラウザでの動作は保障したいのです。 他に何か改善作はあるでしょうか? ちなみに、生のPHPでもCakeでも同じようにFFだと、大容量のファイルはアップできないようです。 ちなみにアップ時の処理はべたにmove_uploaded_fileでテンポラリディレクトリから、htodocs内の任意のディレクトリに移動するという手段をとっています。 http_requestの類でやったほうがいいんですかね・・・・。

その他の回答 (1)

回答No.1

すでに調査済みのものと重複するかもしれませんが、私なら試してみることを考えてみました。 1. ApacheのLimitRequestBodyを確認。他者からの攻撃を避けるためこの値を絞っていることがあります 2. php.iniのmemory_limitを大きくしてみる 3. HTMLのMAX_FILE_SIZEを大きな値にしてみる(クライアント側の問題) 4. いろいろなブラウザの種類、ブラウザのいろいろなバージョンで試してみる(クライアント側の問題) 5. cakePHPだと失敗するのかそれとも生のPHPでも失敗するのか 6. アップロードを手助けしてくれるcakePHPのプラグインを試してみる 7. アップロードファイルをDBに格納してる処理はあるか。もしかしてDBの制限とか 8. なんだかんだでうまくいかないなら最終的には大きなファイルを分割してアップロードしてサーバーでくっつける(クライアントとサーバーの連携)

関連するQ&A

  • 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でファイルのアップロード

    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
  • ファイルのアップロードサイズについて

    環境は linux+Apache+php になります。 ファイルのアップロードサイズについてですが、php.iniに post_max_size = 8M upload_max_filesize = 4M 等の記載がなく、またhttpd.confも AllowOverride none (.htaccessファイル 無効?) になっていた場合、アップロードできるサイズの制限はデフォルトの post_max_size = 8M upload_max_filesize = 2M になるのでしょうか? AllowOverride all の設定で、httpdファイルに記載が無い場合などは調べられたのですが htaccessが無効の場合がちゃんと調べられなくて、 デフォルトだろうなと思いながらも、知識のある方に教えていただきたく、 質問させていただきました。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 大容量のファイルアップロードについて

    どうしても分からず、質問いたします。 自宅サーバを構築しPHPのブラウザによる大容量ファイルアップロードが可能にしようとしています。 (2GBくらいのファイルでもアップロードしたい) しかし、外側からアップロードを行う際、数十MBまでなら可能ですが、それ以上になると 途中までアップロード処理しているようですが、ページが表示されませんのエラーや、アップロードの処理が中断してしまいます。 ご教授お願い致します。 ■フォーム側の設定(MAX_FILE_SIZE値) <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="2048000000"> ■php.iniの主な変更箇所 memory_limit = -1 max_input_time = 6000 max_execution_time = 60000 upload_max_filesize = 2000M post_max_size = 2000M ■以下サーバの環境です。 OS:Windows2000 SP4 IIS5.0 メモリ:512MB PHP:5.2.5 よろしくお願い致します

    • 締切済み
    • PHP
  • Apatch、PHPを用いたファイルのアップロード

    Apatch、PHPを用いたファイルのアップロード サーバ構築、PHPともに初心者です。 原因が全くわからないので、質問させて頂きます。 現在、ApatchとPHPを用いた、ファイルのアップロードシステムを考えています。 適当なファイルをアップロードする所までは順調なのですが、ファイルの容量が一定以上になるとアップロードが出来ません。 具体的な数値はわかりませんが、7.5MBのファイルは可能、8.2MBのファイルは不可能といった所です。 恐らく8MBが区切りだと考えています。 環境、設定等は以下の通りです。 --------------------------------------- [PC] OS:Windows XP SP2 Memory:2GB [ソフト・バージョン] Apatch2.2 PHP5.2.10 [php.ini内] uploads = On upload_tmp_dir = "C:/tmp"(十分な空き容量) upload_max_filesize = 500M post_max_size = 500M memory_limit = 512M max_execution_time = 10000 --------------------------------------- 上記以外に記載する必要のある項目があれば記載致します。 どなたか心当たりのある方がいらっしゃいましたら、是非ともご教示ください。

  • ファイルのアップロード (PHP, $_FILES)

    以下の内容で困っております、ご教授いただけますと幸いです。 ファイルのアップロードで、以下のようなPHPページを作成し 実際ファイルのアップロードを実行した場合、 IEやMozillaではうまくいくのですが、Operaでうまくいきません。。 $_FILES配列に何も入っていない状態です。 なにかブラウザ側の設定が原因なのでしょうか? ちなみにテストしているファイルのサイズは10KB以下でphp.iniでの "upload_max_size"の設定値は2MBです。 --簡易ソースコード-- <HTML> <BODY> <FORM ENCTYPE="MULTIPART/FORM-DATA" NAME="up" ACTION="./" METHOD="POST"> <INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="10000000"> <INPUT TYPE="FILE" NAME="userfiles" SIZE="50"> <INPUT TYPE="SUBMIT" VALUE="GO!"> <?PHP print_r ($_FILES); ?> </FORM> </HTML>

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

    いつもお世話になっております。 ファイルをアップロードするプログラムを作成しています。 最大ファイルサイズを200MBに設定しようと思っております。 PHPの設定を行なったのですが、ブラウザがフリーズしていまい うまくアップロードできません。 設定は下記のようにしました。 間違い、アドバイスがありましたら、ご教示お願いいたします。 よろしくお願いいたします。 test.php -------------------------------------------------- <form name="form1" method="post" action="test.php" enctype="multipart/form-data">  <input type="hidden" name="MAX_FILE_SIZE" value="200000000" />  <input name="mfile" type="file">  <input name="cfm" type="submit" value="確認画面へ"> </form> php.ini -------------------------------------------------- max_execution_time = 180 memory_limit = 250M post_max_size = 225M upload_max_filesize = 225M <環境> PHP:5.2.5

    • 締切済み
    • PHP
  • サーバへのアップロードが出来ない。

    表題の通り、アップロードしたファイルが取得出来ずに困っています。 環境はCentOSで、バージョンは覚えていません。 php.iniの設定 file_uploads = On upload_tmp_dir = "/tmp/apache" upload_max_filesize = 1024M memory_limit = 1024M post_max_file = 1024M upload_tmp_dirの値ですが、初期は/tmpだったのですが、権限の問題を疑った為、変更しました。 cd /tmp mkdir apache chmod 777 /etc/apache chown apache:apache apache としてあります。 テストで実際に使っているファイルです。 - index.php <html> <head> </head> <body> <form action="index.php" method="post" enctype="multipart/form-data" name="test"> <input type="file" size="80"> <input type="hidden" name="MAX_FILE_SIZE" value="10000000"> <input type="submit" value="アップロード"> </form> <?php var_dump( ini_get('memory_limit') ); var_dump( ini_get('post_max_size') ); var_dump( ini_get('upload_max_filesize') ); var_dump($_FILES); ?> </body> </html> apacheのエラーログも確認しましたが、$_FILESを$_FILEに書き換えて見た時以来、エラーは出ていませんでした。 解決方法をご存知の方がおりましたら、是非ともご教授頂ければと思います。

    • ベストアンサー
    • PHP
  • 大きいサイズのファイルのアップロード

    ファイルのアップロードについて教えてください。 OSはLinuxです。 php.iniのupload_max_filesizeは10Mを指定してあります。 そこで7Mくらいのデータをアップロードしようとすると ファイルの存在チェックでファイルが見つかりません。となってしまいます。 小さいサイズのファイルでは問題はありません。 サーバーはApacheを使用しています。 また、Windowsで同じ設定で同じファイルのアップロードは できます。 なにか原因となるものがありましたら、 是非教えてください。 よろしくお願いします。

    • 締切済み
    • PHP
  • データベースのアップロードで頓挫・・・

    環境はレンタルサーバーです 大量のデータのCSVを データベースにアップロードできません 検索で調べたら容量制限?があるそうですが それを操作しようと思ってもできませんでした どうやら共有ファイル?なので php.iniが操作できないので、容量の制限を操作する事ができないようです と、言う事は レンタルサーバーに phpやアパッチのファイル等をアップロードして そのアップしたファイルをphp文でphp.iniを操作するやり方でいいのでしょうか??? また、他に良い方法があれば ご教授ください! 素人なので、頓珍漢な事を言っているかも知れません よろしくお願いします!

専門家に質問してみよう