【问题标题】:Failing to get file extension when using pathinfo()使用 pathinfo() 时无法获取文件扩展名
【发布时间】:2015-03-29 20:15:07
【问题描述】:

我正在为一个照片网站构建一个上传器,上传的大多数照片都是 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;

给出这个输出 Photos/2014-02-21 18.19.08.jpg

对于 var_dump,这会在屏幕上回显, array(3) { ["dirname"]=> string(6) "照片" ["basename"]=> string(1) "2" ["文件名"]=> 字符串(1) "2" }

我的代码有问题还是 pathinfo() 不能很好地处理数字和特殊字符文件名?

是否有另一个函数可以处理这些类型的文件名,或者应该用 '.' 对 $target_file 进行explode()并取返回数组中的最后一个元素?

【问题讨论】:

  • 如果将error_reporting(E_ALL); 放在脚本顶部会发生什么?
  • 请检查链接并阅读标记答案的cmets。stackoverflow.com/questions/10368217/…
  • 如果echo "target_file=$target_file&lt;br /&gt;\n"; 位于 var_dump() 的正上方会发生什么?文件名是“Photos/2”还是“Photos/2.jpg”?
  • 彼得我已经编辑了问题

标签: php


【解决方案1】:

问题不是路径信息。你在做一些奇怪的事情:

$target_file = $target_dir . basename($_FILES["file"]["name"][$a]);

这一行在一个循环中,其中 $a 介于 0 和... $_FILES["file"]["name"] 正在返回文件名。但是:

$_FILES["file"]["name"][0]

将返回文件名的第一个字母(以 2 为例)。 因此,您正在对变量执行路径信息:

$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"]);

【讨论】:

  • 这已经解决了这个问题,但是我想将一组照片传递给 php,然后将它们全部上传,这是否意味着如果我传递一组文件它不会迭代它们?
  • 如果您的输入类型文件如下所示:&lt;input type="file" name="file[]" id="input1" /&gt;&lt;input type="file" name="file[]" id="input2" /&gt;,您当然可以访问文件数组。
【解决方案2】:

对我来说,这个很有效:

    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);
}

我希望它能解决:-)

【讨论】:

    猜你喜欢
    • 2015-09-06
    • 2016-09-16
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2012-02-03
    • 2019-01-12
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多