如标题所示,我有用于孤立口语识别的 MATLAB 代码,我希望能够将此项目与另一个使用PHP制作的项目集成,以达到某种目的。
我以前没有处理过这样的问题。换句话说,这是我第一次需要集成 PHP 和 MATLAB,所以我真的不知道从哪里开始以及如何开始。
我已经阅读了几篇文章,但我无法使其有效。
我有 PHP 5.4.9、MATLAB R2012A 和 Windows 7。可以在 GitHub 上查看 MATLAB 项目文件。
如标题所示,我有用于孤立口语识别的 MATLAB 代码,我希望能够将此项目与另一个使用PHP制作的项目集成,以达到某种目的。
我以前没有处理过这样的问题。换句话说,这是我第一次需要集成 PHP 和 MATLAB,所以我真的不知道从哪里开始以及如何开始。
我已经阅读了几篇文章,但我无法使其有效。
我有 PHP 5.4.9、MATLAB R2012A 和 Windows 7。可以在 GitHub 上查看 MATLAB 项目文件。
你有几个选择:
如果 MATLAB 安装在将要部署 PHP 应用程序的服务器上(不是您当前的开发环境),您可以像使用任何其他程序 ( ) 一样使用PHPmatlab -r "..."
中的命令等价物直接调用它。EXECUTE
以下是一些资源(请务必同时查看链接的问题):
其他人评论了如何在 PHP 和您的 MATLAB 脚本之间传递输入/输出。例如,您可以设计您的 MATLAB 函数以接收 WAV 文件的路径作为输入,对其进行处理并将任何生成的图像保存到磁盘:
function myFunc(filename)
[y,Fs] = audioread(filename);
img = my_process_func(y, FS);
imwrite(img, 'out.png');
end
从 PHP 调用如下:
% Of course you have to make sure "myFunc" is available on the MATLAB path.
% Think: "addpath(..)" or just "cd(..)" into the directory first
matlab -wait -nodisplay -r "myFunc('audio.wav'); quit;"
然后您可以在 PHP 应用程序中读取输出图像。
如果没有,您有哪些与部署相关的工具箱?MATLAB 编译器和相关工具箱,例如MATLAB Builder NE和MATLAB Builder JA。
这些将分别将您的程序编译成可执行/.NET 程序集/JAR 文件,并且所有这些都需要安装免费提供的MCR 运行时。换句话说,可执行文件不需要在目标机器上安装完整的 MATLAB,只需要 MCR 运行时。
您将以与以前相同的方式运行可执行文件。
另一种产品是MATLAB Coder,它将您的 MATLAB 代码转换为 C++ 程序。编译后,无需任何外部要求即可运行。
MathWorks 的新产品是MATLAB Production Server。我个人对此一无所知:)
还有一种选择是使用 TCP/IP 在 PHP 和 MATLAB 之间进行通信。服务器将在 MATLAB 端运行,使用编写为 C MEX 文件或 Java 类的套接字编程。看:
客户端是您的 PHP 应用程序。这个想法是让 MATLAB 监听连接,读取客户端给出的任何输入eval
,然后返回结果。这比其他选项涉及更多,因为您必须处理序列化和并发等其他事情。优点是 MATLAB 可以在单独的服务器上运行,甚至可以在云上的多台服务器上运行(参见这篇文章)。
因此,首先,决定哪种方法最适合您的项目,然后回答具体问题会更容易......请始终先查阅文档,MATLAB 工具箱的文档非常详尽,通常包含许多示例。以下是一些特定于 MATLAB Compiler 产品系列的资源:
请注意,它们专注于 ASP.NET 和 Java JSP/servlet 应用程序。在您的情况下,PHP 应用程序将与运行使用上述两个选项之一构建的 Web 服务的中间层进行通信(或者简单地设计一个类似 CGI 的站点,运行使用 MATLAB 编译器构建的普通可执行文件,如前所述)。
为了帮助 OP 从 PHP 网页运行系统命令,我的帖子是相关的(复制如下)。
我们一直都在这样做。我称它们为巫毒教页面。这是一些工作代码:
<?php
$command="uptime"; $output; $retval; $errors="";
exec ($command, &$output, &$retval);
echo $output[0] . "\n";
unset($output);
?>
网页的输出为:
13:40:19 up 22 days, 23:14, 0 users, load average: 0.04, 0.02, 0.00
我在下面的评论中添加的附加说明:相对路径与绝对路径可能很痛苦......$command
可能需要是/usr/bin/uptime
或另一个可能是/usr/bin/ls /home/chris/ftp
。通常,脚本的工作目录是它们在文件系统中的位置。MATLAB是一个Windows程序,是吗?我的经验是,您将需要程序的绝对路径以及作为参数传递的任何文件,例如:$command="c:\\matlab\\matlab.exe c:\\www\\somefile.wav"
然后愚蠢的 NTFS 名称需要单引号,TAB 命令行完成对于示例非常有效。或者使用带有 ~ 的正确 8.3 名称。
我的回答将分为两部分:
如何从终端运行 MATLAB 脚本?我将给出一些关于从终端运行 MATLAB 脚本的示例:
matlab -nojvm -nodesktop -r "run <the-script>.m"
matlab -nojvm -nodesktop -r "<the-script>"
matlab -nojvm -nodesktop -r "run <the/path>/<the-script>.m"
matlab
in Windows 必须在您的环境路径中。操作方法。
如果您需要将脚本编译为 Java:
java -jar yourjarfile.jar
如何从 PHP 执行终端命令?我认为前面的答案很好,没有必要重复。
更多注释:
XSS
很容易上当。一种快速的技巧是将您的 MATLAB 代码编译成可执行文件,然后使用 PHP 的shell_exec()
.
困难的部分是以如下方式调整您的 MATLAB 代码(抱歉,我没有阅读):
char
字符串)接收其输入;然后只需将 MATLAB 输出解析回 PHP ......