【发布时间】:2015-07-28 16:04:22
【问题描述】:
我使用的是带有 LAMP 的 Linux Fedora 20。 我使用这个使用 curl 的简单 php 脚本:
// test.php
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPGET, 1);
curl_setopt($ch, CURLOPT_URL, "http://xx.xx.xx.xx:8080/file.xml");
curl_setopt($ch, CURLOPT_USERPWD, FEDORA_USER.":".FEDORA_PASS);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
在 php cli 中,我制作:
php test.php
卷曲有效。
在 php cli 中,我制作:
卷曲http://xx.xx.xx.xx:8080/file.xml
卷曲有效。
但在导航器(chrome、firefox、...)中,curl 不起作用。错误是:
Fatal error: (7) `curl_exec(...)` returned false.
Error: Failed to connect to xx.xx.xx.xx: Permission denied.
Info: Array ( [url] => http://xx.xx.xx.xx:8080/file.xml
[content_type] =>
[http_code] => 0
[header_size] => 0
[request_size] => 0
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0
[namelookup_time] => 1.6E-5
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[redirect_url] =>
[primary_ip] => 172.17.100.8
[certinfo] => Array ( )
[primary_port] => 8080
[local_ip] =>
[local_port] => 0
)
in /home/...../test.php on line 139
导航器使用/etc/php.ini
php-cli 使用 /etc/php.ini
我不明白为什么它在导航器上不起作用,问题不在于服务器端。你能帮帮我吗?
【问题讨论】:
-
我假设您已经检查了在 Apache 使用的 php.ini 中启用了
php_curl和php_openssl扩展?在大多数情况下,它与 PHP CLI 使用的不同,尽管我不是 Fedora 用户。 -
是的,它们是在 phpinfo() 中启用的。
-
也许你在 /etc/php5/apache2/php.ini 中禁用了 php-curl mod。 php-cli 和 apache2 php.ini - 是不同的文件。
-
也有可能,远程主机拒绝您的 http 查询。尝试执行 file_get_contents('xx.xx.xx.xx:8080/file.xml')。如果它给你相同的结果,它不是一个 curl 问题,但服务器拒绝你的查询。
-
不,php-cli像导航器一样使用php.ini,问题不在这里。而且这不是服务器拒绝,它没有日志。我找到了解决办法,我不知道为什么,但是当我从本地到远程使用 curl 时,它被 SElinux 阻止了。我禁用了 SElinux,它的工作。感谢大家的帮助。