Laravel Eloquent объект, длинный текст усекается

Я использую Laravel, загружая строку БД в объект Eloquent. Один из столбцов — это длинный текст, массив в кодировке JSON длиной более 2 миллионов символов. Первоначальной ошибкой, которую я получал, был сбой json_decode в значении этого столбца.

Я проверял в повозке. Упрощенный тестовый код:

$item = Item::find(1);
echo $item->long_text_field;
var_dump(json_decode($item->long_text_field));
echo strlen($item->long_text_field);

На моем локальном экземпляре vagrant это показывает правильные значения.

...long json array in text, same as the value in the actual DB entry...
...var_dump of json array...
2334040

Однако на моем удаленном сервере разработки я получаю

...long json array truncated in the middle...
NULL
1048576

Очевидно, json_decode не работает, потому что строка усекается.

Это усекает на кусок, как это

"Eff Date":"1\”

Который должен быть

"Eff Date":"1\/30\/14 16:13”

В длинном тексте есть много экранированных слэшей, и в этот момент я не вижу странных символов. У кого-нибудь есть идея, почему этот текст будет обрезаться так на одном сервере, а не на другом?

2

Решение

Проблема по умолчанию PDO::MYSQL_ATTR_MAX_BUFFER_SIZE размер 1Mb.

Чтобы установить это в Laravel, вам нужно добавить опцию в ваш конфигурационный файл database.php.

'connections' => [
'mydb' => [
'driver'    => 'mysql',
'host'      => 'localhost',
'database'  => 'mydb',
'options'   => [
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE => 16777216
]
]
]

Выше будет установлен максимальный размер атрибута 16 МБ.

Обратите внимание, что если вы используете драйвер mysqlnd, он вам больше не нужен, и он фактически нарушит ваш код, поскольку константа PDO :: MYSQL_ATTR_MAX_BUFFER_SIZE не существует.

7

Другие решения

Проблема может лежать на этапе json_encoding, прежде чем вы даже получите результаты.

Попробуйте отключить слеш, используя:

$str = "1/30/14 16:13";
echo json_encode($str, JSON_UNESCAPED_SLASHES);

Скорее всего, это является признаком включения magic_quotes_gpc (то есть, возможно, вы используете версию PHP < 5.2);

Из руководства по PHP:

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

If access to the server configuration is unavailable, use of .htaccess is also an option. For example:

php_flag magic_quotes_gpc Off
0

По вопросам рекламы [email protected]