【问题标题】:PHP and cURL in Amazon EC2 in www folderwww 文件夹中 Amazon EC2 中的 PHP 和 cURL
【发布时间】:2017-04-28 18:57:09
【问题描述】:

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!' 并从浏览器中查看文本远程机器),但页面完全空白,在curl 之后添加echo 语句不会产生任何结果。如果我注释掉 curl 函数调用并尝试简单地执行命令,它似乎不起作用(整个值数组填充有 NULL0。)。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    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
    

    【讨论】:

    • 我从 cli/php.ini 文件中复制了所有设置,但我似乎无法让这些设置正常工作。
    • @Joey curl 更改后是否出现在 apache 的 phpinfo() 中?
    • 不,它没有,这让我想知道它在 CLI 上是如何工作的
    【解决方案2】:

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

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

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

    【讨论】:

    • 已修复,为了隐私,我更改了很多信息。
    猜你喜欢
    • 1970-01-01
    • 2016-03-21
    • 2012-03-31
    • 2015-09-18
    • 2012-08-14
    • 2015-07-26
    • 1970-01-01
    • 2011-09-18
    • 2018-02-15
    相关资源
    最近更新 更多