我正在为照片网站构建一个上传器,大部分上传的照片都是1232132_1231231_12.jpg类型。当我运行pathinfo()时,我得到了扩展的空白输出。
这是我的代码
$target_dir = "Photos/";
$species = filter_input(INPUT_POST, 'species');
$country = filter_input(INPUT_POST, 'country');
$type= filter_input(INPUT_POST, 'type');
include_once 'connection.php';
echo $target_dir . basename($_FILES["file"]["name"]);
for($a=0;$a<count($_FILES['file']['tmp_name']);$a++)
{
$target_file = $target_dir . basename($_FILES["file"]["name"][$a]);
$imageFileType=pathinfo($target_file, PATHINFO_EXTENSION);
var_dump(pathinfo($target_file));
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" )
{
echo "<br> Sorry, only JPG, JPEG, PNG & GIF files are allowed. your file is a $imageFileType <br>";
}
}
照片/ 2014-02-21 18.19.08.jpg
echo $target-file;
给出了这个输出照片/ 2014-02-21 18.19.08.jpg
对于var_dump,它被回显到屏幕, array(3){[&#34; dirname&#34;] =&gt;字符串(6)&#34;照片&#34; [&#34;基名&#34;] =&GT;字符串(1)&#34; 2&#34; [&#34;文件名&#34;] =&GT;字符串(1)&#34; 2&#34; }
我的代码有问题或者pathinfo()与数字和特殊字符文件名不兼容吗?
是否有另一个函数可以使用这些类型的文件名,或者应该使用&#39;来爆炸()$ target_file。&#39;并获取返回数组中的最后一个元素?
答案 0 :(得分:1)
问题不在于pathinfo。你正在做一些奇怪的事情:
$target_file = $target_dir . basename($_FILES["file"]["name"][$a]);
此行位于$ a介于0和...之间的循环中 $ _FILES [&#34; file&#34;] [&#34; name&#34;]返回文件名。但是:
$_FILES["file"]["name"][0]
将返回文件名中的第一个字母(例如2)。 所以,你在你的变量上做了一个pathinfo:
$target_file = $target_dir . basename($_FILES["file"]["name"][$a]); // looks like $target_file = Photos/2 (when $a = 0)
改变这样的一行:
$target_file = $target_dir . basename($_FILES["file"]["name"]);
答案 1 :(得分:1)
对我来说,这个有效:
function convertImageToWebP($source, $destination, $quality=80) {
if (exif_imagetype($source) == IMAGETYPE_GIF) { $image = imagecreatefromgif($source); }
elseif (exif_imagetype($source) == IMAGETYPE_JPEG) { $image = imagecreatefromjpeg($source); }
elseif (exif_imagetype($source) == IMAGETYPE_PNG) { $image = imagecreatefrompng($source); }
return imagewebp($image, $destination, $quality);
}
我希望它会解决:-)