【问题标题】:file_get_contents not working for local filesfile_get_contents 不适用于本地文件
【发布时间】:2011-03-28 07:50:37
【问题描述】:

我最近将我的 XAMPP 从 PHP 5.2 升级到 5.3.1

我似乎遇到了 file_get_contents() 的问题。

我可以使用该函数来获取类似“http://www.google.com”的内容,但是当我在本地设置的域上使用它时它会超时,例如“http://localhost/my_dir/my_css_file.css”。

我不太确定问题出在哪里。如果是错误,是否有可行的替代方案?

请多多指教。

【问题讨论】:

  • 不能使用相对路径吗?

标签: php file-get-contents


【解决方案1】:

尝试使用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"); ?>

更新对应您的 cmets:

$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() 做同样的事情?
  • @Chuck - 你检查过你的文件权限了吗?
  • @lgnatz - file_get_contents() 的不错变化,我喜欢它。
  • 这看起来可行。不幸的是,我的页面上有一个单独的 ob_start() 实现。我正在尝试使用 CURL 解决问题。
  • 如果 URL 只能通过 http 请求访问,这不起作用,例如本地 Wordpress RSS 提要。
【解决方案2】:

你有没有机会使用 Windows 系统? Windows、file_get_contents 和 localhost 的组合中存在一个无法修复的错误。见Bug 38826Bug 40881

尝试使用 127.0.0.1 代替 localhost 或设置任何不同的域名。然后你应该让它工作。

【讨论】:

  • 是的,我在 Windows 上。我实际上并没有使用 localhost 本身。我在我的 hosts 文件和 apache.conf 中定义了很多域名。所以我可以设置类似mydomain/myfiledir/myfile.css 的东西。有解决办法吗?!
【解决方案3】:

使用 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,所以这对我来说会搞砸。

【讨论】:

    【解决方案4】:

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

    我更改了我的文件夹名称

    发件人:

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

    收件人:

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

    然后 PHP 能够再次读取我的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 2017-03-02
      • 2011-06-22
      • 1970-01-01
      相关资源
      最近更新 更多