PHP无法启动外部程序

PHP启动matlab执行m文件遇到的问题。

系统:Windows 10

开发环境:WampServer 3.2.3(Apache 2.4.46,PHP 7.3.21)

Matlab:2020(安装路径:C:\Program Files\Polyspace\R2020a\bin\matlab)

我想在PHP中运行MATLAB的m文件result.m,m文件的路径为:C:\matlab_files\myfolder1

我在Windows Command Prompt(cmd)中尝试试执行

matlab -sd C:\matlab_files\myfolder1 -noFigureWindows -nosplash -nojvm -wait -r "results;exit"

是没有问题的。

第一步我学习了如何从PHP执行系统命令的exec,有人说执行之前需要关闭安全模式,但是我用怎么查看PHP配置文件php.ini在哪-百度经验 (baidu.com)方法找到php.ini,却没有找到safe_mode,尝试执行了PHP中执行cmd命令的方法_php技巧_脚本之家 (jb51.net)文中说的例子也成功了:

<?php
exec("mkdir d:\\test",$out);
print_r($out);
?>

最后我就开始试验我的我的PHP代码,我的PHP文件名为1.php,但是在浏览器中输入127.0.0.1/1后没有任何反应。PHP代码如下:

<?php
#不打开matab执行result
exec("matlab -sd C:\\matlab_files\\myfolder1 -noFigureWindows -nosplash -nojvm -wait -r "results;exit"");
?>

按照网上的说法查找是否PHP禁用了调用外部命令,结果是PHP默认是不禁止的,我也系统亦是如此。

 

我担心您没有matlab软件,我们先从大家都有的软件开始试验,我在cmd中输入

"C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE"

就启动了Word,我建立如下PHP文件,但是执行后浏览器空白,没有任何反应。

<html>

<body>

<?php

system("C:\\Program Files\\Microsoft Office\\root\\Office16\\WINWORD.EXE");

?>

</body>

</html>

 

参考如下: system中的文件路径必须用双斜杠,单斜杠是转义字符。

1 <html>
2 <body>
3 <?php
4 system("F:\\www\\test.exe", $info);
5 echo $info;
6 ?>
7 </body>
8 </html>

 

要看一下 exec 返回的是什么,然后根据返回内容做文章。

修改一下,原来的

<?php
exec("matlab -sd C:\\matlab_files\\myfolder1 -noFigureWindows -nosplash -nojvm -wait -r "results;exit"");

修改为

<?php
$command = 'matlab -sd C:\\matlab_files\\myfolder1 -noFigureWindows -nosplash -nojvm -wait -r "results;exit"';
exec($command, $out, $status);
if ($status == 0) {
    echo 'exec success';
} else {
    echo 'exec fail';
}
var_dump($out);

 

我将代码改为

<?php
#不打开matab执行result
exec("matlab -sd C:\\matlab_files\\myfolder1 -noFigureWindows -nosplash -nojvm -wait -r "results;exit"",$out,$status);
var_dump($out); 
?>

错误提示是这样的:

 

如果将代码简化

<?php
  exec("C:\\Program Files\\Polyspace\\R2020a\\bin\\matlab.exe", $out, $status);
  echo var_dump($out);
?>

就是有返回值的

C:\wamp64\www\2.php:3:
<strong>array</strong> (size=0)
  empty
array (size=0)
  empty

passthru("cd /d C:\Program Files\Polyspace\R2020a\bin&&matlab -sd C:\matlab_files\myfolder1 -noFigureWindows -nosplash -nojvm -wait -r");

passthru("cd /d C:\Program Files\Polyspace\R2020a\bin\win64&&MATLAB.exe -sd C:\matlab_files\myfolder1 -noFigureWindows -nosplash -nojvm -wait -r");