Php 我可以在网站上运行MATLAB代码吗?

Php 我可以在网站上运行MATLAB代码吗?,php,matlab,Php,Matlab,我有一个BE项目,其代码在MATLAB中,但我需要在网页上显示结果。我想知道我是否可以直接在网站上运行我的代码?如果没有,你能告诉我哪种语言更好吗?我想可能是ASP、HTML和PHP。您应该能够使用调用MatLab并将其输出包含在页面上 另请参见MatLab命令行选项或。您可以使用MatLab编译器将MatLab应用程序编译成独立的可执行文件 在提示符处键入“mcrversion”以确定是否安装了此软件包-如果您没有付费,则可能没有安装-与Mathworks提供的大多数扩展一样,您需要付费 如果

我有一个BE项目,其代码在MATLAB中,但我需要在网页上显示结果。我想知道我是否可以直接在网站上运行我的代码?如果没有,你能告诉我哪种语言更好吗?我想可能是ASP、HTML和PHP。

您应该能够使用调用MatLab并将其输出包含在页面上


另请参见MatLab命令行选项或。

您可以使用MatLab编译器将MatLab应用程序编译成独立的可执行文件

在提示符处键入“mcrversion”以确定是否安装了此软件包-如果您没有付费,则可能没有安装-与Mathworks提供的大多数扩展一样,您需要付费

如果您不需要编译代码,只需运行它,您可以通过命令行调用MATLAB来完成您需要的工作

正如Sinan提到的,在这两种情况下,您都会使用类似passthu的函数

另一种选择是为PHP创建一个扩展,以便在C中使用MATLAB。MATLAB提供了一个C API,允许您使用MATLAB附带的库调用引擎(有关示例,请参阅“extern”文件夹)

请参阅以下有关创建扩展的链接(这非常简单):

在MATLAB或google中搜索“MATLAB C/Fortran API”以获取有关函数的文档。基本上,您可能需要调用EngOpen来调用引擎并返回指针

使用engEvalString计算字符串(可以通过这种方式加载.m文件,也可以在典型的matlab命令行中执行任何操作)

当您需要查看结果时(在matlab中通常输出到命令行的任何内容),只需省略命令后的分号,并使用engOutputBuffer捕获输出

下面是我写的一个简化示例:

#include "mat.h"
#include "engine.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define  BUFFER_SIZE 256

int main()

    Engine *ep;
    char buffer[BUFFER_SIZE];   // The buffer used to capture output.

    buffer[BUFFER_SIZE] = '\0'; /* Terminate the last character of the buffer. */

    if (!(ep = engOpen(NULL))) {
        fprintf(stderr, "\nCan't start MATLAB engine\n");
        return EXIT_FAILURE;
    }

    if (engEvalString(ep, "load data/mymatfile.mat") != 0)
    printf("error evaluating expression\n");

    engOutputBuffer(ep, buffer, BUFFER_SIZE);

    /* No output returned. */
    if (engEvalString(ep, "p = 1+1;") != 0)
    printf("error evaluating expression\n");

    /* Output written to buffer- Note the omitted character (;). */
    if (engEvalString(ep, "q = p+1 "))
    printf("error evaluating expression\n");


    /* You will probably need to trim the whitespace in the buffer contents.
    I estimated +5 to pull out the prompt: ">>", but it depends on which version
    you have, for example, the student version displays "EDU >>\n". */
    printf("print the contents of the buffer:%s\n", buffer+5);

    /* Turn off output buffering. */
    engOutputBuffer(ep, NULL, 0);

    /* Close the engine. */
    engClose(ep);

    exit(0);

}
在编译/调用扩展之前,您可能需要设置LD_LIBRARY_路径。。。但是,除此之外还有其他选择:

LD_LIBRARY_PATH=/usr/local/matlabR2009a/extern/lib/glnx86:/usr/local/matlabR2009a/bin/glnx86:/usr/local/matlabR2009a/sys/os/glnx86:$LD_LIBRARY_PATH

也许这是正确的解决方案:

编辑包含这两个页面的


MATLAB与.NET有很好的集成。您需要+来创建可从基于.NET的web应用程序运行的.NET程序集


一些替代方法:您可以使用(请参阅)或Python+来完成大致相同的工作,而无需支付所有许可费用。

您最好使用matlab publish命令,该命令允许您从matlab代码创建HTML。如果您真的不需要执行脚本live,这将允许您自动生成输出并创建图形的图像副本。生成HTML和图像后,您只需将它们上载到您的站点即可

为您的Matlab和Octave脚本提供了一个REST接口,这样您就不必在自己的服务器上安装任何东西。它甚至可以向您发送Base64编码的3D绘图。这是你的电话号码。下图显示了您可以通过HTTP调用中的
SaturnParams
变量将输入传递给脚本


披露:我在SaturnAPI上工作

我通过PHP使用Matlab COM Automation Server,这运行了一种进行一些派生的方法:

$Matlab = new COM("Matlab.Application.Single");

$output = $Matlab->Execute("addpath '".dirname($_SERVER['SCRIPT_FILENAME'])."/'");

$output = $Matlab->Execute("[roots, dy, subsStr] = NewtonPrep('".$_REQUEST['eq']."')");

echo $output;


如果JavaScript是一种可能的语言选择,那么MathWorks文件交换()上的这个工具箱可以将MATLAB函数编译成可以在浏览器中运行的JavaScript函数。

谢谢。。。我会试试的,因为它已经停产了,我不会对它下太大的赌注。但是这个页面也包含两种选择。为了避免误解,我做了一次编辑,对不起,这是我的错。是否有一种新的web UI for matlab技术,您可以在其中创建按钮、文件上传按钮和文本输入等界面?欢迎使用stackoverflow。最佳实践是在答案中包含示例代码。外部链接可能会断开。
$Matlab = new COM("Matlab.Application.Single");

$output = $Matlab->Execute("addpath '".dirname($_SERVER['SCRIPT_FILENAME'])."/'");

$output = $Matlab->Execute("[roots, dy, subsStr] = NewtonPrep('".$_REQUEST['eq']."')");

echo $output;