fread() expects parameter 1 to be resource 原因与解决方法

今天在用“PHP通过获取头信息判断图片类型的方法”的时候,报错如下:

Warning: fread() expects parameter 1 to be resource, boolean given in

 

1、fopen()

Warning: fopen(chrome.jpg): failed to open stream: No such file or directory in F:\phpStudy\WWW\200.php on line 2

中文翻译

警告: fopen(chrome.jpg):无法打开流:没有这样的文件或目录

 

2、fread()

Warning: fread() expects parameter 1 to be resource, boolean given in F:\phpStudy\WWW\200.php on line 4

中文翻译

警告:fread()要求参数1为资源,给定布尔值

 

3、fclose() 

Warning: fclose() expects parameter 1 to be resource, boolean given in F:\phpStudy\WWW\200.php on line 12

中文翻译

警告:fclose()要求参数1为资源,给定布尔值

 

原因:

其实,原因很简单,这是因为 fopen() 打开文件失败,没有返回正确的流资源。

 

解决方法

像这种解决方法很简单,我们可以直接在 fopen()、fread()、fclose() 前面加个 @ 符号。

例如:

<?php
$file = @fopen('chrome.jpg', "rb");
//var_dump($file);
$bin = @fread($file, 15); //只读15字节 各个不同文件类型,头信息不一样。
//var_dump($bin);
if(true === get_type_list($bin)) {
    echo '该图片在指定的图片格式中';
}
else{
    echo '该图片上传格式错误';
  }
@fclose($file );

 

最后:

我现在来说说我这里:为什么这里会造成fopen() 打开失败的?

由于我这里是做“PHP通过获取头信息判断图片类型的方法”,于是我把 快捷方式的 chrome.exe 重命名为 chrome.jpg 。由于快捷方式根本不是一个实体,是一个虚拟地址,它的目标指向位置才是实体,打开失败也就很正常了。我再把实体位置的 chrome.exe 重名为  chrome.jpg,就算fopen()、fread()、fclose() 前面不加 @ 符号也不会报错了。

 

我的建议还是大家在 fopen()、fread()、fclose() 前面加上 @ 符号。

不管打开的是实体还是虚拟地址都不会报错了。

    A+
发布日期:2020年07月02日 13:27:48  所属分类:PHP
最后更新时间:2020-07-02 18:56:26
评分: (1 票;平均数5.00 ;最高评分 5 ;用户总数1;总得分 5;百分比100.00)
付杰
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
  • ¥ 199.9元
  • 市场价:20000元
服务器管理面板/主机控制面板“安装”服务
服务器管理面板/主机控制面板“安装”服务
  • ¥ 9.9元
  • 市场价:49.9元
wordpress站群服务 泛解析二级域名 二级目录站群
wordpress站群服务 泛解析二级域名 二级目录站群
  • ¥ 1999.9元
  • 市场价:4800元
wp discux 帝国 dedecms phpcms等快速建站
wp discux 帝国 dedecms phpcms等快速建站
  • ¥ 99.9元
  • 市场价:499.9元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: