最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

php判断图片是否存在

来源:动视网 责编:小采 时间:2020-11-27 15:20:09
文档

php判断图片是否存在

php判断图片是否存在:在我们日常的开发中,经常需要用到判断图片是否存在,存在则显示,不存在则显示默认图片,那么我们怎么判断呢?getimagesize()函数(推荐学习:PHP编程从入门到精通)getimagesize 函数并不属于 GD 扩展的部分,标准安装的 PHP 都可以使用这个函数。可以
推荐度:
导读php判断图片是否存在:在我们日常的开发中,经常需要用到判断图片是否存在,存在则显示,不存在则显示默认图片,那么我们怎么判断呢?getimagesize()函数(推荐学习:PHP编程从入门到精通)getimagesize 函数并不属于 GD 扩展的部分,标准安装的 PHP 都可以使用这个函数。可以
 在我们日常的开发中,经常需要用到判断图片是否存在,存在则显示,不存在则显示默认图片,那么我们怎么判断呢?

getimagesize()函数(推荐学习:PHP编程从入门到精通)

getimagesize 函数并不属于 GD 扩展的部分,标准安装的 PHP 都可以使用这个函数。可以先看看这个函数的文档描述:

http://php.com/manual/zh/function.getimagesize.php

如果指定的文件如果不是有效的图像,会返回 false,返回数据中也有表示文档类型的字段。如果不用来获取文件的大小而是使用它来判断上传文件是否是图片文件,看起来似乎是个很不错的方案,当然这需要屏蔽掉可能产生的警告,比如代码这样写:

<?php
$filesize = @getimagesize('/path/to/image.png');
if ($filesize) {
 do_upload();
}

# 另外需要注意的是,你不可以像下面这样写:
# if ($filesize[2] == 0)
# 因为 $filesize[2] 可能是 1 到 16 之间的整数,但却绝对不对是0。

但是如果你仅仅是做了这样的验证,那么很不幸,你成功的在代码里种下了一个 webshell 的隐患。

要分析这个问题,我们先来看一下这个函数的原型:

static void php_getimagesize_from_stream(php_stream *stream, zval **info, INTERNAL_FUNCTION_PARAMETERS){
 ...
 itype = php_getimagetype(stream, NULL TSRMLS_CC); switch( itype) {
 ...
 }
 ...
}static void php_getimagesize_from_any(INTERNAL_FUNCTION_PARAMETERS, int mode) {
 ...
 php_getimagesize_from_stream(stream, info, INTERNAL_FUNCTION_PARAM_PASSTHRU);
 php_stream_close(stream);
}

PHP_FUNCTION(getimagesize)
{
 php_getimagesize_from_any(INTERNAL_FUNCTION_PARAM_PASSTHRU, FROM_PATH);
}

限于篇幅上面隐藏了一些细节,现在从上面的代码中我们知道两件事情就够了:

最终处理的函数是 php_getimagesize_from_stream

负责判断文件类型的函数是 php_getimagetype

接下来看一下 php_getimagetype 的实现:

PHPAPI int php_getimagetype(php_stream * stream, char *filetype TSRMLS_DC){
 ... if (!memcmp(filetype, php_sig_gif, 3)) { return IMAGE_FILETYPE_GIF;
 } else if (!memcmp(filetype, php_sig_jpg, 3)) { return IMAGE_FILETYPE_JPEG;
 } else if (!memcmp(filetype, php_sig_png, 3)) {
 ...
 }
}

文档

php判断图片是否存在

php判断图片是否存在:在我们日常的开发中,经常需要用到判断图片是否存在,存在则显示,不存在则显示默认图片,那么我们怎么判断呢?getimagesize()函数(推荐学习:PHP编程从入门到精通)getimagesize 函数并不属于 GD 扩展的部分,标准安装的 PHP 都可以使用这个函数。可以
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top