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
函数调用并尝试简单地执行命令,它似乎不起作用(整个值数组填充NULL
或0
。)。
shell_exec
来运行脚本,因为我通常可以在命令行上使用PHP?error_reporting(E_ALL)
,错误也不会显示在PHP中。我找不到使用locate查找error_log
或php.err
的错误日志,我认为这是php错误日志的默认名称。我觉得这两个问题可能有关系,但我无法弄清楚为什么,也许权限?我注意到的一点是,如果不使用sudo
命令,我无法在此目录中创建或修改文件,这是不常见的。
另一个注意事项:phpinfo()没有说明cURL,但它适用于命令行。我不确定为什么。
答案 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')),
除此之外,我同意约阿希姆的建议。