我是 php 的初学者并且遇到了一些问题:
我有一个具有函数create_dump()的php 文件,我在其中使用pg_dump命令转储我的postgresql 数据库。现在,在从 linux 终端执行 php 文件时,它会在终端上询问postgresql 密码。如果用户无意中为数据库提供了错误的密码,我想在我的 php 文件中添加错误处理。
换句话说:
如何从我的 php 文件中捕获pg_dump(postgresql 命令)执行错误?
谢谢 !
我是 php 的初学者并且遇到了一些问题:
我有一个具有函数create_dump()的php 文件,我在其中使用pg_dump命令转储我的postgresql 数据库。现在,在从 linux 终端执行 php 文件时,它会在终端上询问postgresql 密码。如果用户无意中为数据库提供了错误的密码,我想在我的 php 文件中添加错误处理。
换句话说:
如何从我的 php 文件中捕获pg_dump(postgresql 命令)执行错误?
谢谢 !
根据您提供的信息,我有一个解决方法来解决您想要做的事情。首先,您需要使用 --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");
希望这或多或少是您想要的。