Apache+PHPアップロードファイルサイズ制限の問題を解決


PHPでファイルのアップロードを行う操作では、アップロードファイルのサイズの設定をどのように制御するかを知る必要がありますが、ファイルのアップロード可能サイズは様々な要因によって制約されています.以下にまとめます.
  • 1、php.ini:upload_max_filesizeがアップロードしたファイルの最大サイズ.既定値は2 Mです.
  • 2、php.ini:memory_limit本命令は、スクリプトが申請できる最大メモリバイト数、デフォルト値8 Mを設定します.メモリの制限が不要な場合は、-1に設定する必要があります.メモリが足りない場合、エラーが発生する可能性があります:Fatal error:Allowed memory size of X bytes exhausted(tried to allocate Y bytes)
    一般的にデータベースをインポートする場合、データベースが大きすぎるとエラーが発生します.これを変更すればいいです.
  • 3、php.ini:post_max_Size POSTデータが許容する最大サイズを設定します.この設定はファイルのアップロードにも影響します.大きなファイルをアップロードするにはuploadより大きい値が必要です.max_filesize.
  • 4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds
  • 5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
  • 6、mysqlのBLOBを用いてバイナリファイルを格納する場合はmyを設定する必要がある.ini:max_allowed_packet=xxM
  • 7、httpd.confはApacheの中にLimitRequestBodyという選択肢があり、このオプションはユーザーが送信するHTTPリクエストの内容を制限することができる.このオプションは.htaccessまたはhttpd.confではhttpd.conf内で使用し、virtualhostまたはディレクトリ属性設定でそれぞれ使用できます.
    LimitRequestBodyの設定値は0(無制限)から2147483647(2 GB)までです.
    例えば、ディレクトリD:/AppServ/wwwにアップロード制限を100 Kに設定するには、次のようにしてもよい.htaccessまたはhttpd.confは、
    LimitRequestBody 1024000000
    Options FollowSymLinks MultiViews ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    ApacheサーバがクライアントからLimitRequestBodyバイト数を超えないリクエストを受信し、phpモジュールに転送し、phpモジュールが一時ファイルとして保存するかどうかを決定し、$_を設定するFILESグローバル変数は、scriptに移行してさらに処理します.
    最後に注意したいのは、html自体がpostデータにできるのも制限があり、2 Gを超えてはいけないということです.
    FTPクライアントにはファイルオフセットポインタの2 GB境界制限があり、特殊コンパイルflagを使用してコンパイルされていないftpサーバ側またはクライアントは、どのFSでも2 GB以上のファイルはサポートされていません.