如何使用php运行shell脚本

时间:2012-08-16 17:13:26

标签: php linux shell background

我有一个php文件

<?php
$op=exec("/usr/bin/sh /home/muralik/www/html/testing/testin.sh >> /home/muralik/www/html/testing/abc.log 2>&1 &",$rs);
echo "OP = ".$op;
echo "<br>RS = <pre>";
print_r($rs);
echo "</pre>"
?>

testin.sh

while(true)
do
echo "standard output"
echo "abc"
sleep 2
done

当我在localhost或web服务器中打开php文件时。 shell脚本没有运行。

我该怎么办?谢谢你。

2 个答案:

答案 0 :(得分:1)

我相信你的脚本正在运行,你只是没有看到输出?

您在exec中运行的命令会将STDOUT和STDERR重定向到abc.log:

/usr/bin/sh /home/muralik/www/html/testing/testin.sh >> /home/muralik/www/html/testing/abc.log 2>&1

因为所有内容都被重定向,所以$ rs中不会有任何结果,$ op将为空,并且执行的命令不会有最后一行。

此外,你的shell脚本将在无限循环中运行,这意味着它永远不会返回任何内容,这意味着exec()永远不会返回,因为它等待执行完成。

答案 1 :(得分:0)

通常(出于安全原因)从浏览器运行的脚本不会运行shell命令。

为了使其正常工作,您需要更改.htaccess文件(这将告诉您的服务器将您的脚本视为应用程序)

在.htaccess中添加以下行:

Options ExecCGI 
AddHandler cgi-script .php

这将允许CGI文件夹中的任何php文件作为应用程序运行