我用$_FILES上传文件后,根据$_FILES['userfile']['type']来判断文件类型,可是为什么有的jpg或gif文件行,有些就不行,这是为什么?我查 to cokeyang(西北狼)有的图片头文件损坏!所以出不来!有太多的图片都不能上传,好像不能贴的要比能贴的多的多,我也不知道怎么回事这个问题没有人知道吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 留意下大小写问题jpg或gif GPG GIF GPEG 什么大小写问题?我是这样写代码的 // 判断文件类型,自动获取文件扩展名 switch ($_FILES['userfile']['type']) { case "image/pjpeg": $fileextname = "jpg"; break; case "image/gif": $fileextname = "gif"; break; case "image/x-png": $fileextname = "png"; break; case "application/x-shockwave-flash": $fileextname = "swf"; break; case "text/plain": $fileextname = "txt"; break; case "application/msword": $fileextname = "doc"; break; case "application/x-zip-compressed": $fileextname = "zip"; break; }我用echo输出,发现凡是不能上传的文件,$_FILES['userfile']['type'])的值为空。这是怎么回事啊? 何必这么麻烦呢 $name=split("\.",$userfile_name); $counter=count($name)-1; $Size=filesize($lob_upload1); $mFileData=addslashes(fread(fopen($lob_upload1,"r"),$Size));//图片内容 $pre=$name[count($name)-1];//后缀 不好意思,有点小错误,把lob_upload1换成userfile To: dxflingxing(dxf零星)你这样的话,不是只看文件名的扩展名了吗,那可不一定是真正的扩展名,万一是一个exe可执行文件怎么办,所以我想最好能读文件头,而不是表面上看文件扩展名。你理解我的意思吗? 上传会检查文件头的,你把一个EXE文件改成GIF文件,上传还是会认知这是个EXE文件,如果改了文件头还能运行也见鬼了。 1、检查一下PHP.ini里的 register_globals 是On 还是off?如果是off的话把它改成on2、判断函数里是否将提交的变量进行全局化处理??3、不把你的代码作为函数测试我也曾经出过这样的错误 客户端上传的时候提交的文件file名会以$file_name表现出来,这不是说改就改的如果恶意修改了的话那还能提交到数据库么?你可以对想要的类型进行进一步的设定啊,保留想要的类型,过滤掉不想要的。 To: dxflingxing(dxf零星)不好意思,我不明白你的意思。我的意思是:为什么我在本机上明明是很好的Gif图片,为什么上传后由PHP判断(我估计PHP是读文件头的)得到的类型为空,即$_FILES['userfile']['type']为空 To: meikeer(美可儿)1、检查一下PHP.ini里的 register_globals 是On 还是off?如果是off的话把它改成on我用phpinfo()看了服务器,确实是off,但我没有权限修改,是别人的机器,我只是借用空间而已。另外,我在想,这个跟我所讨论的问题有关吗,关键是有些图片文件行,有些又不行,而所有不行的文件,它的$_FILES['userfile']['type']的值为空真是很奇怪,明明是一个在本机能看的图片,到服务器上去判断时,PHP却不认识了。 我曾经的错误是写一个论坛时在发贴确认函数里标明了全局变量,在编辑贴确认函数时COPY了发贴确认函数但没有标明变量是global的这个就不太好说了,看看图片的大小呢?如果可以提供一个客户端和服务器端的代码让我们看看呢?[email protected] 呵呵,奇怪呢...把你上传后不能读的文件发个来看看:) [email protected]我都是这样用的$picMimeType = array( "image/jpeg", "image/gif", "image/x-png", "image/png", "image/pjpeg", "image/bmp", "image/cgm", "image/svg+xml", "image/tiff", "image/tiff-fx", "image/x-icon", "image/x-xbitmap", "image/x-xpixmap", "image/x-xwindowdump", "image/vnd.wap.wbmp" );//图片类型if(in_array($hp_uploadFileName_type,$picMimeType)){ if($hp_uploadFileName != "none" && is_uploaded_file($hp_uploadFileName)) { @move_uploaded_file($hp_uploadFileName,$dst); @chmod($dst,0777); }}另外,只判断扩展名用处不怎么的准确的.对于有些文件还是会运行的 我也遇到类似问题,请问各位是如何解决的,服务器的register_globals=0ff我是无法修改的! 我发现认不出type的jpg文件很多是PhotoShop编辑过的。我也记得PhotoShop会破坏图片的Exif信息。 图片文件格式不对,网页里面必须是RGB的,你的文件可能是印刷格式的,用photoshop打开看看就知道了,然后改过来就行了 我这两天也遇到这个问题。一直没找到原因。输出$_FILE['xxxx']数组内容后,有文件名,但无其它信息,比如type为空。突然发现error为2,查了手册。------------------UPLOAD_ERR_FORM_SIZE值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。------------------原来我在表单中加了MAX_FILE_SIZE的隐含字段,值设的小了一些,结果图片没有真正上传,所以系统也无法解析出上传文件的其它信息。建议楼主也看看error是什么,手册中有对应的错误说明。问题应该也能找出来。 用这个看看有什么错误: switch($_FILES['upfile']['error']) { case UPLOAD_ERR_FORM_SIZE : $msg='上传的文件太大'; break; case UPLOAD_ERR_INI_SIZE : $msg='上传文件超过本服务器设置'; break; case UPLOAD_ERR_PARTIAL : $msg='文件只有部分被上传'; break; case UPLOAD_ERR_NO_FILE : $msg='没有文件上传'; break; }取得扩展名用: //文件扩展名 function file_ext($filename) { return substr(strrchr($filename, '.'), 1); } 数据读取自动翻译 多个mysql的问题。 哪位PHP高手写过亚马逊支付方式的代码(Amazon FPS) php中一个页面上如何实现两次的数据提交 thinkphp实例化数据表无前缀该怎么办? 多选SELECT中的数据如何保存到数据库? 本机测试可以,但服务器上就不能上传图片了。 邮件服务器得一个问题,关于http-header PHP上传好像只能上传一个文件,但我想实现上传一个目录。如何实现? 请问那里可以下载phpMyAdmin??谢谢 zend 有没有汉化版的? cron和shell的問題
GPG GIF
GPEG
switch ($_FILES['userfile']['type'])
{
case "image/pjpeg":
$fileextname = "jpg";
break;
case "image/gif":
$fileextname = "gif";
break;
case "image/x-png":
$fileextname = "png";
break;
case "application/x-shockwave-flash":
$fileextname = "swf";
break;
case "text/plain":
$fileextname = "txt";
break;
case "application/msword":
$fileextname = "doc";
break;
case "application/x-zip-compressed":
$fileextname = "zip";
break;
}
我用echo输出,发现凡是不能上传的文件,$_FILES['userfile']['type'])
的值为空。这是怎么回事啊?
$counter=count($name)-1;
$Size=filesize($lob_upload1);
$mFileData=addslashes(fread(fopen($lob_upload1,"r"),$Size));//图片内容
$pre=$name[count($name)-1];//后缀
你理解我的意思吗?
如果恶意修改了的话那还能提交到数据库么?
你可以对想要的类型进行进一步的设定啊,保留想要的类型,过滤掉不想要的。
不好意思,我不明白你的意思。我的意思是:为什么我在本机上明明是很好的Gif图片,为什么上传后由PHP判断(我估计PHP是读文件头的)得到的类型为空,即
$_FILES['userfile']['type']
为空
1、检查一下PHP.ini里的 register_globals 是On 还是off?如果是off的话把它改成on我用phpinfo()看了服务器,确实是off,但我没有权限修改,是别人的机器,我只是借用空间而已。
另外,我在想,这个跟我所讨论的问题有关吗,关键是有些图片文件行,有些又不行,而所有不行的文件,它的
$_FILES['userfile']['type']
的值为空
真是很奇怪,明明是一个在本机能看的图片,到服务器上去判断时,PHP却不认识了。
如果可以提供一个客户端和服务器端的代码让我们看看呢?[email protected]
$picMimeType = array(
"image/jpeg",
"image/gif",
"image/x-png",
"image/png",
"image/pjpeg",
"image/bmp",
"image/cgm",
"image/svg+xml",
"image/tiff",
"image/tiff-fx",
"image/x-icon",
"image/x-xbitmap",
"image/x-xpixmap",
"image/x-xwindowdump",
"image/vnd.wap.wbmp"
);//图片类型if(in_array($hp_uploadFileName_type,$picMimeType))
{
if($hp_uploadFileName != "none" && is_uploaded_file($hp_uploadFileName))
{
@move_uploaded_file($hp_uploadFileName,$dst);
@chmod($dst,0777);
}
}另外,只判断扩展名用处不怎么的准确的.对于有些文件还是会运行的
我也记得PhotoShop会破坏图片的Exif信息。
------------------
UPLOAD_ERR_FORM_SIZE
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
------------------
原来我在表单中加了MAX_FILE_SIZE的隐含字段,值设的小了一些,结果图片没有真正上传,所以系统也无法解析出上传文件的其它信息。建议楼主也看看error是什么,手册中有对应的错误说明。问题应该也能找出来。
switch($_FILES['upfile']['error'])
{
case UPLOAD_ERR_FORM_SIZE :
$msg='上传的文件太大';
break;
case UPLOAD_ERR_INI_SIZE :
$msg='上传文件超过本服务器设置';
break;
case UPLOAD_ERR_PARTIAL :
$msg='文件只有部分被上传';
break;
case UPLOAD_ERR_NO_FILE :
$msg='没有文件上传';
break;
}
取得扩展名用:
//文件扩展名
function file_ext($filename)
{
return substr(strrchr($filename, '.'), 1);
}