首頁 >後端開發 >php教程 >cmd - php文件在命令行可以顺利运行,在浏览器上无法正常运行

cmd - php文件在命令行可以顺利运行,在浏览器上无法正常运行

WBOY
WBOY原創
2016-06-06 20:29:181953瀏覽

首先感谢抽时间阅读!
我尝试通过浏览器登陆本地服务器运行我的PHP文件,无法正常运行。我安装的是Appserver安装包2.6.0版本(Appserver网站),包内包含的软件版本为:Apache 2.2.8PHP 6.0.0-dev。为了找出错误原因,我进行了如下步骤:
1、从命令行运行PHP文件,文件名为julia.php。运行成功。运行过程如下:
php文件代码为:

<code><?php exec(" julia 12.jl");
    echo "finished!";
?>

</code>

命令行运行:
cmd - php文件在命令行可以顺利运行,在浏览器上无法正常运行
同时,php文件中还有一行指令"exec('julia 12.jl')"也执行成功了。这行代码意思是运用julia语言(一种新的编程语言)的REPL环境运行12.jl这个julia文件,12.jl运行成功的话,会在桌面输出一个txt文件。在此处txt文件也成功出现在桌面上了。
但是,当我使用浏览器,从服务器访问julia.php的时候,结果如下:
cmd - php文件在命令行可以顺利运行,在浏览器上无法正常运行
虽然最后一行代码echo "finished!"顺利执行了,但是"exec('julia 12.jl')"并没有执行成功,因为桌面上没有生成txt文件。
2、我百度谷歌了很久看到一个貌似是查看错误的方法,我也不是很清楚是怎么回事,抱着试试看的态度操作了一下:
php文件代码如下:

<code><?php function my_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 
                      ); 
         }
$str = " julia 12.jl";  //此处为我要检测是否执行成功的指令" julia 12.jl"
var_export(my_exec($str)); 
    echo "finished!";
?>

</code>

命令行运行该php文件结果:
cmd - php文件在命令行可以顺利运行,在浏览器上无法正常运行
浏览器访问结果:
cmd - php文件在命令行可以顺利运行,在浏览器上无法正常运行
百度谷歌了其中的

"ERROR:key not found: "HOMEDRIVE"

并没有找到满意的答案。
请问我这是遇到什么问题了?有什么办法能让我顺利执行该文件中的exec(" julia 12.jl")指令么?
另外,我把其中的调用julia软件运行脚本的命令换成调用MATLAB软件的命令后,无论是在命令行还是在浏览器访问的情况下,均成功运行了MATLAB的m文件。我的php.ini文件也关闭了安全模式。
万分期待你的解答,谢谢!

回复内容:

首先感谢抽时间阅读!
我尝试通过浏览器登陆本地服务器运行我的PHP文件,无法正常运行。我安装的是Appserver安装包2.6.0版本(Appserver网站),包内包含的软件版本为:Apache 2.2.8PHP 6.0.0-dev。为了找出错误原因,我进行了如下步骤:
1、从命令行运行PHP文件,文件名为julia.php。运行成功。运行过程如下:
php文件代码为:

<code><?php exec(" julia 12.jl");
    echo "finished!";
?>

</code>

命令行运行:
cmd - php文件在命令行可以顺利运行,在浏览器上无法正常运行
同时,php文件中还有一行指令"exec('julia 12.jl')"也执行成功了。这行代码意思是运用julia语言(一种新的编程语言)的REPL环境运行12.jl这个julia文件,12.jl运行成功的话,会在桌面输出一个txt文件。在此处txt文件也成功出现在桌面上了。
但是,当我使用浏览器,从服务器访问julia.php的时候,结果如下:
cmd - php文件在命令行可以顺利运行,在浏览器上无法正常运行
虽然最后一行代码echo "finished!"顺利执行了,但是"exec('julia 12.jl')"并没有执行成功,因为桌面上没有生成txt文件。
2、我百度谷歌了很久看到一个貌似是查看错误的方法,我也不是很清楚是怎么回事,抱着试试看的态度操作了一下:
php文件代码如下:

<code><?php function my_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 
                      ); 
         }
$str = " julia 12.jl";  //此处为我要检测是否执行成功的指令" julia 12.jl"
var_export(my_exec($str)); 
    echo "finished!";
?>

</code>

命令行运行该php文件结果:
cmd - php文件在命令行可以顺利运行,在浏览器上无法正常运行
浏览器访问结果:
cmd - php文件在命令行可以顺利运行,在浏览器上无法正常运行
百度谷歌了其中的

"ERROR:key not found: "HOMEDRIVE"

并没有找到满意的答案。
请问我这是遇到什么问题了?有什么办法能让我顺利执行该文件中的exec(" julia 12.jl")指令么?
另外,我把其中的调用julia软件运行脚本的命令换成调用MATLAB软件的命令后,无论是在命令行还是在浏览器访问的情况下,均成功运行了MATLAB的m文件。我的php.ini文件也关闭了安全模式。
万分期待你的解答,谢谢!

多次尝试后,问题得以解决
解决方法:增加了两个系统环境变量:HOMEDRIVEHOMEPATH
之前无法解决原因:
1、不清楚Key Not Found的含义,后来尝试才知道,指的是系统的环境变量,而非Apache或者PHP的环境变量,在此感谢xelz的点拨。
2、初次尝试增加HOMEDRIVE系统环境变量,测试后没反应,其实需要重启电脑,windows就这个蛋疼。
3、初次尝试增加HOMEDRIVE系统环境变量,重启电脑后,依然报错,一开始我没注意以为还是缺少HOMEDRIVE系统环境变量,其实这次的错误略有不同,显示的是缺少HOMEPATH系统环境变量。
4、意识到以上错误后,我再次添加HOMEPATH环境变量,重启电脑后,服务器成功运行了PHP文件,成功调用Julia软件运行了jl文件。
十分感谢大家之前的热心回答。

以下答案只是猜的,希望有帮助

julia需要HOMEDRIVE这个环境变量,命令行运行的时候是以你自己的身份运行的
但是运行apache服务器的用户没有设置这个环境变量,因此报错

不懂julia,如果你写文件用到了相对路径,可以尝试改成绝对路径
如果本来就是绝对路径,或者改成绝对路径也不行, 那么尝试在系统环境变量里设置一个HOMEDRIVE

Apache 过滤掉了一些环境变量大概?用 SetEnv 还是什么指令在配置文件里设置一下试试。

浏览器上本来就不能运行php

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn