【问题标题】:file_get_contents giving error Filename cannot be emptyfile_get_contents 给出错误文件名不能为空
【发布时间】:2015-03-08 17:07:05
【问题描述】:

我有一个 PHP 脚本在执行时抛出错误。

警告:file_get_contents(): Filename cannot be empty in C:\Apache24\htdocs\image\test2.php on line 68`

警告:exif_imagetype(): Filename cannot be empty in C:\Apache24\htdocs\image\test2.php on line 72`

基本上,脚本会显示来自 rss 提要的图像,但问题不是只显示所有图像。

这是脚本

error_reporting(E_ALL);
ini_set("display_errors", 1);

$url = "http://www.sahafah.net/rss.php";

$rss = file_get_contents($url);

ini_set('mbstring.substitute_character', "none");
$rss1= mb_convert_encoding($rss, 'UTF-8', 'UTF-8');
$rss3 = simplexml_load_string($rss1);
if($rss3)
{
    $items = $rss3->channel->item;
    foreach($items as $item)
    {
        $title = $item->title;
        $link = $item->link;
        $published_on = $item->pubDate;
        $description = $item->description;
        $category = $item->category;
        $guid = $item->guid;
        
        $string2 = $item->description;
        preg_match('/http.*.jpg/',$string2,$match2);
        $convert = implode(",", $match2);
        
        // Read image path, convert to base64 encoding
        $imageData = base64_encode(file_get_contents($convert));
        
        // Format the image SRC:  data:{mime};base64,{data};
        $src = 'data: '.exif_imagetype($convert).';base64,'.$imageData;
        
        // Echo out a sample image
        echo '<img src="', $src, '">';
    }
}

【问题讨论】:

  • 第 68 行和第 72 行是哪一行?每当我在午餐时遇到错误时,我都会检查线路,但如果没有数字,还不如回到我的三明治
  • 我可以猜到,但它有助于显示线条。显然,您的 $convert 末尾没有文件。当 file_get_contents 返回 false 时捕获 $convert 并检查它以确认它们最后不是没有文件
  • @Mike Miller 这里是第 68 行 $imageData = base64_encode(file_get_contents($convert)); 和第 72 行 $src = 'data: '.exif_imagetype($convert).';base64,'.$imageData;
  • "$convert = implode(",", $match2);" - 你显然在这里组装了一个数组,当然php找不到那个文件名..
  • @ Zencode.dk,我必须从数组转换为字符串,这就是为什么我使用$convert = implode(",", $match2);

标签: php


【解决方案1】:

就像许多 PHP 问题一样,答案是您的代码实际上没有任何问题。您看到的不是错误而是警告,这些将在生产中被抑制,您的代码将正常工作。修复警告/通知是一个良好实践的问题,无论您是否打扰,这都取决于您。但是,如果您想摆脱它们,您可以使用以下方式包装 file_get_contents 的任何使用:

if(file_exists($convert)){

    // Read image path, convert to base64 encoding
    $imageData = base64_encode(file_get_contents($convert));

    // Format the image SRC:  data:{mime};base64,{data};
    $src = 'data: '.exif_imagetype($convert).';base64,'.$imageData;

    // Echo out a sample image
    echo '<img src="', $src, '">';

}

或者,如果您不关心警告和通知,您可以在代码顶部执行以下操作:

error_reporting(E_ERROR);

这意味着打印到屏幕上的唯一内容将是实际错误,您不必被警告和通知打扰。

【讨论】:

  • 然后您尝试获取的文件将返回 false 到 file_exists() - 这是预期的,因为您收到文件不存在的警告。所有证据都指向不存在的文件
  • 你能分享其中一个的路径吗?
  • 谢谢 Mike Mille,我修复了我的代码,而不是 file_exists,我使用了 if(!empty($convert)),我的代码运行顺利,这是你的主意。再次感谢......
  • 只要它对你有用,那就太好了。我会警惕您正在使用的测试,好像 $convert 包含任何它将通过该测试但不会有 file_get_contents(); 的有效文件 url;但是它不会杀死你的代码,所以可能不值得流泪
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多