【问题标题】:Unable to get image extension like .jpeg无法获得像 .jpeg 这样的图像扩展名
【发布时间】:2014-11-29 13:31:38
【问题描述】:

我正在从单个输入上传多张图片

<input type="file" name="files[]" multiple id="files" class="hidde fileInpu"/>

我编写了以下代码来阅读图片上传的详细信息

完整的处理代码

  $newname = md5(rand() * time());
$file1 = isset($_FILES['files']['name'][0]) ? $_FILES['files']['name'][0] : null;
$file2 = isset($_FILES['files']['name'][1]) ? $_FILES['files']['name'][1] : null;
$file3 = isset($_FILES['files']['name'][2]) ? $_FILES['files']['name'][2] : null;
$file4 = isset($_FILES['files']['name'][3]) ? $_FILES['files']['name'][3] : null;
$file5 = isset($_FILES['files']['name'][4]) ? $_FILES['files']['name'][4] : null;
if (isset($_FILES['files'])) {
    $errors = array();
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
        $file_name = $key . $_FILES['files']['name'][$key];
        $file_size = $_FILES['files']['size'][$key];
        $file_tmp = $_FILES['files']['tmp_name'][$key];
        $file_type = $_FILES['files']['name'][$key];

        $extarray = explode('.', $file_type);

        $ext = end($extarray);
// png , jpg, jpeg
        if ($file_size > 9097152000) {
            $errors[] = 'File size must be less than 2 MB';
        }
        $desired_dir = "user_data/";
        if (empty($errors) == true) {
            if (is_dir($desired_dir) == false) {
                mkdir("$desired_dir", 0700);        // Create directory if it does not exist
            }
            if (is_dir("$desired_dir/" . $file_name) == false) {
                move_uploaded_file($file_tmp, "$desired_dir/" . $newname . $file_name);
            } else {                                  // rename the file if another one exist
                $new_dir = "$desired_dir/" . $newname . $file_name;
                rename($file_tmp, $new_dir);
            }
        } else {
            print_r($errors);
        }
    }
    if (empty($error)) {
        echo "FILE : $newname.$ext<br>";
        echo "FILE : $newname.$ext<br>";
        echo "FILE : $newname.$ext<br>";
        echo "FILE : $newname.$ext<br>";
        echo "FILE : $newname.$ext<br>";
    }

我需要在echo 中显示每个文件的文件扩展名,并且我需要跳过文件名插入我需要存储的文件名$key

上面的代码读取图像name,size,file type, tmp name现在我的问题是

$file_type = $_FILES['files']['type'][$key];

此代码提供的文件类型类似于image/jpeg 但我需要获取扩展名 .jpeg

如何在 .jpeg 中获取扩展名

并在阅读此主题后使用此方法PHP file extension issue$ext = pathinfo($file_name, PATHINFO_EXTENSION)[$key]; 我收到错误所有文件都属于同一类型我如何读取每个文件扩展名

【问题讨论】:

  • 为什么要取消对 pathinfo() 的引用?直接使用它:$ext = pathinfo($_FILES['files']['name'][$key], PATHINFO_EXTENSION)
  • 前5行的目的是什么??
  • @Ghost 所有图片都显示为.jpg 甚至添加了.png
  • @Cheery 以上 5 行我用于在 SQL 表行中保存文件名
  • @sanojoverflow 为什么不在你拥有的循环中准备一个名称数组?

标签: php image image-processing


【解决方案1】:

使用 php "pathinfo" 函数获取扩展名。

$ext = pathinfo($_FILES['news_image']['name'], PATHINFO_EXTENSION);  

$file_type = pathinfo($_FILES['files']['name'][$key], PATHINFO_EXTENSION);

参考pathinfo

在这里我发布完整的代码以获得扩展。我添加了 pathinfo 函数来获取扩展名

 <form method="post" action="index.php" enctype="multipart/form-data">
<input type="file" name="files[]" multiple id="files" class="hidde fileInpu"/>
 <input title="" type="submit" name="submit" />
</form>


<?php

if (isset($_POST['submit'])) {

    $newname = md5(rand() * time());
    $file1 = isset($_FILES['files']['name'][0]) ? $_FILES['files']['name'][0] : null;
    $file2 = isset($_FILES['files']['name'][1]) ? $_FILES['files']['name'][1] : null;
    $file3 = isset($_FILES['files']['name'][2]) ? $_FILES['files']['name'][2] : null;
    $file4 = isset($_FILES['files']['name'][3]) ? $_FILES['files']['name'][3] : null;
    $file5 = isset($_FILES['files']['name'][4]) ? $_FILES['files']['name'][4] : null;

        $errors = array();
        foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
            $file_name = $key . $_FILES['files']['name'][$key];
            $file_size = $_FILES['files']['size'][$key];
            $file_tmp = $_FILES['files']['tmp_name'][$key];
            $file_type = $_FILES['files']['name'][$key];
            echo $file_name;
            echo $ext = pathinfo($_FILES['files']['name'][$key], PATHINFO_EXTENSION);  
            die;
            //$extarray = explode('.', $file_type);

          //  $ext = end($extarray);
            // png , jpg, jpeg
            if ($file_size > 9097152000) {
                $errors[] = 'File size must be less than 2 MB';
            }
            $desired_dir = "user_data/";
            if (empty($errors) == true) {
                if (is_dir($desired_dir) == false) {
                    mkdir("$desired_dir", 0700);        // Create directory if it does not exist
                }
                if (is_dir("$desired_dir/" . $file_name) == false) {
                    move_uploaded_file($file_tmp, "$desired_dir/" . $newname . $file_name);
                } else {                                  // rename the file if another one exist
                    $new_dir = "$desired_dir/" . $newname . $file_name;
                    rename($file_tmp, $new_dir);
                }
            } else {
                print_r($errors);
            }
        }
        if (empty($error)) {
            echo "FILE : $newname.$ext<br>";
            echo "FILE : $newname.$ext<br>";
            echo "FILE : $newname.$ext<br>";
            echo "FILE : $newname.$ext<br>";
            echo "FILE : $newname.$ext<br>";
        }
}
?>

【讨论】:

  • 我应该使用哪一行 这行没有$ext = pathinfo($_FILES['news_image']['name'], PATHINFO_EXTENSION); 任何链接
  • matheta 检查我的问题我已经在上面发布了我的整个处理代码
  • 这很完美,但在代码末尾只有一个请求在 5echo 那里我想显示$file1.$ext1``$file2.$ext2``$file3.$ext3``$file4.$ext4``$file5.$ext5
  • 我需要显示每个文件名
【解决方案2】:

试试这个例子

    $file_type = $_FILES['files']['name'][$key];

    $extarray=explode('.',$file_type); 

    $ext=end($extarray);
// png , jpg, jpeg

【讨论】:

  • 我收到错误Strict standards: Only variables should be passed by reference in C:\Users\logon\Documents\NetBeansProjects\locahost test\poster\process\mobile\mobileprocessing.php on line 18
  • @sanojoverflow 这不是一个实际的错误,但explode 的结果应该分配给临时变量,并且这个变量在end 函数中使用。但是pathinfo 应该可以正常工作,您不需要这些操作。
  • @Cheery 但图像名称未处理为 sql
  • @manojdhiman 检查我的问题我已经在上面发布了我的整个处理代码
猜你喜欢
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 2017-04-25
  • 2019-05-22
相关资源
最近更新 更多