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