php exec方法调用命令问题

test.php如下:

$cmd = 'javac Test.java';
exec($cmd,$output,$a);

test.php同级有个test.java文件:

clipboard.png

用命令行方式,php test.php执行php可以编译成功
这些文件丢到apache下用浏览器访问test.php无法执行exec这个方法,没有编译成功,这是什么原因,有什么解决办法吗?

阅读 2.5k
2 个回答

命令模式下,你应该是以root去运行的。apache下用浏览器访问,应该没有执行脚本的权限

基本靠猜。
给你一段代码,把控制台输出结果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();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题