mysql: 16MB daha bir şey rende max_allowed_package ayarlanamaz

4 Cevap php

Ben :-) ... Bu o kadar değilse, bu tür soruların göndermek için doğru yer ise, (kibarca) lütfen bana bildirin emin değilim

Ben bir php sitesinden bir mysql veritabanı üzerinde 16MB daha büyük dosyaları kaydetmek gerekir ...

Zaten c değişti ettik: \ xampp \ mysql \ bin \ my.cnf

ve 16 MB max_allowed_packet ayarlanır, ve her şey iyi çalıştı

sonra 32 MB olarak ayarlayın ama ben 16 MB'dan büyük bir dosyayı işleyebilir yolu yok

Ben şu hatayı alıyorum:

'MySQL sunucu uzağa gitti'

(Max_allowed_packet 1MB kuruldu zaman vardı aynı hata)

Beni 16MB daha büyük dosyaları işlemek için izin vermez diğer bazı ayarı olmalı

belki php istemcisi, sanırım, ama ben nerede düzenlemek için bilmiyorum

Bu koşuyorum kodudur

dosya.txt daha küçük 16.776.192 bayt uzun olduğunda, iyi çalışıyor, ama

dosya.txt 16.777.216 bayt varsa ben yukarıda belirtilen hatayı alıyorum

oh, ve alan download.content bir longblob olduğunu ...



$file = 'file.txt';

$file_handle = fopen( $file, 'r' );

$content = fread( $file_handle, filesize( $file ) );

fclose( $file_handle );

db_execute( 'truncate table download', true );

$sql = 
"insert into download( 
    code, title, name, description, original_name, 
    mime_type, size, content, 
    user_insert_id, date_insert, user_update_id, date_update )
values (
    'new file', 'new file', 'sas.jpg', 'new file', '$file',
    'mime', " . filesize( $file ) . ", '" . addslashes( $content ) . "',
    0, " . db_char_to_sql( now_char(), 'datetime' ) . ", 0, " . db_char_to_sql( now_char(), 'datetime' ) . " )";

db_execute( $sql, true );

(the db_execute funcion just opens the connections and executes the sql stuff) running on windows XP sp2 server version: 5.0.67-community PHP Version 4.4.9 mysql client API version: 3.23.49 using: ApacheFriends XAMPP (Basispaket) version 1.6.8 that comes with + Apache 2.2.9 + MySQL 5.0.67 (Community Server) + PHP 5.2.6 + PHP 4.4.9 + PEAR + phpMyAdmin 2.11.9.2 ... this is part of the content of c:\xampp\mysql\bin\my.cnf
# The MySQL server
[mysqld]
port= 3306
socket= "C:/xampp/mysql/mysql.sock"
basedir="C:/xampp/mysql" 
tmpdir="C:/xampp/tmp" 
datadir="C:/xampp/mysql/data"
skip-locking
key_buffer = 16M
# max_allowed_packet = 1M
max_allowed_packet = 32M
table_cache = 128
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

4 Cevap

PHP ve MySQL ile geçmişte bu konuda rastlamak var.

Benim çözüm parçalar halinde ikili dağıldı ve dizinin üzerinde döngüye unutmayın. Önce o CONCAT deyimini kullanarak satır güncellemek istiyorsunuz, yeni bir satır eklemek istiyorum.

Bu kötü oldu, ama hile yaptı.

Aslında, sonunda, dosyada ikili içeriği saklanan ve veritabanı dosyaya bir işaretçi tuttu. Bu, çok daha etkili oldu.

Bu nedenle max_allowed_packet genişletme kötü bir uygulama sonucudur. Ben dosya depolama için this haber / uygulama okumanızı öneririz. Herhangi bir boyutta dosya saklayabilirsiniz.

Edit: my original answer is incorrect.

Mysql istemci kütüphanesi php versiyonu ne yazdı doğru olduğunu görünmesini yapılan mysql sunucu sürümü daha (anlamlı) eski edilmiştir karşı bağlantılıydı; Ancak şimdi durum değil gibi görünüyor. Ben sunucu tarafı değişken güncelleme doğru mysql istemci kütüphaneleri karşı php yeniden derlemek zaman bütün bu gerekli olduğu.

Başkasının sorunu bulabilirsiniz ve (benim gibi) iyi istemci kütüphaneleri ile ilgili olabilir, çünkü ben burada yanıt bırakacağım. Bu büyük olasılıkla (orijinal soru devletlerin v3 kütüphane ve v4 sunucusu verilen) de asıl soruya cevap.

Koşmak

phpinfo()

ve sürümünü kontrol etmek mysql bölümünde "Client API sürümü" arayın.

-- old answer from here

Sorun bir sunucu değişkeni "max_allowed_packet" varken, istemci bir set de var olmasıdır. Sen kullanarak mysql istemci bu ayarlayabilirsiniz

mysql --max_allowed_packet 

kullanarak veya

set-variable   = max-allowed-packet=64M

my.cnf [client] bölümünde

Ne yazık ki php my.cnf okumuyor ve ya bu istemci tarafı değişkeni ayarlamak için izin vermez. Bu nedenle php kaynak derleme zaman sınırı ile sıkışmış:

ext/mysql/libmysql/net.c:ulong max_allowed_packet=16*1024*1024L;

Değiştirdiğiniz bu sınıra php modülü tekrar derlemeyi eğer bu sorunu çözmek gerektiğini ama diğerleri işaret gibi, gerçekten farklı şeyler yapıyor olmalıdır.

Php.ini dosyasında max alowed yükleme sınırı da vardır. Doğrudan MySQL bağlı değil ama veri göndermek için php kullanıyorsanız, bu sizin sorun olabilir.

; Maximum allowed size for uploaded files.
upload_max_filesize = 16M

; Maximum size of POST data that PHP will accept.
post_max_size = 16M