2014-10-03 3 views
2

나는 Eloquent 개체에 DB 행을로드하는 Laravel을 사용했습니다. 하나의 열은 2 백만자를 넘는 JSON 인코딩 배열 longtext입니다. 원래 얻은 오류는 json_decode가이 열의 값에 실패했습니다.Laravel Eloquent 개체, 긴 텍스트가 잘리는 중

나는 팅커로 시험을 보았다. 단순화 된 테스트 코드 :

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

해당 지역의 방랑제 인스턴스에서 올바른 값을 보여줍니다.

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

그러나 내 원격 dev에 서버에 나는 분명히
...long json array truncated in the middle... 
NULL 
1048576 

받고 있어요 문자열이 잘린 때문에 json_decode는 실패합니다.

이 있어야한다이

"Eff Date":"1\” 

같은 조각을 잘라 내가 볼 수있는 그 시점에서 LONGTEXT에서 같은 탈출 슬래시, 그리고 어떤 이상한 문자가 많이있다

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

. 누구나 왜이 텍스트가 한 서버 에서처럼 잘리는 지 아이디어가 있습니까?

답변

7

문제는 기본 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 
     ] 
    ] 
] 

위의 값은 최대 속성 크기를 16Mb로 설정합니다.

mysqlnd 드라이버를 사용하는 경우에는 더 이상 필요하지 않으며 실제로 PDO :: MYSQL_ATTR_MAX_BUFFER_SIZE 상수가 존재하지 않으므로 코드가 중단됩니다.

+0

정답에 너무 늦었습니다. 감사합니다 이안! – wakeman

+1

오류가 발생했습니다. '치명적인 오류 : 정의되지 않은 클래스 상수'MYSQL_ATTR_MAX_BUFFER_SIZE ''은 (는) mysqlnd를 사용하고있는 것처럼 보이지만 텍스트는 여전히 잘립니다. 왜? – leetom

+0

흠. 이상합니다. 저장하려는 데이터의 양과 잘라내는 길이는 어느 정도입니까? 또한 MySQL에서 어떤 필드 유형을 사용하고 있습니까? –

0

문제는 심지어 결과를 검색하기 전에 json_encoding 단계에있을 수 있습니다. 앞으로 사용하지

봅니다으로 탈출 슬래시

대부분의 아마
$str = "1/30/14 16:13"; 
echo json_encode($str, JSON_UNESCAPED_SLASHES); 

, 이것은 (당신이 PHP 버전 < 5.2을 사용하고있을 수 있습니다 의미) magic_quotes_gpc의 활성화 갖는 증상이다; 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 
+1

시도해 보았습니다. 여전히 텍스트가 잘립니다. 내 로컬 서버와 개발 서버 모두 PHP 5.5를 사용하고 있으므로 문제는 아닌 것 같습니다. – wakeman