file_get_contents无法读取本地文件

5
我最近将XAMPP从PHP 5.2升级到了5.3.1版本。我似乎在使用file_get_contents()函数时遇到了问题。我可以使用该函数获取类似于"http://www.google.com"的内容,但是当我在本地设置的域名上使用它时(例如"http://localhost/my_dir/my_css_file.css"),它会超时。我不太确定问题出在哪里。如果这是一个bug,是否有可行的替代方案?请给予指导。

你不能使用相对路径吗? - David Yell
4个回答

6

尽量使用include()代替file_get_contents()

<?php include($_SERVER['HTTP_HOST'] . "/my_dir/my_css_file.css"); ?>

或者
<?php include($_SERVER['DOCUMENT_ROOT'] . "/my_dir/my_css_file.css"); ?>

您的评论所对应的更新:

$string = get_include_contents('somefile.php');

function get_include_contents($filename) {
    if (is_file($filename)) {
        ob_start();
        include $filename;
        $contents = ob_get_contents();
        ob_end_clean();
        return $contents;
    }
    return false;
}

这将把文件数据获取到变量$string中。

我需要将这些数据存储到一个变量中,所以 file_get_contents 是必不可少的。不确定是否可以使用 include() 实现相同的功能? - ObiHill
@Chuck - 你检查过文件权限了吗? - SimonDowdles
1
@lgnatz - 对 file_get_contents() 的巧妙变化,我很喜欢。 - SimonDowdles
这看起来似乎可以行得通。不幸的是,我的页面上有一个独立的ob_start()实现正在进行中。我正在尝试看看能否使用CURL解决这个问题。 - ObiHill
如果URL只能通过HTTP请求访问,例如本地WordPress RSS源,则此方法无效。 - nnyby

1

通过使用 CURL 解决了这个问题。以下是代码。它可以用于远程文件,例如 http://yourdomain.com/file.ext

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, ''.$file_path_str.'');
curl_setopt($ch, CURLOPT_HTTPGET, 1);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_USERAGENT, sprintf("Mozilla/%d.0",rand(4,5)));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$curl_response_res = curl_exec ($ch);
curl_close ($ch);

我不能使用@James的解决方案,因为我在我的代码中使用了ob_startob_flush,这样会对我造成麻烦。


1

你是否在使用Windows系统?

在Windows、file_get_contents和localhost的组合中存在一个Bug,该Bug将不会得到修复。请参见Bug 38826Bug 40881

尝试使用127.0.0.1代替localhost,或设置任何不同的域名。然后您应该可以正常工作。


是的,我使用的是Windows操作系统。实际上,我并没有直接使用localhost。我在我的hosts文件和apache.conf文件中定义了许多域名。因此,我可以设置一些类似于http://mydomain/myfiledir/myfile.css这样的东西。有什么解决方法吗?! - ObiHill

0

我最近解决了这个问题。在我的Windows机器上,文件夹名称中包含空格是可以接受的。然而,PHP无法读取这个路径。

我改变了文件夹名称。

原来的名称:

 C:\Users\JasonPC\Desktop\Jasons Work\Project

To:

 C:\Users\JasonPC\Desktop\JasonsWork\Project

接着PHP就又能读取我的文件了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接