【问题标题】:PHP uploads only one file when I need many当我需要很多文件时,PHP 只上传一个文件
【发布时间】:2019-02-24 11:15:14
【问题描述】:

我需要运行此代码以应用于每个上传的文件:

$uploads_dir = 'tdump';
    $tmp_name = $_FILES['upfiles']["tmp_name"];
    $name = basename($_FILES['upfiles']["name"]);
    move_uploaded_file($tmp_name, "$uploads_dir/$name");
    $filename="$uploads_dir/$name";
    echo "$filename";
    $mp3file=new CMP3File;
    $mp3file->getid3($filename);
    echo "Title: $mp3file->title<br>\n";
    echo "Artist: $mp3file->artist<br>\n";
    echo "Album: $mp3file->album<br>\n";
    echo "Year: $mp3file->year<br>\n";
    echo "Comment: $mp3file->comment<br>\n";
    echo "Genre: " . Ord($mp3file->genre) . "<br>\n";

到目前为止我已经试过了:

$total = count($_FILES['upfiles']['name']);
print_r($total);
for ($i=0; $i < $total; $i++){
    $uploads_dir = 'tdump';
    $tmp_name = $_FILES['upfiles']["tmp_name"];
    $name = basename($_FILES['upfiles']["name"]);
    move_uploaded_file($tmp_name, "$uploads_dir/$name");
    $filename="$uploads_dir/$name";
    echo "$filename";
    $mp3file=new CMP3File;
    $mp3file->getid3($filename);
    echo "Title: $mp3file->title<br>\n";
    echo "Artist: $mp3file->artist<br>\n";
    echo "Album: $mp3file->album<br>\n";
    echo "Year: $mp3file->year<br>\n";
    echo "Comment: $mp3file->comment<br>\n";
    echo "Genre: " . Ord($mp3file->genre) . "<br>\n";
}

html代码:

<form method="post">
    <input name="upfiles[]" type="file" multiple/>
    <input type="submit" name="send">
</form>

mp3file 变量是 getid3 库,不要关注它。在这一大堆代码中我无法弄清楚的是如何遍历每个上传的文件,获取它的名称并保存它。我觉得应该是for或者foreach循环。

【问题讨论】:

    标签: php for-loop file-upload foreach upload


    【解决方案1】:
    for($i=0; $i<your_no_of_files; $i++)
    {
        $tmp_name = $file["tmp_name"];
    $name = basename($file["name"]).$i;
    move_uploaded_file($tmp_name, "$uploads_dir/$name");
    $filename="$uploads_dir/$name";
    echo "$filename";
    $mp3file=new CMP3File;
    $mp3file->getid3($filename);
    echo "Title: $mp3file->title<br>\n";
    echo "Artist: $mp3file->artist<br>\n";
    echo "Album: $mp3file->album<br>\n";
    echo "Year: $mp3file->year<br>\n";
    echo "Comment: $mp3file->comment<br>\n";
    echo "Genre: " . Ord($mp3file->genre) . "<br>\n";
    }**MAYBE THIS WILL WORK**
    

    【讨论】:

    • 看起来不错,但我如何计算我的文件数?
    【解决方案2】:

    HTML 示例:

        <input type="file" name="filename[]">
        <input type="file" name="filename[]">
        ....
        <input type="file" name="filename[]">
    

    尝试这样做,而不是“文件名”使用您的。

    PHP 示例:

      if ($_FILES){
            for ($i = 0; $i < count($_FILES['filename']['name']); $i++) {
    
                //......
                $tmp_name = $_FILES['filename']["tmp_name"][$i];
                //......
    
            }
        }
    

    【讨论】:

      【解决方案3】:

      在您的表单部分编辑以下属性

      <input name="userfile[]" type="file" />
      

      此用户文件数组会将您的所有文件存储在一个数组中。

      然后使用count()函数显示元素个数。

      例如

      $no_of_files=count($_FILES['userfile']['tmp_name']);
      

      【讨论】:

      • 我上传了我的 html,这是我得到的:
      • 注意:未定义索引:第 4 行 C:\xampp\htdocs\ReactSynchro\itunes.php 中的 upfiles 警告:count():参数必须是在 C 中实现 Countable 的数组或对象: \xampp\htdocs\ReactSynchro\itunes.php 在第 4 0 行
      • 检查使用 if(isset($_FILES['userfile or any you write']['tmp_name']){ echo 'hi';}
      • 如果它说你好,然后使用改进语法的以前的代码重试
      猜你喜欢
      • 1970-01-01
      • 2018-03-28
      • 2021-02-26
      • 2020-08-11
      • 1970-01-01
      • 2011-02-25
      • 2022-01-03
      • 2012-05-10
      • 2019-11-14
      相关资源
      最近更新 更多