Wants to execute matlab file with php

10 visualizaciones (últimos 30 días)
Pramod Amrutkar
Pramod Amrutkar el 27 de Dic. de 2017
Comentada: Walter Roberson el 24 de Oct. de 2018
how to pass php dynamic file path to matlab(any function where I can execute matlab file code). Want to show the output on browser. SO, how can I code for this.

Respuesta aceptada

Kojiro Saito
Kojiro Saito el 30 de Dic. de 2017
exec or system commands of PHP with matlab -r would be an answer to call MATLAB scripts from PHP. Detail of the integration depends on your MATLAB scripts, but there's no MATLAB interface for PHP, so you need to pass MATLAB calculation results to PHP via File I/O in the following simple example, result of magic square is written in result.csv and will be loaded in PHP and shown in Web browser. matlab command line options are different among Windows, Linux and Mac, for example, -nodesktop option is available in Linux, but for Windows, -automation option is available. So, MATLAB command line string in PHP will be different depending on OS.
magicSquare.m
function out = magicSquare(n)
if ischar(n)
n = str2num(n);
end
out = magic(n);
csvwrite('result.csv', out);
sample.php (Linux version)
<!DOCTYPE html>
<html>
<head>
<title>PHP Test</title>
<meta charset="utf-8">
</head>
<body>
<?php
// Get current working directory
// magicSquare.m exists in this directory
$pwd = getcwd();
// Set command. Please use -r option and remember to add exit in the last
$cmd = '/usr/local/MATLAB/R2017b/bin/matlab -nosplash -nodesktop -sd ' . $pwd . ' -r "magicSquare(5);exit" -logfile log.txt';
// exec
$last_line = exec($cmd, $output, $retval);
if ($retval == 0){
// Read from CSV file which MATLAB has created
$lines = file('result.csv');
echo '<p>Results:<br>';
foreach($lines as $line)
{
echo $line.'<br>';
}
echo '</p>';
} else {
// When command failed
echo '<p>Failed</p>';
}
?>
</body>
</html>
sample.php (Windows version)
<!DOCTYPE html>
<html>
<head>
<title>PHP Test</title>
<meta charset="utf-8">
</head>
<body>
<?php
// Get current working directory
// magicSquare.m exists in this directory
$pwd = getcwd();
// Set command. Please use -r option and remember to add exit in the last
$cmd = 'C:\MATLAB\R2017b\bin\matlab -automation -sd ' . $pwd . ' -r "magicSquare(5);exit" -wait -logfile log.txt';
// exec
$last_line = exec($cmd, $output, $retval);
if ($retval == 0){
// Read from CSV file which MATLAB has created
$lines = file('result.csv');
echo '<p>Results:<br>';
foreach($lines as $line)
{
echo $line.'<br>';
}
echo '</p>';
} else {
// When command failed
echo '<p>Failed</p>';
}
?>
</body>
</html>
Here's result of PHP shown in web browser.
Hope this help.
  1 comentario
Pramod Amrutkar
Pramod Amrutkar el 4 de En. de 2018
First of all big thanks Kojiro Saito for answering my question. I want it without function is this possible. Means you have passed parameterised function but I want it without function. I want to pass direct filename in $cmd command

Iniciar sesión para comentar.

Más respuestas (5)

Arijit Nandi
Arijit Nandi el 18 de Feb. de 2018
$cmd = 'C:\MATLAB\R2017b\bin\matlab -automation -sd ' . $pwd . ' -r "magicSquare(5);exit" -wait -logfile log.txt';
please explain this Kojiro Saito . I am new in matlab.
  4 comentarios
