函数file_get_contents()有什么替代方法吗?

时间:2009-11-26 15:19:26

标签: php

在我的网络托管服务器中,file_get_contents()功能被禁用。我正在寻找替代方案。请帮忙

9 个答案:

答案 0 :(得分:4)

file_get_contents()几乎可以做到以下几点:

$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);

由于file_get_contents()被禁用,我相信上述内容不会有效。

根据您尝试阅读的内容,根据我的经验,主机通常会禁用远程文件读取,您可能还有其他选择。如果您正在尝试读取远程文件(通过网络,即http等),您可以查看cURL库函数

答案 1 :(得分:3)

您可以使用fopen打开文件,获取文件的内容并使用它们?也许cURL对你有用吗? http://php.net/manual/en/book.curl.php

答案 2 :(得分:3)

一切。

function ff_get($f) {
        if (!file_exists($f)) { return false; }
        $result = @file_get_contents($f);
        if ($result) { return $result; }
        else {
            $handle = @fopen($f, "r");
            $contents = @fread($handle, @filesize($f));
            @fclose($handle);
            if ($contents) { return $contents; }
            else if (!function_exists('curl_init')) { return false; }
            else {
                $ch = @curl_init();
                @curl_setopt($ch, CURLOPT_URL, $f);
                @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                $output = @curl_exec($ch);
                @curl_close($ch);
                if ($output) { return $output; }
                else { return false; }}}}

答案 3 :(得分:2)

禁用file_get_contents()的最明显原因是因为它首先将整个文件加载到主内存中。如果您的托管服务商为您分配了非常低的内存限制,则 code_burgar 中的代码可能会出现问题。
作为一般规则,仅当您确定要加载的文件很小时才使用file_get_contents()(或-replacement)。使用SplFileObject,您可以通过方便的界面逐行浏览文件。如果你的文件很大,请使用它。

答案 4 :(得分:2)

试试这段代码:

$ch = curl_init();
$timeout = 5; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$content = curl_exec($ch);
curl_close($ch);

答案 5 :(得分:1)

我假设您尝试通过http://或ftp://远程访问文件。

理论上,有fread()之类的替代品,如果一切都失败了,fsockopen()。 但如果提供者对他们所做的事情有任何好处,那么他们也会被禁用。

答案 6 :(得分:0)

使用PEAR package Compat。它就像使用PHP编码解决方案正式替换原生PHP函数。

require_once 'PHP/Compat.php';
PHP_Compat::loadFunction('file_get_contents');

或者,如果您不想使用该课程,可以手动加载。

require_once 'PHP/Compat/Function/file_put_contents.php';

  • 所有compat函数都由if(!function_exists())包装,因此如果您的webhoster稍后升级服务器功能,则它确实会失败。
  • 所有函数都可以与原生PHP完全一样使用,也可以使用相关的常量!
  • List of all available functions

答案 7 :(得分:0)

如果您要做的只是触发给定网址的点击而不需要阅读输出,则可以使用curl(),前提是您的网络主机已在您的服务器上启用它。

文档here给出了使用curl调用url的示例。

答案 8 :(得分:0)

如果一切都失败了,总会有cURL。它安装的可能性很大。