PHP exec()和system()函数在IIS中始终返回false

时间:2010-04-02 11:23:36

标签: php windows iis system exec

我正在尝试使用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 =

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

3 个答案:

答案 0 :(得分:1)

要获取返回值,需要传递系统函数的第二个参数。

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

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

答案 1 :(得分:1)

在Windows和PHP上工作时,某些命令(包括php.exe和其他Windows命令(例如ping))不能正确地将其返回值输出到dir二进制文件中。例如,尝试使shell_exec()用PHP dir c:\函数产生输出将始终导致“ false”。如果您尝试给它一个像NULL这样的值,它将导致:FALSEscandir()相似,因为它没有任何用处。唯一的解决方法是使用内置在dir中的php并通过PHP手动制作自己的{{1}}版本。

答案 2 :(得分:0)

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

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