0

PHP 和 cURL 在我的 amazon EC2 微安装 12.04.2 LTS (GNU/Linux 3.2.0-40-virtual x86_64) 的非面向 Web 的目录中工作正常。

我可以使用 cURL 在命令行上运行一些脚本:

    #!/usr/bin/php
    $command = '/absolute/path/to/running/process';
    $url = 'http://example.com';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 400);
    curl_setopt($ch, CURLOPT_TIMEOUT, 400);

    $resp = json_decode(curl_exec($ch), 1);
    $data1 = round($resp["data1"], 6);
    $data2 = round ($resp["data2"], 2);

    curl_close($ch);


    $c = array(
            'var1' => trim(shell_exec($command)),
            'var2' => trim(shell_exec($command)),
            'var3' => trim(shell_exec($command)),
            'var4' => number_format($data1, 6, '.', ''),
            'var5' => number_format($data2, 0, '.', ',')
    );
    var_dump($c);

这工作正常。

但是,只要我将相同的脚本放在面向 Web 的目录中(我#!/usr/bin/php显然删除了),页面就会加载(我可以echo 'Hello World!'在最顶部键入并从远程机器上查看浏览器上的文本),但页面完全空白并echo在之后添加语句curl不会产生任何结果。如果我注释掉curl函数调用并尝试简单地执行命令,它似乎不起作用(整个值数组都用NULLor填充0)。

  • PHP 发生了什么?为什么 cURL 不能在 /var/www/ 文件夹中运行,但在其他任何地方都可以正常运行?我使用 cURL 将信息存储到数据库以从公共 API 获取一些 JSON。
  • 为什么我不能shell_exec像通常在命令行上使用 PHP 那样运行脚本?
  • 即使error_reporting(E_ALL)已设置,错误也不会出现在 PHP 中。我无法通过使用 locate 来查找error_log或查找错误日志php.err,我认为这是 php 错误日志的默认名称。

我觉得这两个问题可能相关,但我不知道为什么,也许是权限?我注意到的是,如果不使用该命令,我无法在此目录中创建或修改文件sudo,这并不常见。

另一个注意事项: phpinfo() 没有说明 cURL,但它可以在命令行上运行。我不确定为什么。

4

2 回答 2

0

Ubuntuphp.ini为命令行 PHP 和 Apache2 PHP 提供了单独的文件。您在这些文件中的配置很可能加载了不同的扩展名(或不同的安全设置),这使得 Apache 没有与 CLI 相同的功能。

$ ls -l /etc/php5/cli/php.ini
-rw-r--r-- 1 root root 65485 Jan 27 09:20 /etc/php5/cli/php.ini

$ ls -l /etc/php5/apache2/php.ini
-rw-r--r-- 1 root root 65839 Oct 31  2012 /etc/php5/apache2/php.ini
于 2013-07-10T05:58:19.303 回答
0

只是一个观察,这些行中有额外的 <'> 单引号:

        'var1' => trim(shell_exec($command')),
        'var2' => trim(shell_exec($command')),
        'var3' => trim(shell_exec($command')),

除此之外,我同意 Joachim 的建议。

于 2013-07-10T06:30:25.987 回答