千里马使用PHP

时间:2015-05-29 16:00:23

标签: php

我尝试使用shell_exec()或system()等函数来使用php执行maxima脚本。例如:

<div class="col-sm-8" >
   <a href="{{club.url}}" ><i class="fa fa-link"></i></a> |
   <span class="h5 small">{{club.description}}</span>
</div>

输出:

<?php
chdir("C:\Program Files (x86)\Maxima-sbcl-5.35.1.2\bin");
$cmd = "maxima";
$res = exec($cmd,$out,$status);
echo "out=";
print_r($out);
echo "res=".$res.PHP_EOL;
echo "status=".$status.PHP_EOL;`
?>

在比赛&#34;(%i1)_&#34;我必须运行类似&#34; solve(x ^ 2-1 = 0,x)&#34 ;;

的脚本

但它不像cmd脚本那样被识别出来。

2 个答案:

答案 0 :(得分:1)

您目前正在尝试以交互式模式运行Maxima,即您可以从shell启动命令并以交互方式输入表达式并获得结果。

您需要的是非交互式模式。根据Maxima的man page,通常有两种方式可以在非交互模式下工作:--batch--batch-string(另外,--batch-lisp,但这与此无关。)< / p>

第一种方法要求您传递包含要处理的表达式的文件名。第二种方法允许从命令行定义一个字符串。

在您的示例中,您应该调用Maxima,如下所示:

$expr = escapeshellarg("solve(x^2-1=0, x)");
$cmd = "maxima --batch-string=$expr";
// … and so on

如果要进行更复杂的计算,则应将它们转储到临时文件,并通过--batch参数将文件位置传递给Maxima。

答案 1 :(得分:0)

您可以将文件中的命令字符串传递给Maxima,命令行Maxima支持。

如果您的操作系统是$edition_id = $request->get('edition'); //replace this with your way of retrieving edition_id $journal = Edition::findOrFail($edition_id)->journal()->create($input);

在PHP中:

Linux/Unix/MacOS

例如,此文件可以是 input.txt ,此文件中的内容为exec('maxima -q -b file');

solve(x^2-1=0, x);stringout("result.txt", %o2);quit();

如果您的操作系统是system('maxima -q -b file');

Win

在Maxima中,您可以使用$maximaDir = 'C:/Program Files (x86)/Maxima-sbcl-5.35.1.2'; // If your maxima is installed in elsewhere, please modified this location exec($maximaDir.'/bin/maxima.bat -q -b "input.txt"'); 将结果存入文件,然后在PHP中将文件作为字符串读取,您可以根据需要对字符串进行任何其他操作。