왜 교리 대상이 내 아파치를 죽이는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/216409

  •  03-07-2019
  •  | 
  •  

문제

나는 매우 이상한 문제가 있습니다. var_dump (또는 print_r) 교리 대상, 빈 빈 페이지 (200 OK 헤더)로 Apache가 응답합니다. 저 할 수 있어요 var_dump 정상적인 PHP var와 같은 :

$dummy = array("a" => 1, "b" =>2);

그리고 그것은 잘 작동합니다. 그러나 나는 어떤 교리 수업의 어떤 대상도 할 수 없습니다 (결과와 같이 $connection->query(), 또는 교리를 가진 내 객체 모델의 클래스 인스턴스).

왜 이런 일이 일어나는지 아는 사람이 있습니까?

도움이 되었습니까?

해결책

나는 때때로 그것을 시도했을 때 그것을 가졌다 print_r() 자체 참조 객체 - 루프에 들어가 메모리가 부족합니다. 아마도 그게 당신에게 일어나는 일입니다.

메모리 제한을 늘리십시오 (ini_set('memory_limit', '256M');) 그리고 그것이 그것을 고치는 지 확인하십시오.

편집 : 나는 이것에 대한 실제 수정이 있다고 생각하지 않습니다 - 그것은 PHP의 내부입니다. var_dump / print_r 그것은 재귀 깊이를 제한하지 않습니다 (또는 적어도 제대로하지 마십시오). 설치 한 경우 xdebug 확장, 이것은 내장을 대체 할 수 있습니다 var_dump 재귀를 훨씬 더 잘 처리하는 버전으로.

다른 팁

게으른 부하 프록시에는 항상 교리의 엔티티 관리자 인스턴스와 모든 종속성이 포함되어 있습니다.

따라서 a var_dump 렌더링하고 읽을 수없는 매우 큰 재귀 구조를 버릴 것입니다. 당신은 사용해야합니다 \Doctrine\Common\Util\Debug::dump() 덤핑을 인간 읽기 가능한 수준으로 제한합니다. 이 함수의 기본 깊이는 2로 설정됩니다 (두 번째 매개 변수).

사용 toArray 방법의 방법 Doctrine_Record 수업

var_dump($doctrine_record->toArray());

DB 필드 만 표시하고 완전한 교리 내부를 버리지 않으면 (자기 참조/재귀 포함 BTW)

객체가 doctrine_collection의 인스턴스인지 확인하는 경우 ToArray를 사용할 수 있습니다. Xdebug는 교리 기록에 도움이되지 않습니다.

내가 제안하는 방법은 객체를 인쇄하기 위해 사용자 정의 재귀 함수를 구현하는 것입니다.

function var_dump_improved()
{
   foreach (func_get_args() as $arg) {
       if ($args instanceof Doctrine_Collection) {
          print_r($arg);
       } else if ( $arg instanceof Traversable || is_array($arg) ) {
          // do a foreach and recall var_dump_improved on subelements
       } else if (...) {
          // other types
       } 
   }   
}

Max Nesting 레벨로 디버그하는 재귀 기능은 여기에 있습니다.

http://php.net/manual/en/function.var-dump.php

댓글을보고 "재귀"를 찾으십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top