有一个ASP.NET与PHP编写的网站运行在IIS8.5的服务器上,我想让PHP去调用一个MATLAB编写的exe可执行文件,这个程序的大致功能是分析用户绘制的一张png图片再返回一个特征值到txt文件中。此PHP在Windows 10的虚拟机中(XAMPP环境)是可以使用exec(‘in.exe’);这条语句执行in.exe的,但在实际的Windows Server 2012 R2服务器中却会卡在in.exe进程中,只有手动停止这个进程PHP才会继续运行。一开始以为是路径问题因此做了以下尝试。
exec('in.exe'); //passthru("in.exe"); //exec("C://myweb//3DModel//WebSite//images//in.exe \c"); //exec('start C:WindowsSystem32calc.exe'); //$c='in.exe'; //$c='"C://myweb//3DModel//WebSite//images//in.exe"'; //$ss=system($c,$msg); //var_dump($msg); //$a = exec("cd C:\mywebDModel\WebSite\images", $out, $status); //print_r($a); //print_r($out); //print_r($status); //$a = exec("in.exe", $out, $status); //print_r($a); //print_r($out); //print_r($status); //exec("in.exe",$info); //echo $inFileName;
后来在网上查找了相关解决方法,首先确保应用程序是使用Administrator这样有权限的用户连接的
由于使用的是PHP7.1版本,因此不存在safe_mode的设置,exec()等函数也没有默认被禁用的说法
在IIS的处理程序映射中,赋予exe权限
然后我发现IIS的处理程序映射右上方有个警告,大概意思是网站应用程序托管管道模式设置为经典的无法使用此设置,于是将应用程序托管管道模式改为集成
至此访问php页面时即正常调用了exe程序,虽然运行很慢,而且在服务器端看不到MATLAB编译的exe的打开界面