Я загружаю файлы в MySql DB через PHP. Я могу загружать файлы размером до 1 Мбайт (обнаружены пробной версией и ошибкой). Файлы размером более 1 МБ не загружаются. Ошибка MySql, напечатанная функцией mysql_error () в PHP: сервер MySQL ушел
Может ли кто-нибудь помочь мне в этом? Сервер MySql запущен и работает только для запросов> 1 МБ, он дает эту ошибку.
С уважением, Майанк.
PS: Я использую форму для загрузки файла. <FORM METHOD="post" ACTION="fileUpload.php" ENCTYPE="multipart/form-data"> <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="300000000"> <INPUT TYPE="hidden" NAME="action" VALUE="upload"> Description: <TEXTAREA NAME="txtDescription" ROWS="1" COLS="80"></TEXTAREA> <INPUT TYPE="file" NAME="binFile" ID="binFile"> <INPUT TYPE="submit" NAME="Upload" VALUE="Upload"> </FORM>
Ваш SQL-запрос, вероятно, превышает размер max_allowed_packet, и в этом случае сервер отключится.
Вас может заинтересовать mysqli_stmt :: send_long_data, который позволяет отправлять параметры дольше, чем max_allowed_packet в кусках.
Обновление: «Как я могу его изменить? Является ли использование mysqli единственным вариантом?»
Afaik значение не может быть изменено для каждой сессии, т. Е. Если вы не можете изменить конфигурацию сервера (my.cnf или параметры запуска), значение будет доступно только для чтения. edit: Как говорится в комментарии, вы можете изменить глобальное значение сервера mysql после его запуска, если у вас есть соответствующие разрешения . PDO / PDO_MYSQL (как и phpversion 5.3.0), похоже, не поддерживает send_long_data, но я не уверен в этом. Это оставило бы mysqli единственным вариантом. Недавно я заметил, что Wez Furlong присоединился к переполнению стека. Поскольку он является одним из авторов реализации PDO, он может знать (хотя он не написал модуль pdo_ mysql ).
(Полностью непроверенный и уродливый) пример
// $mysqli = new mysqli(.... $fp = fopen($_FILES['binFile']['tmp_name'], 'rb') or die('!fopen'); //$result = $mysqli->query('SELECT @@max_allowed_packet') or die($mysqli->error); //$chunkSize = $result->fetch_all(); //$chunkSize = $maxsize[0][0]; $chunkSize = 262144; // 256k chunks $stmt = $mysqli->prepare('INSERT INTO foo (desc, bindata) VALUES (?,?)') or die($mysqli->error); // silently truncate the description to 8k $desc = 8192 < strlen($_POST['txtDescription']) ? $_POST['txtDescription'] : substr($_POST['txtDescription'], 0, 8192); $stmt->bind_param('sb', $desc, null); while(!feof($fp)) { $chunk = fread($fp, $chunkSize); $stmt->send_long_data(1, $chunk) or die('!send_long_data.'.$stmt->error); } $result = $stmt->execute();
Чтобы загрузить большие файлы на ваш сервер с помощью PHP, вам нужно изменить 2 параметра в файле php.ini.
; Maximum allowed size for uploaded files. upload_max_filesize = 50M ; Maximum size of POST data that PHP will accept. post_max_size = 50M
50 М = 50 Мб
Try these different settings in C:\wamp\bin\apache\apache2.2.8\bin\php.ini Find: post_max_size = 8M upload_max_filesize = 2M max_execution_time = 30 max_input_time = 60 memory_limit = 8M Change to: post_max_size = 750M upload_max_filesize = 750M max_execution_time = 5000 max_input_time = 5000 memory_limit = 1000M Then restart wamp to take effect Have fun,