2012-09-22 164 views
5

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

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。

+0

尝试在shell脚本之前用“bash” - 所以有“bash /www/var/pl/bash.sh” – Robbie

+0

将'$ cmd'改为'/www/var/pl/bash.sh 2> &1'。它仍然不会运行,但可能会给你一些关于它为什么没有的见解。 – LSerni

+1

你看到了什么错误,如果有的话?我假设你的PHP没有在安全模式下运行,并且exec命令没有被禁止? – Basic

回答

0

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

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

5

在终端中运行脚本时,您正在您登录的帐户下执行该脚本。你有一个搜索路径等外壳设置等。

当php执行脚本,它没有一个shell设置,并运行在Web服务器的用户帐户。当执行:

  • 请确保您有完整的路径文件,swipl是不够的,它应该是/path/to/swipl
  • 确保web服务器进程有足够的访问权限来获得它需要的一切。