我尝试使用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脚本那样被识别出来。
答案 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中将文件作为字符串读取,您可以根据需要对字符串进行任何其他操作。