我正在尝试在我的服务器上通过 PHP 使用 Scilab,如这个文件。
我正在运行 Ubuntu 16.04。我有一个正在运行的 Apache 服务器。我安装了 Scilab apt-get install scilab
。我可以成功编写如下 scilab 代码:
scilab -nwni -nb -e "m=[1 2 3; 3 4 5];disp(m);exit"
所以现在我尝试从 PHP 执行它。我尝试了文档中的示例。例如:
<?php
exec('scilab -nwni -nb -e "m=[1 2 3; 3 4 5];disp(m);exit;"', $output);
print_r($output);
?>
但我总是得到:
Error: Impossible to define SCIHOME environment variable.
SCIHOME not defined.
我不知道我做错了什么以及如何解决它......
任何帮助将不胜感激 !
答案1
我也遇到了同样的问题。尝试:
exec('sudo scilab -nwni -nb -e "m=[1 2 3; 3 4 5];disp(m);exit;" 2>&1', $output);
print_r($output);
可以通过 www-data 用户运行 sudo,如果您添加权限,请尝试:
sudo visudo -f /etc/sudoers
并添加到文件末尾
www-data ALL=(ALL) NOPASSWD: /usr/bin/scilab, /usr/bin/scilab-cli, /usr/bin/scilab-adv-cli
我不确定,是否必须添加所有这些 scilab 文件...也许只有 scilab。
答案2
我记得 php 可能有多个 .ini 文件,这意味着 cli 执行和网关执行可能会以不同的方式或意外的方式工作,因为它们使用不同的 ini 文件和/或由于执行它们的用户:组而获得不同的权限。尝试在第二个实例中执行的用户:组是否有权写入环境,您是否获得了由您认为是从中获取的 .ini 文件控制的行为。
只是一个想法。
答案3
好吧,我终于解决了这个问题。我只是太笨了。你只需要手动设置变量。我已经试过了,但变量名错了……
exec('SCIHOME=/var/www/ scilab -nwni -nb -e "m=[1 2 3; 3 4 5];disp(m);exit;" 2>&1', $output);