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 回答