9

最大サイズ 10MB の大きなファイルを MySQL データベースにアップロードしたいと考えています。を使用し.htaccessて、PHP 自身のファイル アップロード制限を "10485760" = 10MB に変更しました。最大 10MB のファイルを問題なくアップロードできます。

しかし、ファイルのサイズが 1 MB を超えると、ファイルをデータベースに挿入できません。

file_get_contentsすべてのファイル データを読み取り、LONGBLOB フィールドに挿入される文字列として挿入クエリに渡すために使用しています。

print_r($_FILES)ただし、ファイルが正しくアップロードされていることを確認するために使用できますが、1 MB を超えるファイルはデータベースに追加されません。6 時間以内に必要となります。だから、助けてください!

4

7 に答える 7

15

MySQL 構成値 "max_allowed_pa​​cket" を確認してください。設定値が小さすぎて、INSERT (それ自体が大きい) が発生しない可能性があります。

mysql コマンド プロンプトから次を実行します。

mysql> show variables like 'max_allowed_packet';

十分な大きさであることを確認してください。この構成オプションの詳細については、次を参照してください。

MySQL max_allowed_pa​​cket

これは、文字列作成のサイズを制限する PHP の mysql_escape_string() および mysql_real_escape_string() にも影響します。

于 2009-01-29T17:21:10.777 に答える
8

私の知る限り、ファイルは非常に急速に大きくなり、速度が低下するため、ファイルをデータベースに保存しない方が一般的に速く、より良い方法です。ファイルをディレクトリに保存する方法を作成してから、ファイルの場所をデータベースに保存することをお勧めします。

URLセーフファイル名から名前を付けたファイルのフォルダーを作成し、フォルダー名をdbに保存することにより、作業中のCMSのimages/pdfs/mpegsなどに対してこれを行います。そのURLをプレゼンテーションレイヤーに書き出すだけで簡単です。

于 2009-01-29T17:29:04.660 に答える
4

最良の答えは、より優れた実装を使用し、その問題を回避することです。ここで記事を読むことができます。保存 10MB、1000MB は関係ありません。実装は、ファイルを多くの小さな断片にチャンク/カットし、それらを複数の行に保存します.これはロードとフェッチに役立つため、メモリも問題になりません。

于 2009-01-29T20:30:00.973 に答える
4

MySQL 用の一部の PHP 拡張機能には、LONGBLOB および LONGTEXT データ型に関する問題があります。拡張機能は BLOB ストリーミング (一度に 1 セグメントずつ BLOB をポストする) をサポートしていない可能性があるため、オブジェクト全体を一度にポストする必要があります。

したがって、PHP のメモリ制限または MySQL のパケット サイズ制限により、データベースに投稿できるオブジェクトのサイズが制限されている場合は、これを許可するように PHP または MySQL の設定を変更する必要がある場合があります。

使用している PHP 拡張機能 (MySQL には少なくとも 3 つある) については言及されておらず、ブロブをデータベースに投稿するために使用しているコードも示されていません。

于 2009-01-29T17:21:33.913 に答える
3

MySQL のLOAD_FILE 関数を使用してファイルを保存することもできますが、それでも max_allowed_pa​​cket の値と、ファイルが MySQL インスタンスと同じサーバー上にある必要があるという事実に従う必要があります。

于 2009-01-29T17:24:29.460 に答える
0

どのようなエラーが発生しているのかはわかりませんが (調べるために使用mysql_error()します)、最大パケット サイズに達している可能性があります。

この場合、MySQL の構成を変更する必要があります。max_allowed_packet

于 2009-01-29T17:18:49.767 に答える
0

どのようなエラーが発生しているのかはわかりませんが (mysql_error() を使用して確認してください)、最大パケット サイズに達している可能性があります。

この場合、MySQL 構成 max_allowed_pa​​cket を変更する必要があります。

私も同じ問題を抱えています。また、「io モード」ではチャンクごとに mysql データベース チャンクにデータを入力することはできません。

loop for : 
   read $data from file,
   write $data to blob
end loop
close file
close blob

解決策は、 create table data_details ( id int pk auto_increment, chunck_number int not null, dataPart blob ); のようなマルチパート BLOB を持つテーブルを作成するようです。???

于 2015-06-06T16:35:13.450 に答える