Kojiro Saito
Kojiro Saito el 21 de Feb. de 2018
Do you mean you have created a stand alone application by compiling with MATLAB Compiler? If so, you would have created magicSquare.exe. Put this exe in PHP current directory, and change the command line description to .
$cmd = 'magicSquare.exe 5';
in PHP script.
Walter Roberson
Walter Roberson el 24 de Oct. de 2018
Note that using MATLAB Compiler does not speed up execution. The exe produced use the same execution engine as interactive MATLAB does.
MATLAB Coder (a different product) generates C/C++ code that can potentially be faster, if you are using the subset of MATLAB that it supports (and in some highly vectorized cases, MATLAB itself is more efficient than the generated C/C++ code, which might not be using the high performance libraries.)
If you need the full support of MATLAB Compiler but need the startup time to be reduced then the appropriate product is MATLAB Production Server.

Iniciar sesión para comentar.


Samreen Akhtar
Samreen Akhtar el 5 de Abr. de 2018
C:\MATLAB\R2017b\bin\matlab

Samreen Akhtar
Samreen Akhtar el 5 de Abr. de 2018
what does it mean
  4 comentarios
Kojiro Saito
Kojiro Saito el 10 de Abr. de 2018
You need to pass the output image to php and php needs to create img tag. Simple way is as follows.
showDise.m
function showDise( )
fig = figure('visible', 'off');
a=imread('dise.jpg');
imshow(a);
h=imdistline();
api = iptgetapi(h);
saveas(fig, 'result.jpg')
end
sample.php
<!DOCTYPE html>
<html>
<head>
<title>PHP Test</title>
<meta charset="utf-8">
</head>
<body>
<?php
$pwd = getcwd();
$cmd = 'C:\MATLAB\R2017b\bin\matlab.exe -automation -sd ' . $pwd . ' -r "showDise;exit" -wait -logfile log.txt';
exec($cmd, $output, $retval);
if ($retval == 0){
// Read from image file which MATLAB has created and return img tag
echo '<img src="result.jpg"/>';
} else {
// When command failed
echo '<p>Failed</p>';
}
?>
</body>
</html>
Please replace "C:\MATLAB\R2017b\bin\matlab.exe" in $cmd with your MATLAB installation path.
Nazia Hameed
Nazia Hameed el 24 de Oct. de 2018
did u manage to call matlab using php ?

Iniciar sesión para comentar.


Fatima Kahoot
Fatima Kahoot el 25 de Abr. de 2018
i have created an exe file of matlab standalone application and wants to execute it with php using exec command and wants to show the output that is created by matlab .exe file in web where user will interactively change the distance of imdistline and then save the distance retrieved using api.getdistance in database. i am new in matlab and does not know how it can be done. Please help me in this regard and please tell me that where is to place Matlab Compiler Runtime? i have also attached my code of php and matlab.
  1 comentario
Kojiro Saito
Kojiro Saito el 26 de Abr. de 2018
I'm not sure what is needed for input and what output would be from ObjectSizeCalculator.exe.
If the output is csv or text file, for example, result.csv, the PHP codes might be similar to the following.
$lines = file('result.csv');
echo '<p>Results:<br>';
foreach($lines as $line)
{
echo $line.'<br>';
}
echo '</p>';
Also, MATLAB Runtime should be installed in the server where PHP is running.

Iniciar sesión para comentar.


Mario Jose
Mario Jose el 16 de Ag. de 2018
Hi, I'm new to matlab and I'd like to know if someone helps me. I want to run a matlab file, but you have to pass a route, I think it can be the concatenation, the route receives it by parameter the file of mattab
<!DOCTYPE html>
<html>
<head>
<title>PHP Test</title>
<meta charset="utf-8">
</head>
<body>
<?php
$pwd = getcwd ();
$ruta='D:\Tesis2.0\images\CPT-792_2.jpg';
$cmd = 'C:\Program Files\MATLAB\R2017a\bin\matlab.exe -automation -sd ' . $pwd . ' -r "D:\Tesis2.0\prueba2('$ruta');quit" -wait -logfile log.txt';
exec($cmd, $output, $retval);
if ($retval == 0){
$c = file_get_contents('D:\Tesis2.0\placa.txt');
echo $c;
} else {
// When command failed
echo '<p>Failed</p>';
}
?>
</body>
</html>

Categorías

Más información sobre Introduction to Installation and Licensing en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by