使用PHP脚本进行系统调用的问题

时间:2010-03-08 00:16:27

标签: php

我有以下PHP脚本:

<?php
  $fortune = `fortune`;
  echo $fortune;
?>

但输出只是空白(没有抛出可见的错误)。

但是,如果我运行php -a,它可以运行:

php > echo `fortune`;
Be careful of reading health books, you might die of a misprint.
        -- Mark Twain
php >

我是否错过了配置指令或导致此问题的内容?

编辑:所以,我尝试使用$ php-cgi fortunetest.php运行我的脚本,它按预期工作。也许问题出在Apache2上?

4 个答案:

答案 0 :(得分:1)

无论如何,我找到了解决方案:fortune住在/usr/games,所以我认为这可能是$PATH问题,但当我su www-data并且$ fortune 1}}它按预期工作,/usr/games位于$PATH。显然,Apache正在使用不同的$PATH变量,即使它在用户www-data下运行,所以我重写了脚本以使用/usr/games/fortune而不是普通fortune并且它有效。由于fortune不是剧本的重点,这是浪费时间,但是吸取了教训。

答案 1 :(得分:0)

fortune命令只为您输出报价或着名报价。您只需将这些quotations存储在平面文本文件中,或者如果您有数据库,则将它们存储在表中。然后使用PHP中的rand()函数或类似函数生成一个随机数,并使用此数字在引号文件/表中获取该行。这样,您的PHP脚本不依赖于系统是否安装了fortune命令。

答案 2 :(得分:0)

使用/usr/games/fortune之类的完整路径,而不只是fortune。 Apache并不总是自动扩展路径。

<?php passthru('/usr/games/fortune'); ?>

要在shell中查找完整路径which,例如..

which fortune

答案 3 :(得分:-1)

老实说,我不知道。但是,您可能需要回复$fortune