1

テスト環境クラスのデストラクタで、テスト データベースを削除します。このコードを通常の方法で実行すると問題なく動作します。

それをデストラクタに入れる(または使用する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';
    }
}
4

1 に答える 1

1

前述のように、このコードは私のテスト環境クラスからのものです。これは、ドクトリン エンティティをテストするために使用されます。

EntityManagerこのデータベースへの別の接続を開く前に、ドクトリンのデータベース接続を手動で閉じる必要があることがわかりました。これは、接続EntitiyManagerが指しているデータベースを削除しているためと考えられます。

問題は、__destructまたはには当てはまりませんregister_shutdown_function。通常のユーザーコードで問題を再現し、最終的に修正することができました。

于 2012-10-19T08:36:02.967 に答える