使用PHP上传多张照片时出错

时间:2013-11-28 23:45:04

标签: php

希望有人可以再次帮助我。

我正在使用此脚本允许用户使用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显示了已选择的文件。

0 个答案:

没有答案