你直接用system程序,加上第二个参数,然后输出结果,看是什么结果
像楼上所说的,绝对路径最好

解决方案 »

  1.   

    就是:
    <?php
    system("命令",$output);//执行命令,指定返回变量
    echo $output;//输出
    ?>
      

  2.   

    可以使用system,exec不过需要很高的权限才可以。
      

  3.   

    敢问楼主D\cygwin\cygwin.bat
    这个批处理是做什么的 可以作为附件传上来吗
    我也帮你调试一下
      

  4.   

    谢谢大家的热心,一上来就看到这么多回复,虽然没解决问题也高兴:)
    没有使用system或者exec的原因是这个批处理相当于一个交互式应用程序(cygwin是一个win32上模拟linux环境的应用,因此它可以执行make命令),它不会自动结束的,如果用system等会导致页面一直打不开,所以输出结果也一直不会有。我的php里面应该是绝对全路径,实际上php中的代码就是上面贴出的,makefile里面似乎没有必要用绝对全路径,我试验一下。在baidu上搜索了一些system的方法说把如果一个命令执行需要很长时间,可以重定向到一个文件中,但是我试验好像还是会一直打不开文件。也许是我的用法不对。比如我直接这样使用:
    system("D:\cygwin\cygwin.bat > t.5");对于php中的执行命令函数不是很清楚,比如说popen这个函数的返回值是一个管道文件指针,这个指针到底是一个什么类型?哪里可以找到这个类型的更详细说明?我直接echo输入这个变量显示Resource id之类的,我只知道fputs,fgets函数可以使用这个指针,不清楚还有什么其它函数可以对它进行处理,请各位指点一二,比如说哪里可以比较快找到相关文档,我目前在看php5 manual。此外一个小问题,在baidu 看到这样一种用法没有明白意思,请各位解惑一下:$fp = @popen("ls -al","r"); 
    为什么要用@符号?@符号在这里表示什么意思?php的运算符、表达式里似乎没有这个符号。谢谢关注!
      

  5.   

    hqaht:谢谢你的热心,cygwin不是一个单纯的批处理命令,需要下载安装,你可以到以下网站下载安装,这个玩意也比较有用,很多时候你不需要安装vm就可以直接在win32上玩linux。http://www.cygwin.cn/
      

  6.   

    此外有朋友提到安全性问题,这个不是问题,因为我的php以后只在内部使用,而且目前只是我测试用,所以安全可以完全放开,而且我已经可以执行exec等函数。
      

  7.   

    exec('make < log.txt &');一般的MAKE会很长时间 在没有结束之前当然页面会一直打不开 所以只能加个 & 
      

  8.   

    自己解决了这个问题,通过proc_open 并且写入一个log文件查到问题在make时找不到CL.exe,因此确定是环境变量问题,也就是PHP调用Cygwin和手动调用cygwin时的环境变量不同,可能是安全问题。比较奇怪的是在php中设置环境变量也不行,可能是我对环境变量的设置还没有搞清楚,后来直接修改了cygwin所有用户的环境变量绕开了这个问题。
    楼上朋友,加&表示什么意思?这个语法的出处在哪?linux下的shell规则? 
    虽然我解决了这个问题,但是感觉对PHP中调用外部程序方面没有真正理解,希望清楚的朋友继续指点。比如说
    $process = proc_open("D:\cygwin\cygwin.bat", $descriptorspec, $pipes, $cwd, $env);
    fwrite($pipes[0], $path);  
    这样fwrite一次$pipes[0]没有问题,fwrite 两次就不行,页面一直打不开,这是什么原因?