Php 文件上传不适用于IE,但适用于FF、Chrome和Safari

Php 文件上传不适用于IE,但适用于FF、Chrome和Safari,php,Php,我被难住了。我创建了一个上传图像的过程,它可以在除Internet Explorer之外的所有浏览器中运行。我没有检查IE7,但IE8似乎没有检查文件扩展名。我不断得到错误“你必须上传一个jpg,gif,bmp。” /*图像上传*/ $target_path=“img/”; $image=$\u文件['crebusimage']; $image['name']=mysql\u real\u escape\u字符串($image['name']); $target_path.=$crebotime

我被难住了。我创建了一个上传图像的过程,它可以在除Internet Explorer之外的所有浏览器中运行。我没有检查IE7,但IE8似乎没有检查文件扩展名。我不断得到错误“你必须上传一个jpg,gif,bmp。”

/*图像上传*/
$target_path=“img/”;
$image=$\u文件['crebusimage'];
$image['name']=mysql\u real\u escape\u字符串($image['name']);
$target_path.=$crebotime.。“..$image['name'];
$valid_types=数组(“image/jpg”、“image/jpeg”、“image/bmp”、“image/gif”、“image/jpe”、“image/jfif”、“image/png”);
$field='crebusimage';
if(strlen($image['name'])==0){
$form->setError($field,“*请选择图像”);
}elseif(!in_数组($image['type'],$valid_types)){
$form->setError($field,“*您必须上传jpg、gif或bmp”);
}否则{
$busimg=$CREBISTME.'...$image['name'];
移动上传的文件($image['tmp\u name',$target\u path);
}
商业标志
(100Kb或以下100x100px)

如何在邪恶的IE中实现这一功能。

您应该检查文件扩展名,而不是随图像一起发送的标题。也许IE不会发送这些文件,因为它们可能是伪造的。

您应该检查文件扩展名,而不是随图像一起发送的标题。也许IE不会发送这些文件,因为它们可能是伪造的。

通过执行以下命令,查看您在$\u文件数组中得到了什么:

echo '<pre>';
print_r($_FILES);
echo '</pre>';
echo';
打印(美元文件);
回声';

和用于确定图像类型,因为@Juddling已经正确指出,mime类型可能被欺骗。

通过执行以下命令,查看$\u文件数组中的内容:

echo '<pre>';
print_r($_FILES);
echo '</pre>';
echo';
打印(美元文件);
回声';

并用于确定图像类型,因为@Juddling正确指出,mime类型可能会被欺骗。

如果上载JPEG,它们通常会与IE中的mimetype image/pjpeg一起发送


具体来说,我在csv文件中遇到了这个问题。Windows计算机将根据您打开csv文件所安装的内容,为您提供不同的模拟类型/(抱怨)

如果您正在上传JPEG,它们通常会与IE中的mimetype image/pjpeg一起发送


具体来说,我在csv文件中遇到了这个问题。Windows计算机将根据您打开csv文件所安装的内容,为您提供不同的模拟类型/(抱怨)

我应该如何检查文件扩展名,我想这就是我对图像['type']所做的操作。$filename=basename($\u FILES['uploadedfile']['name'])$ext=substr($filename,strrpos($filename,'.')+1);如果($ext==“jpg”| |$ext==“png”| |$ext==“gif”){//那么请检查您的扩展名}否。您会惊讶于有多少png/gif被保存为jpg,反之亦然。你真的想看看头。如果我上传image.php并将头伪造为image/gif呢?我该如何检查文件扩展名,我想这就是我对image['type']所做的。$filename=basename($_FILES['uploadedfile']['name'])$ext=substr($filename,strrpos($filename,'.')+1);如果($ext==“jpg”| |$ext==“png”| |$ext==“gif”){//那么请检查您的扩展名}否。您会惊讶于有多少png/gif被保存为jpg,反之亦然。你真的想看看标题。如果我上传image.php并将标题伪装成image/gif呢?我得到:Array([name]=>image.jpeg[type]=>image/pjpeg[tmp_name]=>/var/tmp/php78z4j9[error]=>0[size]=>3026)pjpeg怎么了?与jpeg不同…@ivannovak-我现在可以看到问题,在$valid_types数组中没有pjpeg mime类型。添加“image/pjpeg”就可以了!我得到:数组([name]=>image.jpeg[type]=>image/pjpeg[tmp_name]=>/var/tmp/php78z4j9[error]=>0[size]=>3026)pjpeg怎么了?与jpeg不同…@ivannovak-我现在可以看到问题,在$valid_types数组中没有pjpeg mime类型。添加“image/pjpeg”就可以了!所以在IE中,仅仅为了增加难度,在文件类型的开头添加了一个p?谢谢,小姐,告诉我。我已经有一段时间不信任mimetypes了。或者,您可以在mimetype字符串中查找jpeg、png、bmp或gif的实例,该实例的外观与实际情况相同!=-1So在IE中,只是为了增加难度,在文件类型的开头添加了一个p?谢谢,小姐,告诉我。我已经有一段时间不信任mimetypes了。或者,您可以在mimetype字符串中查找jpeg、png、bmp或gif的实例,该实例的外观与实际情况相同!=-1.