2012-10-19 2 views
1

테스트 환경 클래스의 소멸자에서 테스트 데이터베이스를 삭제하려고합니다. 이 코드를 일반적인 방법으로 실행하면 문제가 없습니다.소멸자에서 PHP 프로세스를 호출하여 PDO :: exec() 호출

소멸자에 넣어 (또는 register_shutdown_function 사용) 잘 작동하지만 내 PHP 프로세스가 끝나지 않게합니다. xdebug가 코드를 조사하면 그 코드는 echo 'finished';에 도달하지 않습니다.

이것이 PHP 프로세스가 멈추는 원인이되는 아이디어가 있습니까?

public function __destruct() 
{ 
    $config = $this->getConfiguration(); 
    if ($config['dbtests']['autogenerate'] && $config['dbtests']['cleanup']) { 
     /** @var \PDO $dbh */ 
     $dbh = new \PDO('mysql:host=' . $config['database']['host'], $config['database']['user'], $config['database']['password']); 
     $dbh->exec('DROP DATABASE ' . $config['database']['dbname']); 
     echo 'finished'; 
    } 
} 

답변

1

언급 한 바와 같이이 코드는 테스트 환경 클래스의 코드입니다. 이것은 교리 실체를 테스트하는 데 사용됩니다.

이 db에 대한 다른 연결을 열기 전에 EntityManager 교리의 db 연결을 mannualy 닫아야한다는 것을 알았습니다. 이것은 EntitiyManager의 연결이 가리키는 db를 삭제하기 때문일 수 있습니다.

__destruct 또는 register_shutdown_function으로 문제가 해결되지 않았습니다. 나는 일반 사용자 코드로 문제를 재현하고 마침내 해결할 수있었습니다.