【发布时间】:2012-02-19 21:02:43
【问题描述】:
我下载了一个免费的 PHP 占星术脚本。该脚本通过表单接收一些数据(出生日期和时间、经度、纬度等),然后使用变量传递的参数运行此命令:
exec ("swetest -edir$sweph -b$utdatenow -ut$utnow -p0123456789DAttt -eswe -house$my_longitude,$my_latitude,$h_sys -flsj -g, -head", $out);
“swetest”文件是 Linux 的可执行文件,位于站点根目录的“sweph”目录以及其他一些包含数据的二进制文件中。这些二进制文件是“瑞士星历”,它确定了行星在星座轮中的位置。 然后将该命令的输出($out)存储在变量中,执行更多计算,最后由 GD 库生成星座轮盘。
在我的桌面上,我运行 Windows 和 XAMP,而我的远程服务器是 Linux。我已将主机的 PHP 版本设置为 5.3.something。
我已按照提供的说明将脚本完全按照下载的方式上传到我的主机(在没有 Code Igniter 的情况下单独),并且它可以完美运行而没有问题。这意味着我的主机已正确配置为运行 exe() 命令。
现在我尝试将此脚本改编为 CodeIgniter。 我将二进制文件放在 http://example.com/codeIgniterSite/assets/sweph 中。 “swetest”命令的第一个参数是 –edir,它确定二进制文件的位置,我将其设置为 'assets/sweph'(我在页面标签)。 我检查了传递给参数的值($utnow、$my_latitude 等),它们是有效的。 问题是 Code Igniter 环境忽略了 exec 命令并且 $out 变量为空。然后页面会充满错误,因为执行 exec() 命令之后的计算是在没有正确设置变量的情况下执行的。
第一个错误与命令有关:
$swephsrc = ‘assets/sweph’;
putenv("PATH=$PATH:$swephsrc")
脚本位于 exec() 之上,错误是:“未定义变量:PATH”。
所以这一定是我想的问题。 Code Igniter 必须有自己的系统来执行 putenv 所做的事情。也就是在环境路径中添加一个路径。有人可以帮忙吗? 我必须说,当我尝试在本地(没有 CI)运行脚本时,它产生的错误与使用 CI 的远程主机中的错误完全相同。它不接受 putenv。但这可能是因为我的文件在本地不是二进制的,而它们在主机上是二进制的,因为我根据脚本作者网站上的说明以二进制模式使用 FileZilla 上传它们。
我还运行了以下命令:
echo exec ("swetest -edir$sweph -b$utdatenow -ut$utnow -p0123456789DAttt -eswe -house$my_longitude,$my_latitude,$h_sys -flsj -g, -head", $out, $error);
echo $error.'<br/>';
echo exec('whoami', $out, $error);
echo $error.'<br/>';
第一个 $error 输出“127”,表示“找不到文件或其他东西”。 第二个输出我的名字和“0”,意思是“一切都好”。所以 Code Igniter 执行“whoami”命令可能是因为它可以在不知道“swetest”命令在哪里的情况下找到它。 那么如何使用 CI 为环境路径添加路径呢?还是别的什么?
编辑:我试过: $路径 = 0; 之前: putenv("PATH=$PATH:$swephsrc") 它奏效了!二进制文件被执行并用数据填充变量。唉!我的幸福并没有持续多久...我开始收到“内部服务器错误”:-(。我不知道这是巧合还是与我的行为有关。
【问题讨论】:
-
你项目的目标是什么?我也在用这个工具,也许我想联系你。
标签: php codeigniter exec