模块prestashop无法运行file_get_contents

时间:2017-03-10 05:19:54

标签: php prestashop

我创建模块并使用file_get_content函数,但无法成功。

function openURL($url, $use_include_path = false, $stream_context = null, $curl_timeout = 500)
{
    if ($stream_context == null && preg_match('/^https?:\/\//', $url)) {
        $stream_context = @stream_context_create(array('http' => array('timeout' => $curl_timeout)));
    }
    print_r($stream_context);
    if (in_array(ini_get('allow_url_fopen'), array('On', 'on', '1')) || !preg_match('/^https?:\/\//', $url)) {
        return file_get_contents($url, $use_include_path, $stream_context);
    } elseif (function_exists('curl_init')) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($curl, CURLOPT_TIMEOUT, $curl_timeout);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
        if ($stream_context != null) {
            $opts = stream_context_get_options($stream_context);
            if (isset($opts['http']['method']) && Tools::strtolower($opts['http']['method']) == 'post') {
                curl_setopt($curl, CURLOPT_POST, true);
                if (isset($opts['http']['content'])) {
                    parse_str($opts['http']['content'], $post_data);
                    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
                }
            }
        }
        $content = curl_exec($curl);
        curl_close($curl);
        return $content;
    } else {
        return false;
    }
}

filet_get_content函数出错:

Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known

请帮忙 感谢

3 个答案:

答案 0 :(得分:1)

这意味着您的服务器无法连接到外部世界

鉴于DNS问题,这可能无法改变任何内容

因此,如果您有权限,请尝试将/etc/resolv.conf文件中的名称服务器更改为其他名称服务器。

httpd允许连接外部。检查你的selinux政策。这有助于我解决连接问题:

setsebool -P nis_enabled 1 setsebool -P httpd_can_network_connect 1

答案 1 :(得分:1)

你必须仔细检查两件事:

  • 服务器(防火墙和DNS)配置。
  • Php配置(可能阻止了file_get_contents和curl)

虽然,为了尊重Prestashop的标准,您应该使用Tools :: file_get_contents(),它将围绕调试函数包装您的请求。

答案 2 :(得分:0)

请检查您从中获取内容的网址。可能是目标网址不起作用还是不存在?