Бьюсь второй день над следующей задачей:
есть база данных адресов типа "область", "город", "улица", "дом" и т.д.
необходимо сделать механизм добавления комментариев, к которым будет привязан список адресов, причём к комментарию может быть привязан любой уровень, например:
Соответственно, при передачи комментария с кучей привязанных адресов я имею огромный $_POST
, который просто рубится.
Пробовал протащить через $_COOKIE
— результат тот же.
Рассматриваю в качестве варианта разделение запросов на куски — по одному на адрес и передача таковых аяксом...
Единственной ли это вариант или можно сделать более красиво?
UP: извиняюсь, ввёл в заблуждение, апач выдаёт ошибку 414, не заметил сразу её в логах в конце запроса.
post_max_size 64M
upload_max_filesize 32M
memory_limit 128M...
причём размер пришедших данных постоянно разный! Что за бред такой? Может, дело в Phalcon`е, который установлен?
Проблема решается через php.ini
свойства:
post_max_size
- Общий размер POST
запроса по умолчанию 8Мб
upload_max_filesize
- размер файла который можно загрузить на сервер через POST
.
Очень важно что бы значения были:
memory_limit > post_max_size > upload_max_filesize
Так же, не збываем, что бы скрипту хватило времени "пережевать" данные max_execution_time
http://php.net/manual/en/info.configuration.php
UPD
1) Если верить этим двум ссылкам то похоже данные приходят через GET. Попробуйте посмотреть в apache access.log URL запросов.
http://stackoverflow.com/questions/2891574/how-do-i-resolve-a-http-414-request-uri-too-long-error
https://docs.phalconphp.com/en/latest/reference/apache.html
2) Можете попробовать получить тело запроса напрямую через:
$data = file_get_contents('php://input');
parse_str($data, $result)
var_dump($result);
и посмотреть всё ли пришло.
3) Ну и apache тоже умеет "обрезать" POST запросы посмотрите:
http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestbody
У меня было подобная проблема но в другой задаче. Нужно было синхронизировать таблицы базы данных. В конечно счёте сделали так. Массив с данными делили на куски и отправляли в цикле . Вот пример кода.
$recordChunks = array_chunk($rd[0]['RECORDS'], 7000);
foreach ($recordChunks as $chunk) {
$rd[0]['RECORDS'] = $chunk;
$request = array(
'TOKEN' => $this->getContainer()->getParameter('cdb_token'),
'DATA' => json_encode(array(
"DB_VERSION" => $dbVersion,
"DATA" => $rd,
)),
);
$size += strlen($request['DATA']);
//отправка данных на ЦБД
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->getContainer()->getParameter('https_cdb_from'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CAINFO, $this->getContainer()->get('kernel')->getRootDir() . '/адрес.pem');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
// получить json ответ
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response);
if (($data->STATUS != 1) || (is_null($data))) {
var_dump($table, count($chunk),$rd);
$this->em->getFilters()->enable('softdeleteable');
throw new \Exception('Ошибка на ЦБД');
}
unset($request);
}
unset($rd);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Мне нужно в логах красиво, С ОТСТУПАМИ выводить многомерные массивыПока у меня есть функция для вывода без отступов:
Есть ajax форма на которую переходят по ссылке с видео (жалоба), ссылка вида: http://sitecom/abuse/index