exécuter le code matlab à partir de php
Comme le titre l'indique, j'ai un code Matlab pour reconnaissance de mots parlés isolés et je veux être en mesure d'intégrer ce projet avec un autre fait avec PHP dans un certain but. Je n'ai pas l'habitude de traiter avec ce genre de problème avant, en d'autres termes, c'est la première fois pour moi quand j'ai besoin d'intégrer PHP et Matlab donc je ne sais vraiment pas par où commencer et comment. J'ai lu quelques articles, mais je ne pouvais pas le faire valide.
j'ai PHP 5.4.9
,Matlab r2012a
et Windows 7 OS
.
les fichiers du projet matlab peuvent être consultés sur github
Toute aide serait grandement appréciée.
4 réponses
Vous avez un peu d'options ici:
est-ce que MATLAB est installé sur le serveur où L'application PHP serait déployée (pas votre environnement de développement actuel)? Si oui, vous pouvez l'appeler directement comme n'importe quel autre programme (
maltab -r "..."
) en utilisant l'équivalent deEXECUTE
commande en PHP. Voici quelques ressources (assurez-vous de consulter également les questions liées):- comment appeler MATLAB à partir de la ligne de commande et imprimer vers stdout avant de quitter
- en cours d'Exécution un fichier cmd sans GUI popping up
- Passer Des Paramètres _ Script Shell - Script Octave
D'autres ont commenté comment passer les entrées/sorties entre PHP et votre script MATLAB. Par exemple, vous pouvez concevoir votre fonction MATLAB pour recevoir le chemin du fichier WAV comme entrée, le traiter et enregistrer n'importe quelle image résultante sur le disque:
function myFunc(filename) [y,Fs] = audioread(filename); img = my_process_func(y,FS); imwrite(img, 'out.png'); end
qui est invoqué à partir de PHP comme:
% 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;"
vous pouvez alors lire l'image de sortie dans L'application PHP.
si ce n'est pas le cas, quelles boîtes à outils liées au déploiement avez-vous à votre disposition? compilateur MATLAB et les boîtes à outils connexes comme MATLAB Builder NE et MATLAB Builder JA.
ceux-ci compileront votre programme dans un fichier exécutable/.net Assembly/JAR respectivement, et chacun d'eux nécessite le libre disponible MCR Runtime pour être installé. En d'autres termes, les exécutables n'ont pas besoin d'avoir une installation complète de MATLAB sur la machine cible, seulement L'exécution MCR.
vous exécuteriez l'exécutable de la même manière qu'avant.
un Autre produit est le MATLAB Coder, qui convertit votre code MATLAB en programme C++. Une fois compilé, il peut fonctionner sans aucune exigence externe.
un nouveau produit de Mathworks est MATLAB Production Le serveur. Personnellement je ne sais rien à ce sujet :)
une autre option consiste à utiliser TCP/IP pour communiquer entre PHP et MATLAB. Un serveur serait exécuté du côté de MATLAB, en utilisant la programmation socket écrite en C MEX-file ou une classe Java. Voir:
le client étant votre application PHP. L'idée est D'avoir MATLAB à l'écoute des connexions, à la lecture de toutes les entrées données par un client,
eval
, et de retourner le résultat. Ceci est plus impliqué que les autres options, car vous devez traiter avec la sérialisation et d'autres choses comme la concurrence. L'avantage est que MATLAB peut être exécuté sur un serveur séparé, même sur plusieurs serveurs sur le cloud (voir ce post).
donc d'abord, décidez quelle approche convient le mieux à votre projet, puis il serait plus facile de répondre à des questions spécifiques question.. Les boîtes à outils MATLAB sont très bien documentées et contiennent généralement de nombreux exemples. Voici quelques autres ressources spécifiques à la famille de produits de compilateurs MATLAB:
- Webinaire: le Déploiement de l'Application avec MATLAB
- Fichier PDF: MATLAB Déploiement de l'Application - Web Exemple Guide
notez qu'ils se concentrent sur ASP.NET et les applications Java JSP/servlet. Dans votre cas, L'application PHP communiquerait avec un niveau intermédiaire exécutant un service web construit en utilisant l'une des deux options ci-dessus (ou simplement concevoir un site de type CGI exécutant des exécutables simples construits en utilisant le compilateur MATLAB comme expliqué plus haut)
HTH
aider les OP à l'exécution de commandes système à partir d'une page web php, mon post ici est pertinent (copié ci-dessous).
Nous faire exactement cela tout le temps. J'appelle ça des pages vaudou. Voici une partie du code qui fonctionne:
<?php
$command="uptime"; $output; $retval; $errors="";
exec ( $command , &$output, &$retval );
echo $output[0]."\n";
unset($output);
?>
Et la sortie vers la page web du service:
13:40:19 up 22 days, 23:14, 0 users, load average: 0.04, 0.02, 0.00
et la note complémentaire que j'ai ajoutée dans les commentaires ci-dessous:
Les trajectoires relatives et absolues peuvent être douloureuses... $command
peut-être besoin d'être /usr/bin/uptime
ou un autre pourrait être /usr/bin/ls /home/chris/ftp
. Normalement, le répertoire de travail des scripts est l'endroit où ils vivent dans le système de fichiers. MATLAB est un programme windows, non? Mon expérience est que vous aurez besoin de chemins absolus pour le programme et tous les fichiers passés comme arguments, par exemple: $command="c:\matlab\matlab.exe c:\www\somefile.wav"
et puis les guillemets simples requis pour les noms de NTFS stupides, TAB l'achèvement de ligne de commande fonctionne bien pour les exemples. Ou utilisez le nom propre 8.3 avec le ~ dedans.
un hack rapide serait de compiler votre code Matlab dans un fichier exécutable alors utilisez PHP's shell_exec()
.
le plus difficile serait d'adapter votre code Matlab (désolé, Je ne l'ai pas lu) de telle manière que:
- il recevra ses entrées dans le style de l'interface en ligne de commande (comme
char
chaînes); - il affichera ses résultats sous forme de texte à la sortie standard (ID du fichier #1 dans Matlab).
alors tout ce qu'il faut c'est analyser la sortie Matlab dans PHP...
ma réponse serait en deux parties :
1-Comment exécuter le script matlab depuis le terminal ? - Je vais donner un exemple de script matlab à partir du terminal
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
dans windows, doit être dans le chemin de votre environnement . comment ?
si vous devez compiler votre script vers java:
java -jar yourjarfile.jar
2 - comment exécuter une commande de terminal à partir de php ? Je pense que les réponses ci-dessus sont bons , pas besoin de les répéter .
plus de notes:
- regarder pour votre sécurité , vous pourriez être
xss
ed facilement - résumé de votre code et de l'améliorer pour enregistrer les paramètres et de sortie à la base de données , exécutez votre code dans parallels ou FILE manager, vous pouvez créer un service REST.
- test de l'unité .
- utilisez linux, c'est beaucoup plus puissant.