Это реально? Столкнулся тут с корпоративными масштабами ответов от сервера. С сервера приходит текст размером ~2мб. В БД он не пишется, я получаю ошибку: Код (Text): Got a packet bigger than 'max_allowed_packet' bytes Можно как-то разбить INSERT на курски и записать эту строку циклом? //add Помогла PHP-функция str_split и MySQL-функция CONCAT. Код (PHP): // предварительная запись mysql_query("INSERT INTO `wp_loans_users_ki` SET `text`='', `worker`='$worker', user_id='{$row['id']}', `date`=UTC_TIMESTAMP()"); $error = mysql_error(); if ($error) { echo 'MF-ERROR #7: '.$error; die; } $id = mysql_insert_id(); // кодируем и пишем ответ в БД, ничего не обрезая $return = base64_encode($return); echo $return; // пишем кусками, потому что слишком длинный ответ может не влезть $return_split = str_split($return, 100000); foreach ($return_split as $key => $value) { $value = mysql_real_escape_string($value); mysql_query("UPDATE `wp_loans_users_ki` SET `text`=CONCAT(`text`, '$value') WHERE `id`=$id"); $error = mysql_error(); if ($error) { mysql_query("DELETE FROM `wp_loans_users_ki` WHERE `id`=$id"); // TODO: запись $return в файл echo 'MF-ERROR #7: '.$error; die; } }
Хостинг... Думал, что решил проблему, ан нет. Данные обрываются при записи где-то на 10%. Я пишу в поле типа TEXT кстати, мб это не правильно, надо глянуть что там у него по максимальному значению. Добавлено спустя 51 минуту 51 секунду: Да, в LONGTEXT пишется целиком, но иногда PHP-скрипт обрывается из-за лимита по времени 30 сек.)) Даже не представляю как это можно пофиксить, кроме как сменой хостинга на VDS.
2 мб ответа??? А что сервер тебе возвращает? Может плохой вариант, но все же как костыль, может сохранять ответ в файл а путь хранить в базе? Или поиск по ответам делать надо будет?
Поиск по ответам делать не надо, там приходит XML, но он с крюказябрами. Так что, в файл оно криво сохраняется. Отрезать крюказябры у меня ручки трясутся, можно отрезать лишнего. Поэтому пишу в БД оригинальный ответ сервера, а отрезаю уже при выводе.
Эммм... какая разница куда ты сохранишь, в файл или базу? В базе без кракозябр? Может кракозябры потому что кодировка не та???
Хз почему, но файл потом открывается в нечитаемом виде. Может потому что там адовый набор кодировок. А запись в файл разве даст какие-то преимущества? Я же так в post_max_size какой-нибудь упрусь всё-равно.
Сделай читаемым. Ты же из базы когда берешь потом отображаешь нормально. А тебе часто требуется отображать ответ? А так размер базы будет расти. Селекты быстро работают? Дефолтное значение 8мб.
Постоянно, по многу раз и в несколько потоков. Эти XML это кредитная история заёмщиков, она должна выводиться при открытии их профилей. И вот сидят десятка два сотрудников и постоянно сёрфят эти профили. З.Ы. По поводу php.ini, мне техподдержка хостинга говорит, что я могу менять опции в .htaccess, они это не залочили. Мне этого будет достаточно, как считаете? Код (PHP): php_value upload_max_filesize 128M php_value post_max_size 256M php_value memory_limit 256M php_value max_execution_time 120