【发布时间】:2014-12-11 13:31:54
【问题描述】:
我有一个这样的 shell 脚本(在 /usr/local/bin/esm-script/import-master.php 中):
#! /bin/bash
echo "this is the file name $1."
script -c 'PGPASSWORD="pwd123" /usr/bin/psql --host localhost --port 5432 --username "postgres" --no-password --quiet "dbESM" < "$1"' /dev/null
现在我通过这样的 PHP 脚本调用它:
$NewFile = "/var/www/...master-data.sql"; //full path
$strImport = '/usr/local/bin/esm-script/import-master.sh ' . $NewFile;
$strMsg = shell_exec($strImport);
echo "$strMsg<br />";
echo 'done!';
但是,当我运行 PHP 代码时,这是我在浏览器上收到的消息:
this is the file name /var/www/ESM-Backend/uploads/master-data.sql. Script started, file is /dev/null Script done, file is /dev/null sh: 1: cannot open : No such file Script started, file is /dev/null
done!
我不是 shell 脚本编写人员,所以我不知道我是否遗漏了什么。
我已经检查了带有 sql 文件的文件夹具有正确的权限 (775) 并且有数据(插入语句)。
那么为什么这不起作用?任何想法和指导方针都非常感谢。
编辑 我将文件硬编码在 shell 脚本文件中,如下所示:
script -c 'PGPASSWORD="#UR!23" /usr/bin/psql --host localhost --port 5432 --username "postgres" --no-password --quiet "dbESM" < "/var/www/ESM-Backend/uploads/master-data.sql"' /dev/null
而且它有效。但我需要它与通过 PHP 传递的文件一起运行。
【问题讨论】:
-
你想用这些脚本做什么?据我了解,我认为您想从使用 php 脚本中定义的路径定义的文件中导入 SQL,您能告诉我为什么要将 php 文件传递给您的 postgresql 命令吗?
-
我没有将 PHP 文件传递给 postgres。相反,我将 SQL 数据文件的名称传递给脚本。这个想法是使用它并将数据插入到 postgresql 数据库中。
-
那么,为什么 $NewFile = "/var/www/...master-data.php" ?
-
谢谢阿纳斯 - 这是一个错字。
标签: php shell postgresql-9.1