【问题标题】:Alternative to file_get_contents?替代 file_get_contents?
【发布时间】:2011-04-28 03:29:58
【问题描述】:
$xml_file = file_get_contents(SITE_PATH . 'cms/data.php');

问题是服务器禁用了 URL 文件访问。我无法启用它,它是托管的东西。

所以问题是这样的。 data.php 文件生成 xml 代码。

如果不执行上述方法,如何执行并获取xml数据?

有可能吗?

【问题讨论】:

  • SITE_PATH 是您的网站的一部分吗?还是在别的地方?
  • 它是我网站的一部分。 SITE_PATH = 'mydomain.com';
  • 如果 mydomain.com 是运行代码的同一站点,则您不需要使用 http:// 请求来加载文件。事实上,这样做意味着您正在增加自己的带宽(http 请求和响应都将计入您的带宽总数的两倍)。即使您需要执行本地 PHP 程序并仅获取输出,也有其他不涉及使用 http 的方法来实现它。
  • 你试过用 curl 代替吗?

标签: php file-get-contents


【解决方案1】:

使用cURL。此函数是file_get_contents 的替代函数。

function url_get_contents ($Url) {
    if (!function_exists('curl_init')){ 
        die('CURL is not installed!');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

【讨论】:

  • 但我仍然收到“CURL 未安装!”但我启用了 php_curl 和 php_openssl 扩展
  • "CURL is not installed"表示需要安装cURL。现在这种情况很少见,大多数系统都默认安装了它。大多数基于 dpkg 的发行版都提供一个名为 php5_curl 的包,它带有正确的依赖项和配置指令。
【解决方案2】:

你应该试试这样的, 我正在为我的项目做这个,它是一个后备系统

//function to get the remote data
function url_get_contents ($url) {
    if (function_exists('curl_exec')){ 
        $conn = curl_init($url);
        curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($conn, CURLOPT_FRESH_CONNECT,  true);
        curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
        $url_get_contents_data = (curl_exec($conn));
        curl_close($conn);
    }elseif(function_exists('file_get_contents')){
        $url_get_contents_data = file_get_contents($url);
    }elseif(function_exists('fopen') && function_exists('stream_get_contents')){
        $handle = fopen ($url, "r");
        $url_get_contents_data = stream_get_contents($handle);
    }else{
        $url_get_contents_data = false;
    }
return $url_get_contents_data;
} 

以后你可以这样做

$data = url_get_contents("http://www.google.com");
if($data){
//Do Something....
}

【讨论】:

    【解决方案3】:

    是的,如果您禁用了 URL 包装器,您应该使用套接字,或者更好的是 cURL 库。

    如果它是您网站的一部分,请使用文件系统路径而不是 Web URL 来引用它。 /var/www/...,而不是http://domain.tld/...

    【讨论】:

      【解决方案4】:

      如果您尝试读取从没有 file_get_contents() 的 URL 生成的 XML,那么您可能需要查看 cURL

      【讨论】:

        【解决方案5】:

        如果文件是本地的,正如您对SITE_PATH 的评论所建议的那样,只需执行脚本并使用output control functions 将结果缓存在变量中即可:

        function print_xml_data_file()
        {
            include(XML_DATA_FILE_DIRECTORY . 'cms/data.php');
        }
        
        function get_xml_data()
        {
            ob_start();
            print_xml_data_file();
            $xml_file = ob_get_contents();
            ob_end_clean();
            return $xml_file;
        }
        

        如果它像许多其他人所说的那样远程curl 是要走的路。如果它不存在,请尝试socket_createfsockopen。如果没有任何效果...更改您的托管服务提供商。

        【讨论】:

          【解决方案6】:

          如果你有它,使用 curl 是你最好的选择。

          您可以通过phpinfo() 并在页面中搜索 curl 来查看它是否已启用。

          如果已启用,请尝试以下操作:

          $curl_handle=curl_init();
          curl_setopt($curl_handle, CURLOPT_URL, SITE_PATH . 'cms/data.php');
          $xml_file = curl_exec($curl_handle);
          curl_close($curl_handle);
          

          【讨论】:

            猜你喜欢
            • 2014-01-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-21
            • 2012-08-08
            • 2019-04-30
            • 2014-06-14
            • 1970-01-01
            相关资源
            最近更新 更多