0

私はPHPの初心者で、次のような問題があります。

関数create_dump()を持つphpファイルがあり、 pg_dumpコマンドを使用してpostgresqlデータベースをダンプしています。Linuxターミナルからphpファイルを実行している間、ターミナルでpostgresqlパスワードを要求します。ユーザーが意図せずにデータベースに間違ったパスワードを入力した場合、phpファイルにエラー処理を追加したいと思います。


言い換えれば:私のphpファイルからpg_dump(postgresqlコマンド)実行エラー
をキャッチする方法は? ありがとう !

4

1 に答える 1

0

あなたが提供した情報に基づいて、私はあなたがやりたいことの回避策を持っています。まず、「>」を使用してダンプの出力をパイプする代わりに、同じジョブを実行する代わりに--file=some_file.sqlフラグを使用する必要があります。

さて、stderrをstdoutに送信しても、passthru呼び出しからの$ outputが出力をキャプチャするようには見えないので、これが機能します。--file =フラグを使用してコマンドを変更し、コマンドの出力(エラーを含む)をログファイルにパイプします。また、stderrをstdoutに送信します(コマンドの後に2>&1を実行します)。エラーをキャプチャします。

コードは次のとおりです。

// notice the file= flag and the piping of error to the file
$command=
    "/usr/bin/pg_dump --a --no-owner --no-acl --attribute-inserts ".
    "--disable-dollar-quoting --no-tablespaces ".
    "--file={$path['schema_path']}schema-{$latest_update}.sql ".
    "--host={$db['hostname']} --user={$db['username']} ".
    "--password --port={$db['port']} {$db['database']} > pg_dump_error.log 2>&1"; 

// no output to capture so no need to store it
passthru($command);

// read the file, if empty all's well
$error = file_get_contents('pg_dump_error.log');
if(trim($error) != '')
    exit("PG_DUMP ERRROR:\n-----\n$error\n");

これが多かれ少なかれあなたが探していたものであることを願っています。

于 2012-05-24T14:53:27.007 に答える