【问题标题】:PHP exec() and system() functions always return false in IISPHP exec() 和 system() 函数在 IIS 中总是返回 false
【发布时间】:2010-04-02 11:23:35
【问题描述】:

我正在尝试使用 PHP exec() 或 system()(或任何其他类似函数)来运行批处理文件,但我似乎无法让它们返回任何内容。

我见过的最简单的例子是这个,它什么也不输出:

<?php
    echo system('dir');
?>

该脚本在安装了 PHP 的 IIS 上的 windows XP 机器上运行,我还在运行 windows 2003 服务器/IIS 的共享主机帐户上尝试过它。

任何人都可以建议我需要做什么才能使其正常工作,或者提供我可以用于故障排除的任何命令吗?

干杯,

汤姆

编辑:第二个例子

根据 pavun_cool 的回答,我尝试了以下方法:

<?php
    $last_line = system('dir', $retval);
    echo 'last_line '.$last_line.'<br/> retval '.$retval;
?>

输出是:

last_line
retval -1

编辑:第三个例子

基于 Manos Dilaverakis 我尝试了以下代码

<?php
exec('dir', $response);
foreach($response as $line) {
    echo $line . "<br>";
}
?>

输出是:

<br>

即在浏览器中显示时为空行。

同样查看php.ini,以下行(可能会禁用这些功能)为空:

disable_functions =

有没有人有任何进一步的建议或其他我可以尝试的方法?

【问题讨论】:

  • ...PHP 的关于 exec 和 system 的手册页回答了这个问题。你甚至不需要向下滚动
  • @Manos Dilaverakis - 你能说得更具体一点吗? exec 函数的文本声明“返回值:命令结果的最后一行”。 - 所以我不应该看到我运行的最后一行输出吗?

标签: php windows iis system exec


【解决方案1】:

为了获得返回值,您需要传递系统函数的第二个参数。

$last_line = system('ls', $retval);

这里$retval会有ls执行的返回值。

【讨论】:

  • 我试过这个并将它添加到我上面的问题中 - $retval 是 -1 而不是我期望的输出。
【解决方案2】:

在使用 windows 和 PHP 时,一些命令(包括 dir 和其他 windows 命令,如 ping)不能正确地将它们的返回值输出到 php.exe 二进制文件。例如,尝试使用 PHP shell_exec() 函数让 dir 产生输出将始终导致“假”。如果你试图给它一个像dir c:\ 这样的值,它将导致:NULL 类似于FALSE,因为它没有提供任何有用的东西。唯一的解决方法是使用 php 内置的 scandir() 并使用 PHP 手动制作您自己的 dir 版本。

【讨论】:

    【解决方案3】:

    这里,如果这不起作用,那么 exec 可能在 php.ini 中被禁用,这意味着你必须更改你的 PHP 配置

    <?php
    exec('dir', $response);
    foreach($response as $line) {
        echo $line . "<br>";
    }
    ?>
    

    【讨论】:

    • 我刚试过这个,输出很简单
      而且php.ini中似乎没有禁用任何功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多