【问题标题】:Can't run bash script in PHP无法在 PHP 中运行 bash 脚本
【发布时间】:2012-09-14 14:47:14
【问题描述】:

我正在尝试在 PHP 中运行 bash 脚本,但无法运行它。 php -v

PHP 5.3.10-1ubuntu3.2 with Suhosin-Patch (cli) (built: Jun 13 2012 17:19:58)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

Ubuntu 12.04 LTS 64 位。

我的php代码:

    $cmd='/www/var/pl/bash.sh';
    $retval =-1;
    exec( $cmd, $output ); //executing the exec function.
    foreach( $output as $tmp ) 
    { 
        echo "$tmp <br>"; 
    };

bash.sh:

 #!/bin/bash
swipl --quiet -s /var/www/pl/ples.pl -g "f(R, gel), writeln(R),open('/var/www/pl/in.txt',write, Stream),
write(Stream, (R)),
nl(Stream),
close(Stream)" -t halt.

我做错了什么?

我可以在 Linux 终端中运行 bash.sh。

【问题讨论】:

  • 尝试在 shell 脚本前加上“bash” - 所以有“bash /www/var/pl/bash.sh”
  • $cmd 更改为/www/var/pl/bash.sh 2&gt;&amp;1。它仍然无法运行,但可能会让您了解它为什么无法运行。
  • 您看到了什么错误(如果有)?我假设你的 PHP 没有在安全模式下运行,并且 exec 命令没有被特别禁用?

标签: php linux bash swi-prolog


【解决方案1】:

很可能是路径或权限问题;例如,运行 Web 应用程序的用户不知道 swipl 程序在哪里。

exec'ing 之前将 2>&1 添加到命令行,以便它告诉您问题所在。或者您可以在 Web 服务器错误日志(或 PHP 错误日志;检查其路径和 php.ini 中的设置)中找到 stderr 输出。

【讨论】:

    【解决方案2】:

    当您在终端中运行脚本时,您是在您登录的帐户下执行它。你有一个带有搜索路径等的 shell 设置。

    当 php 执行脚本时,它没有设置 shell,而是在 webserver 用户帐户下运行。执行时:

    • 确保你有完整的文件路径,swipl 不够,应该是/path/to/swipl
    • 确保网络服务器进程拥有足够的访问权限来获取所需的一切。

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 2013-01-12
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      相关资源
      最近更新 更多