希望有人可以再次帮助我。
我正在使用此脚本允许用户使用PHP上传多张照片。
<?php
session_start();
require_once('connect.php');
$when = date(" H:i d-m-Y");
$user = $_SESSION["logged_in"];
$rand = rand(100000, 200000);
foreach ($_FILES['file']['name'] as $f => $name) {
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $name);
$extension = end($temp);
if ((($_FILES["file"]["type"][$f] == "image/gif")
|| ($_FILES["file"]["type"][$f] == "image/jpeg")
|| ($_FILES["file"]["type"][$f] == "image/jpg")
|| ($_FILES["file"]["type"][$f] == "image/png"))
&& ($_FILES["file"]["size"][$f] < 2000000)
&& in_array($extension, $allowedExts))
{
$postvars = array(
"image" => trim($_FILES["file"]["name"][$f]),
"image_tmp" => $_FILES["file"]["tmp_name"][$f],
"image_size" => (int)$_FILES["file"]["size"][$f]
);
if ($_FILES["file"]["error"][$f] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"][$f] . "<br>";
}
else
{
mysql_query("INSERT INTO photos (name, who, upload) VALUES ('$name', '$user', '$rand')");
$ext = end(explode(".",strtolower(trim($_FILES["file"]["name"][$f]))));
if($ext == "jpg" || $ext == "jpeg"){
$image = imagecreatefromjpeg($postvars["image_tmp"]);
}
else if($ext == "gif"){
$image = imagecreatefromgif($postvars["image_tmp"]);
}
else if($ext == "png"){
$image = imagecreatefrompng($postvars["image_tmp"]);
}
// Grab the width and height of the image.
list($width,$height) = getimagesize($postvars["image_tmp"]);
$newwidth = "192";
$newheight = "192";
// Create temporary image file.
$tmp = imagecreatetruecolor($newwidth,$newheight);
// Copy the image to one with the new width and height.
imagecopyresampled($tmp,$image,0,0,0,0,$newwidth,$newheight,$width,$height);
$filename = "../photos/uploads/" . $rand . "_" . $name;
imagejpeg($tmp,$filename,100);
header("location:/admin/photos/uploaded/" . $rand);
}
}
else
{
echo "Invalid file";
}
}
?>
问题是当我测试它我可以上传1,2或3张照片没有问题但是当我尝试上传4或更高时它不起作用我得到错误警告:为foreach提供的无效参数()在第7行的/home/a8928896/public_html/comp/upload_photos.php中。
我完全困惑,我查看了许多其他示例脚本,我的代码似乎没问题。我不知道托管公司是否可以对你可以传递给php脚本的文件数据量施加限制吗?
任何帮助将不胜感激。就像我说的,它适用于1,2或3个文件和PHP重新调整大小的代码工作正常,当我尝试上传4张或更多照片时似乎是问题。
之前我曾使用foreach循环,但这是我第一次看到它失败。
提前致谢
以HTML格式和JS
添加<table>
<tr style="width: 100%;" style="text-align: center;">
<td colspan="2" style="text-align: center;">
<form method="post" action="/comp/upload_photos.php" enctype="multipart/form-data">
<input name="file[]" id="file" type="file" multiple="" onChange="makeFileList();"/>
<button type="submit" class="btn btn-1 ">Upload?</button>
</form>
<p><strong>Files You Selected:</strong></p>
<ul id="fileList"><li>No Files Selected</li></ul>
<script type="text/javascript">
function makeFileList() {
var input = document.getElementById("file");
var ul = document.getElementById("fileList");
while (ul.hasChildNodes()) {
ul.removeChild(ul.firstChild);
}
for (var i = 0; i < input.files.length; i++) {
var li = document.createElement("li");
li.innerHTML = input.files[i].name;
ul.appendChild(li);
}
if(!ul.hasChildNodes()) {
var li = document.createElement("li");
li.innerHTML = 'No Files Selected';
ul.appendChild(li);
}
}
</script>
</td>
抱歉格式化了一下。
但是我的表单和Javascript显示了已选择的文件。