|-摘 getimagesize 函数的使用-中文文件名问题-getimagesize 函数不是完全可靠的
在用getimagesize处理中文名图片时报错。failed to open stream: No such file or directory in D:\AppServ\www\img.php on line...
在用getimagesize处理中文名图片时报错。
failed to open stream: No such file or directory in D:\AppServ\www\img.php on line 4网上查也一下没找到是不是getimagesize不支持中文,我是在windows上执行代码的
网上查了下,可以这样,把文件名重命名,然后再用getimgesize函数
$filename='测试001.jpg'; $newFileName='ceshi001.jpg'; rename(iconv('UTF-8','GBK',$filename), iconv('UTF-8','GBK',$newFileName)); $filename=$newFileName; $image=__DIR__.DIRECTORY_SEPARATOR.$filename; $imageInfo=getimagesize($image);
OK了,下面是转载内容,文章名:getimagesize 函数不是完全可靠的
以下是转载https://segmentfault.com/a/1190000003911296
getimagesize
函数并不属于 GD 扩展的部分,标准安装的 PHP 都可以使用这个函数。可以先看看这个函数的文档描述:http://php.net/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_sig_gif
php_sig_png
等是在文件头部定义的:
...
浏览更多内容请先登录。
立即注册
更新于:2018-02-02 20:37:40
相关内容
在太保工作中遇到的互联网以及内网问题记录
IE如何取消阻止跨站脚本
电销三期打印要安装PageOn的问题
一些公司网址浏览器兼容性问题
网址打开页面显示不全,增值税管理系统页面显示不全
UCStar 聊天记录存在哪里
内网用UcStar聊天记录文件存放路径
公司内网浏览器设置问题
各种应用安装包括驱动程序都要内网的管理员账号才能安装
绿联USB声卡虚拟7.1驱动-绿联官网地址
WEB技术
WEB技术之前端技术
WEB技术之后端技术
WEB应用转手机APP,手机APP制作平台推荐
WEB应用与手机APP
Android相关
2017 年 Web 开发工程师技术发展路线图
session:手动删除客户端上的所有cookie,再次访问的时候为什么还是登录状态?
WEB技术之前端技术2
互联网相关
2008年通过互联网领袖扑克牌看中国互联网形势
我用搜索引擎中遇到的问题和心得
PHP 和时间时区相关的函数
php7函数的数组参数,传递规律。
推荐内容