PhP 上传只接受JPEG和PNG,不会上传JPG
PhP Upload only accepting JPEG and PNG, it won't upload JPG
我有一小段代码可以帮助解决 JPEG 的 iOS EXIF 问题。这很好用,它也会上传 PNG 文件,但不会上传 JPG 文件。会话已设置,但图片不会上传。
我发现它只接受手机上的 JPEG 和 JPG,它不会在 PC 或笔记本电脑上上传。
<?php
session_start();
$target_dir = "uploads/";
$filename = $_FILES['file']['name'];
$filePath = $_FILES['file']['tmp_name'];
$types = array('image/jpeg');
if (in_array($_FILES['file']['type'], $types)) {
$exif = exif_read_data($_FILES['file']['tmp_name']);
if (!empty($exif['Orientation'])) {
$imageResource = imagecreatefromjpeg($filePath); // provided that the image is jpeg. Use relevant function otherwise
switch ($exif['Orientation']) {
case 3:
$image = imagerotate($imageResource, 180, 0);
break;
case 6:
$image = imagerotate($imageResource, -90, 0);
break;
case 8:
$image = imagerotate($imageResource, 90, 0);
break;
default:
$image = $imageResource;
}
}
imagejpeg($image, 'uploads/'.$filename, 100);
$_SESSION["image"] = $filename;
header("Location: http://perfectprints.org.uk/tool.php");
} else {
if (move_uploaded_file($_FILES['file']['tmp_name'], "uploads/". $_FILES["file"]['name'])) {
$_SESSION["image"] = $filename;
header("Location: http://perfectprints.org.uk/tool.php");
}
}
?>
这将上传带有 EXIF 修复的 JPEG 和 PNG 文件,但不会上传 JPG 文件。我该如何解决这个问题?
我猜 PHP 正在将 JPG 和 JPEG 作为相同的文件类型读取,并且 运行 通过 EXIF 代码,这可能会破坏 JPG 图像?
谢谢。
有些图像在元数据中没有方向值。
如果上传的文件没有方向信息,您的 $image
变量无法在您的代码中生成。您必须在 switch 中为默认情况生成 $imageResource
。
请检查您的 if 语句
对不起我的英语不好:)
我有一小段代码可以帮助解决 JPEG 的 iOS EXIF 问题。这很好用,它也会上传 PNG 文件,但不会上传 JPG 文件。会话已设置,但图片不会上传。
我发现它只接受手机上的 JPEG 和 JPG,它不会在 PC 或笔记本电脑上上传。
<?php
session_start();
$target_dir = "uploads/";
$filename = $_FILES['file']['name'];
$filePath = $_FILES['file']['tmp_name'];
$types = array('image/jpeg');
if (in_array($_FILES['file']['type'], $types)) {
$exif = exif_read_data($_FILES['file']['tmp_name']);
if (!empty($exif['Orientation'])) {
$imageResource = imagecreatefromjpeg($filePath); // provided that the image is jpeg. Use relevant function otherwise
switch ($exif['Orientation']) {
case 3:
$image = imagerotate($imageResource, 180, 0);
break;
case 6:
$image = imagerotate($imageResource, -90, 0);
break;
case 8:
$image = imagerotate($imageResource, 90, 0);
break;
default:
$image = $imageResource;
}
}
imagejpeg($image, 'uploads/'.$filename, 100);
$_SESSION["image"] = $filename;
header("Location: http://perfectprints.org.uk/tool.php");
} else {
if (move_uploaded_file($_FILES['file']['tmp_name'], "uploads/". $_FILES["file"]['name'])) {
$_SESSION["image"] = $filename;
header("Location: http://perfectprints.org.uk/tool.php");
}
}
?>
这将上传带有 EXIF 修复的 JPEG 和 PNG 文件,但不会上传 JPG 文件。我该如何解决这个问题?
我猜 PHP 正在将 JPG 和 JPEG 作为相同的文件类型读取,并且 运行 通过 EXIF 代码,这可能会破坏 JPG 图像?
谢谢。
有些图像在元数据中没有方向值。
如果上传的文件没有方向信息,您的 $image
变量无法在您的代码中生成。您必须在 switch 中为默认情况生成 $imageResource
。
请检查您的 if 语句
对不起我的英语不好:)