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
函数调用并尝试简单地执行命令,它似乎不起作用(整个值数组都用NULL
or填充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,但它可以在命令行上运行。我不确定为什么。