test.php如下:
$cmd = 'javac Test.java';
exec($cmd,$output,$a);
test.php同级有个test.java文件:
用命令行方式,php test.php执行php可以编译成功
这些文件丢到apache下用浏览器访问test.php无法执行exec这个方法,没有编译成功,这是什么原因,有什么解决办法吗?
test.php如下:
$cmd = 'javac Test.java';
exec($cmd,$output,$a);
test.php同级有个test.java文件:
用命令行方式,php test.php执行php可以编译成功
这些文件丢到apache下用浏览器访问test.php无法执行exec这个方法,没有编译成功,这是什么原因,有什么解决办法吗?
基本靠猜。
给你一段代码,把控制台输出结果echo出来,看看什么问题
<?php
//返回所有错误信息
error_reporting(E_ALL);
// 由于调用其他命令时间比较长,所以需要将最大超时时间进行修改
ini_set("max_execution_time", "3600");
function cmd_exec($cmd, $input='')
{
// 打开一个进程,并返回三个管道
$proc=proc_open($cmd, array(0=>array('pipe', 'r'),
1=>array('pipe', 'w'),
2=>array('pipe', 'w')),
$pipes);
fwrite($pipes[0], $input); fclose($pipes[0]);
$stdout=stream_get_contents($pipes[1]); fclose($pipes[1]);
$stderr=stream_get_contents($pipes[2]); fclose($pipes[2]);
$rtn=proc_close($proc);
return array( 'stdout'=>$stdout,
'stderr'=>$stderr,
'return'=>$rtn );
}
$url=$_GET['url'];
$type=$_GET['type'];
$selector=$_GET['selector'];
// 调用示例,在这个示例中,直接将参数放在了命令行,没有使用函数给的参数
$need_run_file = "curl -k -s \"$url\" | D:\\tools\\cmd\\pup.exe \"$selector $type{}\"";
// 返回执行结果信息
echo(cmd_exec($need_run_file)['stdout']);
// 返回执行错误信息
// echo(cmd_exec($need_run_file)['stderr']);
flush();
2 回答2.4k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
1 回答1.5k 阅读✓ 已解决
1 回答819 阅读✓ 已解决
895 阅读
1 回答655 阅读
1 回答649 阅读
命令模式下,你应该是以root去运行的。apache下用浏览器访问,应该没有执行脚本的权限