【问题标题】:Server configuration by allow_url_fopen=0 in通过allow_url_fopen=0 配置服务器
【发布时间】:2014-03-07 19:21:01
【问题描述】:

运行脚本时出现以下错误。报错信息如下...

警告:file_get_contents() [function.file-get-contents]: https:// wrapper 在服务器配置中被 /home/satoship/public_html/connect.php 第 22 行的 allow_url_fopen=0 禁用

我知道这是一个服务器问题,但我需要对服务器做什么才能摆脱上述警告?

【问题讨论】:

  • 更改 php.ini allow_url_fopen=on ;p
  • 我已经这样做了,但它并没有解决问题。我可以访问服务器,但我不确定如何从那一端打开它
  • 别忘了重启apache sudo service apache2 restart
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserWeb Apps Stack ExchangeWebmaster Stack Exchange 会是一个更好的提问地点。
  • 如前所述,这是一个服务器配置问题。由于 ModSecurity 过度硬化,我在对我的一个服务器配置进行故障排除时遇到了它。也许您应该编辑问题,使其适合本网站。或者,您可以更改网站的章程。

标签: php warnings


【解决方案1】:

@blytung 有一个很好的函数来替换那个函数

<?php
$url = "http://www.example.org/";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($ch);
if (curl_errno($ch)) {
  echo curl_error($ch);
  echo "\n<br />";
  $contents = '';
} else {
  curl_close($ch);
}

if (!is_string($contents) || !strlen($contents)) {
echo "Failed to get contents.";
$contents = '';
}

echo $contents;
?>    

【讨论】:

    【解决方案2】:

    如果您无法修改 php.ini 文件,请使用 cURL: PHP Curl And Cookies

    这是我创建的一个示例函数:

    function get_web_page( $url, $cookiesIn = '' ){
            $options = array(
                CURLOPT_RETURNTRANSFER => true,     // return web page
                CURLOPT_HEADER         => true,     //return headers in addition to content
                CURLOPT_FOLLOWLOCATION => true,     // follow redirects
                CURLOPT_ENCODING       => "",       // handle all encodings
                CURLOPT_AUTOREFERER    => true,     // set referer on redirect
                CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
                CURLOPT_TIMEOUT        => 120,      // timeout on response
                CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
                CURLINFO_HEADER_OUT    => true,
                CURLOPT_SSL_VERIFYPEER => true,     // Validate SSL Cert
                CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
                CURLOPT_COOKIE         => $cookiesIn
            );
    
            $ch      = curl_init( $url );
            curl_setopt_array( $ch, $options );
            $rough_content = curl_exec( $ch );
            $err     = curl_errno( $ch );
            $errmsg  = curl_error( $ch );
            $header  = curl_getinfo( $ch );
            curl_close( $ch );
    
            $header_content = substr($rough_content, 0, $header['header_size']);
            $body_content = trim(str_replace($header_content, '', $rough_content));
            $pattern = "#Set-Cookie:\\s+(?<cookie>[^=]+=[^;]+)#m"; 
            preg_match_all($pattern, $header_content, $matches); 
            $cookiesOut = implode("; ", $matches['cookie']);
    
            $header['errno']   = $err;
            $header['errmsg']  = $errmsg;
            $header['headers']  = $header_content;
            $header['content'] = $body_content;
            $header['cookies'] = $cookiesOut;
        return $header;
    }
    

    注意:在重新访问此功能时,我注意到我在此代码中禁用了 SSL 检查。这通常是一件坏事,即使在我的特定情况下,我使用它的网站是本地的并且是安全的。因此,我已修改此代码以默认启用 SSL 检查。如果由于某种原因您需要更改它,您可以简单地更新 CURLOPT_SSL_VERIFYPEER 的值,但如果有人使用它,我希望代码在默认情况下是安全的。

    【讨论】:

      【解决方案3】:

      在您的 php 脚本中使用此代码(第一行)

      ini_set('allow_url_fopen',1);
      

      【讨论】:

      • 我在我的根目录 (public_html) 中创建了一个空的 php.ini 文件,它可以工作:)
      • 这项工作在 4.3.4 或之前的版本中。 4.3.4以后allow_url_fopen必须在php.ini中设置php.net/manual/en/ini.list.php
      • 据我所知allow_url_fopen不能在运行时设置
      【解决方案4】:

      编辑您的 php.ini,找到 allow_url_fopen 并将其设置为 allow_url_fopen = 1

      【讨论】:

      • Homse 主机因为 xss 而禁用它。蝙蝠建议。
      【解决方案5】:

      使用 relative 而不是绝对文件路径为我解决了这个问题。 我有同样的问题并设置allow_url_fopen=on 没有帮助。这意味着例如:

      使用 $file="folder/file.ext"; 代替 $file="https://website.com/folder/file.ext";

      $f=fopen($file,"r+");
      

      【讨论】:

        【解决方案6】:

        这是一个非常简单的问题

        这是解决此问题的最佳方法。

        第 1 步:登录您的 cPanel(http://website.com/cpanelhttp://cpanel.website.com)。

        第 2 步:软件 -> 选择 PHP 版本

        第 3 步:更改您当前的 PHP 版本:5.6

        第 3 步:点击“设置为当前”[享受]

        【讨论】:

        • 这可能起作用的唯一原因是服务器上特定 PHP 版本的配置文件不同。当您所要做的就是更新 INI 并重新启动 Apache 时,更改您的 PHP 版本不是一个合理的解决方案
        • 嗯,这是本页唯一合乎逻辑的解决方案。
        • 正是 Mavelo。你也无法知道那个版本的配置。
        猜你喜欢
        • 1970-01-01
        • 2018-01-22
        • 2019-03-06
        • 2017-11-24
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 2019-12-18
        相关资源
        最近更新 更多