我正在尝试使用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 =
有没有人有任何进一步的建议或我可以尝试的其他任何事情?
答案 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
这样的值,它将导致:FALSE
与scandir()
相似,因为它没有任何用处。唯一的解决方法是使用内置在dir
中的php并通过PHP手动制作自己的{{1}}版本。
答案 2 :(得分:0)
这里,如果这不起作用,那么exec可能在php.ini中被禁用,这意味着你将不得不改变你的PHP配置
<?php
exec('dir', $response);
foreach($response as $line) {
echo $line . "<br>";
}
?>