PHP:只有 $_FILES 数组的前 20 个索引从 HTML 表单传递到上传脚本

标签 php html mysql file-upload


我的网站允许用户将图像相册上传到他们的个人资料,并与网站上的其他人分享。
脚本分为两个文件:

uploadAnAlbum.php

<?php
session_start();
set_time_limit (0);
$email = $_SESSION["accountEmailAddress"];
$accountDir = str_replace("@", "at", $email);
$accountDir = str_replace(".", "dot", $accountDir);
$folderStructure = "./albums/" . $accountDir . "/" . round(microtime(true));
$folderCreation = mkdir($folderStructure, 0755, true);
$host = "localhost";
$username = "XXXXXX";
$password = "XXXXXX";
$database = "XXXXXX";
$connection = mysql_connect($host, $username, $password) or die(mysql_error() . "connection");
  mysql_select_db($database) or die(mysql_error() . "database");
$tableName = $accountDir . round(microtime(true));
$createTable = "CREATE TABLE `" . $tableName . "` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `path` TEXT DEFAULT NULL
    ) ENGINE = MYISAM;";
$createTableResult = mysql_query($createTable) or die(mysql_error() . "sql<br>" . mysql_errno());
echo "<h1>" . count($_FILES['files']['name']) . "</h1>";
$count = 0;
foreach ($_FILES['files']['name'] as $i => $name) {
    if (strlen($_FILES['files']['name'][$i]) > 1 && getimagesize($_FILES['files']['tmp_name'][$i]) !== false) {
        $extensionArray = explode(".", $_FILES["files"]["name"][$i]);
        $extension = end($extensionArray);
        $newfilename = $count . '.' . $extension;
        if (move_uploaded_file($_FILES['files']['tmp_name'][$i], $folderStructure . "/" . $newfilename)) {
            $photoPath = $folderStructure . "/" . $newfilename;
            $sql = "INSERT INTO `" . $tableName . "` (path) VALUES ('$photoPath')";
            $result = mysql_query($sql) or die(mysql_error() . "hhh");
            $count = $count + 1;
        }//MOVES INDEX TO FOLDER; UPDATES $COUNT
    } else {  //CHECK IF FILE IS REAL BEFORE MOVING INTO DIRECTORY
        continue;
    }
    echo $count;
}//END FOREACH ITERATING ARRAY OF UPLOADED FILES
$name = $_REQUEST['albumName'];
$author = $_SESSION['accountEmailAddress'];
$date = date("y/m/d");
$teams = $_REQUEST['teamOne'] . "," . $_REQUEST['teamTwo'];
if($_SESSION['accountStatus'] == "pro"){
    $proOrNo = "pro";
} else {
    $proOrNo = "no";
}
$sport = $_REQUEST['sport'];
$path = $tableName;
$views = 0;
$host = "XXXXXX";
$username = "XXXXXX";
$password = "XXXXXX";
$database = "XXXXXX";
$connection = mysql_connect($host, $username, $password);
mysql_select_db($database);
$sql = "INSERT INTO albums (name, author, dateUploaded, teams, sport, views, path, proOrNo) VALUES ('$name', '$author', '$date', '$teams', '$sport', '$views', '$path', '$proOrNo')";
$result = mysql_query($sql) or die(mysql_error() . "nn");
header("Location: myAccount.php");
?>

chooseFile.php (HTML form)

    <form action="uploadAlbum.php" method="post" enctype="multipart/form-data">
  Choose album:<br>
      <input type="file" name="files[]" id="files" multiple="" directory="" webkitdirectory="" mozdirectory=""><br>
      Name:<input type="text" name="albumName" style="width:100%;"/><br><br>
      Sport:
      <select name="sport">
                <option name="nothing">Select</option>
                <option name="football">Football</option>
                <option name="crossCountry">Cross country</option>
                <option name="fieldHockey">Field hockey</option>
                <option name="golf">Golf</option>
                <option name="gymnastics">Gymnastics</option>
                <option name="soccer">Soccer</option>
                <option name="softball">Softball</option>
                <option name="tennis">Tennnis</option>
                <option name="volleyball">Volleyball</option>
                <option name="basketball">Basketball</option>
                <option name="hockey">Hockey</option>
                <option name="swimming">Swimming</option>
                <option name="wrestling">Wrestling</option>
                <option name="baseball">Baseball</option>
                <option name="lacrosse">Lacrosse</option>
                <option name="track">Track and field</option>
        </select><br><br>
      Teams competing: <br>
            <select name="teamOne">
              <option value="empty">Choose school #1</option>
              <!-- Lots and lots of options for school districts. I took them out to eliminated needless scrolling while you are reading this -->
            </select>
            <select name="teamTwo">
              <option value="empty">Choose school #2</option>
              <!-- Lots and lots of options for school districts. I took them out to eliminated needless scrolling while you are reading this -->
            </select>
              <br>
      <input type="submit" name="submit" value="Upload album" />
  </form>

由于某种原因,只有 $_FILES 数组的 20 个索引从 html 输入表单传递到 php 上传脚本。在运行任何处理 uploadAnAlbum.php 上的照片的代码之前,我可以看到 $_FILES 数组(从 chooseFile.php 传递)仅限于用户上传目录中的前 20 张照片。
我已经在电话中说过了与我的网络托管公司一起工作了三个小时,并将 php.ini 配置为无论上传时间如何都可以接受非常大的文件。
我仍然不知道在哪里。
如果您能看一下这段代码,看看是否有什么让您印象深刻,我将不胜感激。

最佳答案

首先在 php.ini 文件中检查这个参数,它的默认值为 20

max_file_uploads = 20

现在你需要确保这个等式有效

post_max_size = ( upload_max_filesize * max_file_uploads ) + 
                    space for normal fields passed in the POST buffer

换句话说,您可以上传最大文件数和最大文件大小,并为表单上的所有普通字段提供空间。

关于PHP:只有 $_FILES 数组的前 20 个索引从 HTML 表单传递到上传脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32847992/

相关文章:

php - 无法创建正确的查询

php - 在带有 Windows 7 的 XAMPP 1.8.3 上运行 ImageMagick

PHP 和 JavaScript Ajax : how to get URL data when our method is "GET"

javascript - 如何创建动态 Ukit 模态 [Joomla]

mysql - 没有在 Mysql 参数中获取值

php - MySQL 原生类似于 PHP substr_count()

html - 如何悬停一个 div 并悬停一些元素?

javascript - 如何限制在线考试期间使用其他应用程序?

mysql - 列一对多关系的三个条件

mysql - 如何过滤列基础条件SQL