【web】PHP网页调用Matlab代码的实现以及一些需要注意的bug~

目的:在一个PHP网页中调用matlab代码实现一些功能,比如处理数据,或者画图~

平台: linux+apache+php的服务器

实现: 正常情况下,我们在Linux客户端运行matlab代码时候 一般都是在terminal执行 

$ matlab -nodesktop -nosplash -nodisplay -r "draw" (draw.m 这里假设是用来产生一个eps的图)

draw.m:

file=importdata('file.txt');
plot(file(:,1),file(:,2));
print('-deps2','-r300','figure.eps');
quit


我们在linux的环境下的中的某个用户demo_user,只要对MATLAB有执行权限(755)的话,是肯定能够执行的,并产生相应的figure.eps文件;

但是,如果你从网页端来访问并执行这样的代码的话可能会遇到的问题:

<?php
$command="matlab -nodesktop -nosplash -nodisplay -r \"draw\"";
system($command);
?>

第一: 执行上述代码的话,你会发现这句命令根本没有执行, $out= system($command, $val),$ val是反应有没有执行成功的,0是成功,1是失败;

那么怎么办呢? 

首先就是要检查 php的配置是否支持调用外部命令,没开启的话,开启一下,这个网上有很多教程教如何开启php支持调用外部命令功能;

然后就是要来看为什么执行不了matlab程序, 将$command改为

$command="matlab -nodesktop -nosplash -nodisplay -logfile log.txt -r \"draw\" 1>out.txt 2>error.log"; 

来看到底出了什么错误导致php调用matlab失败的?

打开log.txt, 如果,matlab被启动的话,会有一些警告,说明matlab已经启动过了,但是为什么就执行不了你的代码呢 ?

后来我把2>errorl.log输出来,也就是把Matlab运行的error输出来看发现: fatal error on startup. MATLAB_PREFDIR must be an absolute path. Cannot set preferences directory to the relative path。 路径错了,应该是被调用的外部命令system的配置问题引起的; 后来我就在运行Matlab 命令前,加入 export MATLAB_PREFDIR=<your preference path>, 切记 一定要输入全路径。

<?php
$command="export MATLAB_PREFDIR= <your preference path>; matlab -nodesktop -nosplash -nodisplay -r \"draw\"";
system($command);
?>
加了路径之后就能够正常运行了。It works!

2016年11月24日


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值