【问题标题】:Execute bash script from PHP with arguments使用参数从 PHP 执行 bash 脚本
【发布时间】:2013-06-17 05:18:23
【问题描述】:

我有一个 PHP 脚本,它将在 Ubuntu 服务器上作为 cron 运行。

我正在尝试从这样的 PHP 脚本执行 bash 脚本:

    exec(escapeshellarg('/bin/bash ') . escapeshellarg("/home/monu/myBash.sh") . escapeshellarg("var1") . escapeshellarg("var2") .escapeshellarg("var3"));

当我以用户 (monu) 的身份在终端中运行“php myPHP.php”时,我会收到如下错误:

    sh: 1: /bin/bash /home/monu/myBash.sh var1 var2 var3: not found

myBash.sh 的内容类似于:

    export CLASSPATH=./:./lib/xp.jar:./lib/ojdbc14.jar:./lib/log4j-1.2.8.jar:./lib/log4j.properties:./lib/log4j.xml

    cd someDir
    ./install.sh $A $B $C $D
    cd ..

当我从命令行手动执行 BASH 脚本时,它按预期工作。

我什至尝试过 system()shell_exec(),但仍然没有成功。

我应该如何从 PHP 脚本调用这个 BASH 脚本以使其工作,有什么提示吗?

【问题讨论】:

  • 那是因为您的 apache/php 用户没有权限访问您的主文件夹。
  • @Jon,我在以用户 (monu) 身份登录时在终端中运行 PHP 脚本以进行调试。所以我猜文件权限不会引起问题。

标签: php bash cron


【解决方案1】:

escapeshellarg() 应该用于每个参数,而不是整个命令。

exec(escapeshellarg('/bin/bash') . ' ' . escapeshellarg("/home/monu/myBash.sh") . ' ' . escapeshellarg(...));

【讨论】:

  • 感谢提醒,我已经更新了代码,但错误仍然存​​在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 2015-08-22
  • 2016-02-18
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多