PHP和cURL在Amazon EC2中的www文件夹中

时间:2013-07-10 05:46:00

标签: php curl permissions amazon-web-services amazon-ec2

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

我可以使用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函数调用并尝试简单地执行命令,它似乎不起作用(整个值数组填充NULL0。)。

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

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

另一个注意事项:phpinfo()没有说明cURL,但它适用于命令行。我不确定为什么。

2 个答案:

答案 0 :(得分:0)

Ubuntu为命令行PHP和Apache2 PHP分别有php.ini个文件。这些文件中的配置很可能加载了不同的扩展(或不同的安全设置),这使得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

答案 1 :(得分:0)

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

        'var1' => trim(shell_exec($command')),
        'var2' => trim(shell_exec($command')),
        'var3' => trim(shell_exec($command')),
除此之外,我同意约阿希姆的建议。