【问题标题】:Curl work in php-cli and cli, but not work in phpcurl 在 php-cli 和 cli 中工作,但在 php 中不起作用
【发布时间】: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_curlphp_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,它的工作。感谢大家的帮助。

标签: php linux curl


【解决方案1】:

如果您发现问题出在 SELinux 上,您可以允许 httpd 使用 setsebool -P httpd_can_network_connect on 访问网络,并避免禁用所有 SELinux。见https://stackoverflow.com/a/50808173/404960

【讨论】:

    猜你喜欢
    • 2017-08-04
    • 2014-08-21
    • 1970-01-01
    • 2010-11-20
    • 2017-02-01
    • 2012-10-24
    • 2011-12-23
    • 2013-07-08
    • 1970-01-01
    相关资源
    最近更新 更多