7

PHP アプリケーションのファイル アップロード ユーティリティに問題があります。フォームで大きなファイル (9MB 以上) を送信すると、非常に奇妙な動作が発生します。フォームに含めた POST データが、ファイル情報を含めて消えてしまいます。

可能なすべての PHP 制限 (時間制限、最大入力時間、投稿の最大サイズ、メモリ制限、アップロードの最大ファイルサイズ) を既に増やしましたが、まだ適切な動作を得ることができません。通常の HTTP フォームを Flash ベースのソリューション (SWFUpload、www.swfupload.org) に置き換えてみましたが、動作は同じです。

同様のサイズの複数のファイルを試しましたが、特定のファイルの問題ではありません。Firebug を使用して送信された POST vars をデバッグしましたが、ファイルと一緒に正しい変数がヘッダーに残っています。

ここで何が起こっているのでしょうか?

4

4 に答える 4

2

わかりました、解決策があると思います。post_max_sizeディレクティブとの両方をチェックする必要が$_SERVER['CONTENT_LENGTH']あるため、 $_SERVER['CONTENT_LENGTH'] が post_max_size を超えている場合は、アップロードしようとしているデータが多すぎることを意味します。

$POST_MAX_SIZE = ini_get('post_max_size');
$mul = substr($POST_MAX_SIZE, -1);
$mul = ($mul == 'M' ? 1048576 : ($mul == 'K' ? 1024 : ($mul == 'G' ? 1073741824 : 1)));
if( $_SERVER['CONTENT_LENGTH'] > $mul*(int)$POST_MAX_SIZE && $POST_MAX_SIZE )
{
    $error = true;
}

ここから取得したソリューション: http://www.php.net/manual/en/features.file-upload.php#73762

于 2010-12-29T11:13:26.097 に答える
2

要求サイズを制限するように Web サーバーを構成することもできます。Apache を使用している場合は、LimitRequestBodyディレクティブを確認してください。

于 2010-05-21T19:23:44.707 に答える
1

それでもコードを投稿できない場合は、1 ~ 2 MB の小さなファイルをアップロードしてみてください。

フォーム定義に enctype='/multipart/form-data' を追加したことを願っています。

于 2010-05-21T19:22:21.433 に答える
0

どのサーバーで実行していますか? 一部のサーバー OS には、許可されるファイルのサイズに制限が設定されていると思います。この値は変更できます。

于 2010-05-21T19:23:29.230 に答える