【问题标题】:Warning: end() expects parameter 1 to be array, string given on line 31警告:end() 期望参数 1 是数组,第 31 行给出的字符串
【发布时间】:2013-12-11 04:39:09
【问题描述】:

我对 php 很陌生,并试图做一个多张图片上传表单(我正在循环这个过程)。出于某种原因,我收到了这个警告(警告:end() 期望参数 1 是数组,第 31 行给出的字符串),这行是($temp = ( $_FILES["file"]["name"][$i]);)

请给我一些帮助。另外,我正在尝试确保图像文件是正确的格式等,然后再上传它们,所以我是否必须循环它们一次以确保它们是正确的格式,然后再次循环它们以进行上传? 附言。忽略 SQL 注入问题,稍后会添加。谢谢 php

<?php
ini_set('display_errors', 1); error_reporting(E_ALL);

ob_start();
session_start();
include 'connect.php';



if ($_POST)
{
 //get form data



 $Listingname = addslashes(strip_tags($_POST['Listingname']));
 $Location = addslashes(strip_tags($_POST['Location']));
 $nobed = addslashes(strip_tags($_POST['nobed']));
 $zip = addslashes(strip_tags($_POST['zip']));
 $price = ($_POST['price']);
 $username=($_POST[$_SESSION['username']]);

 if (!$Listingname||!$nobed||!$nobed||!$zip||!$price)
    echo "Please fill out all fields"; 
    else 

    {$allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = $_FILES["file"]["name"];
    for($i=0;$i<count($temp);$i++)
$temp = ( $_FILES["file"]["name"][$i]);
$extension = end($temp);
if ((($_FILES["file"]["type"][$i] == "image/gif")
|| ($_FILES["file"]["type"][$i] == "image/jpeg")
|| ($_FILES["file"]["type"][$i] == "image/jpg")
|| ($_FILES["file"]["type"][$i] == "image/pjpeg")
|| ($_FILES["file"]["type"][$i] == "image/x-png")
|| ($_FILES["file"]["type"][$i] == "image/png"))
&& ($_FILES["file"]["size"][$i] < 400000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"][$i] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"][$i] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"][$i] . "<br>";
    echo "Type: " . $_FILES["file"]["type"][$i] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"][$i] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"][$i] . "<br>";

    if (file_exists("upload/" . $_FILES["file"]["name"][$i]))
      {
      echo $_FILES["file"]["name"][$i] . " already exists please add another file, or change the. ";
      }
    else

      {
        $photo=$_FILES["file"]["name"][$i];
      move_uploaded_file($_FILES["file"]["tmp_name"][$i],
      "upload/$photo");
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"][$i];
      }
    }
  }

else

{
  echo "Invalid file" and die("Can not load picture");
  }



    {
       $username=$_SESSION['username'];

           //register into database
            mysqli_query($con,"INSERT INTO Listing (username,Listingname,Location,nobed,zip,price,pic1) VALUES 
                ('$username','$Listingname','$Location','$nobed','$zip','$price','$photo');") or die(mysqli_error());


            echo "Listing Added";

    }
       }

    }



else
{

?>

<form action="Submitlisting5.php" method="post"
enctype="multipart/form-data">
Listing Name:<br />
<input type='text' name='Listingname'><p />
Location:<br />
<input type='text' name='Location'><p />
Number of Beds:<br />
<input type='test' name='nobed'><p />
Zip:<br />
<input type='text' name='zip'><p />
Price:<br />
<input type='text' name='price'><p />


<label for="file">Pic1(File must be exceed 4mb):</label>
<input type="file" name="file[]" id="file[]"><br>
<label for="file">Pic2(File must be exceed 4mb):</label>
<input type="file" name="file[]" id="file[]"><br>
<br>
<input type='submit' name='submit' value='Submit'>
</form>

<?php

}



?>

刚试了一下,现在直接不能上传图片了

 {$allowedExts = array("gif", "jpeg", "jpg", "png");

    for($i=0;$i<4;$i++){
$temp = ( $_FILES["file"]["name"]);
$extension = $temp;
if ((($_FILES["file"]["type"][$i] == "image/gif")
|| ($_FILES["file"]["type"][$i] == "image/jpeg")
|| ($_FILES["file"]["type"][$i] == "image/jpg")
|| ($_FILES["file"]["type"][$i] == "image/pjpeg")
|| ($_FILES["file"]["type"][$i] == "image/x-png")
|| ($_FILES["file"]["type"][$i] == "image/png"))
&& ($_FILES["file"]["size"][$i] < 400000)
&& in_array($extension, $allowedExts))

第三次试用

for($i=0;$i<4;$i++){


if ((($_FILES["file"]["type"][$i] == "image/gif")
|| ($_FILES["file"]["type"][$i] == "image/jpeg")
|| ($_FILES["file"]["type"][$i] == "image/jpg")
|| ($_FILES["file"]["type"][$i] == "image/pjpeg")
|| ($_FILES["file"]["type"][$i] == "image/x-png")
|| ($_FILES["file"]["type"][$i] == "image/png"))
    && ($_FILES["file"]["size"][$i] < 400000))

【问题讨论】:

  • 如果你回显$_FILES["file"]["name"][$i] 的值,你会得到什么?此外,end() 不会为您提供文件扩展名,如果那是您正在寻找的;它检索数组中的最后一个元素,因此您会看到错误。
  • 如果我删除 end(),它会直接进入无法上传图片而没有错误。不太确定我应该做什么,因为上传 1 张图片效果很好
  • 我用我刚刚尝试的方法编辑了我的答案,现在没有错误但它直接跳转到无法上传图片
  • 我刚刚设法让代码正常工作。 :D

标签: php file-upload php-5.4 multifile-uploader


【解决方案1】:

问题是你正在覆盖你的变量:$temp =

$temp = $_FILES["file"]["name"];
for($i=0;$i<count($temp);$i++)
  $temp = ( $_FILES["file"]["name"][$i]);

此时,$temp 不再是一个数组。您需要在上面的最后一行重命名 $ temp 变量(以及引用该变量的其他任何地方......而不是第一个)。

【讨论】:

  • 但是如果我删除第一组 $temp,我会收到通知:未定义变量:temp 警告:end() 期望参数 1 为数组,如果我删除第二个 $temp,则为 null我收到通知:未定义的偏移量:2 in line,31,32,33,34,35,36,37
  • 我刚试了一下,没有重复,现在没有错误,直接到不能上传图片
【解决方案2】:

刚刚设法整理出来,上传了多张图片并验证了图片类型。

<?php
ini_set('display_errors', 1); error_reporting(E_ALL);

ob_start();
session_start();
include 'connect.php';



if ($_POST)
{
 //get form data



 $Listingname = addslashes(strip_tags($_POST['Listingname']));
 $Location = addslashes(strip_tags($_POST['Location']));
 $nobed = addslashes(strip_tags($_POST['nobed']));
 $zip = addslashes(strip_tags($_POST['zip']));
 $price = ($_POST['price']);
 $username=($_POST[$_SESSION['username']]);

 if (!$Listingname||!$nobed||!$nobed||!$zip||!$price)
    echo "Please fill out all fields"; 
    else 



    for($i=0;$i<3;$i++){


if ((($_FILES["file"]["type"][$i] == "image/gif")
|| ($_FILES["file"]["type"][$i] == "image/jpeg")
|| ($_FILES["file"]["type"][$i] == "image/jpg")
|| ($_FILES["file"]["type"][$i] == "image/pjpeg")
|| ($_FILES["file"]["type"][$i] == "image/x-png")
|| ($_FILES["file"]["type"][$i] == "image/png"))
    && ($_FILES["file"]["size"][$i] < 400000))


  if ($_FILES["file"]["error"][$i] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"][$i] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"][$i] . "<br>";
    echo "Type: " . $_FILES["file"]["type"][$i] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"][$i] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"][$i] . "<br>";

    if (file_exists("upload/" . $_FILES["file"]["name"][$i]))
      {
      die($_FILES["file"]["name"][$i] . " already exists please add another file, or change the name ");
      }

    else

      {
        $photo=$_FILES["file"]["name"][$i];
      move_uploaded_file($_FILES["file"]["tmp_name"][$i],
      "upload/$photo");
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"][$i];
      }
  }


else

{
  echo "Invalid file" and die("Can not load picture");
  }



    {
       $username=$_SESSION['username'];

           //register into database
            mysqli_query($con,"INSERT INTO Listing (username,Listingname,Location,nobed,zip,price,pic1) VALUES 
                ('$username','$Listingname','$Location','$nobed','$zip','$price','$photo');") or die(mysqli_error());


            echo "Listing Added";

    }
       }


}


else
{

?>

<form action="Submitlisting5.php" method="post"
enctype="multipart/form-data">
Listing Name:<br />
<input type='text' name='Listingname'><p />
Location:<br />
<input type='text' name='Location'><p />
Number of Beds:<br />
<input type='test' name='nobed'><p />
Zip:<br />
<input type='text' name='zip'><p />
Price:<br />
<input type='text' name='price'><p />


<label for="file">Pic1(File must be exceed 4mb):</label>
<input type="file" name="file[]" id="file[]"><br>
<label for="file">Pic2(File must be exceed 4mb):</label>
<input type="file" name="file[]" id="file[]"><br>
<label for="file">Pic3(File must be exceed 4mb):</label>
<input type="file" name="file[]" id="file[]"><br>
<br>
<input type='submit' name='submit' value='Submit'>
</form>

<?php

}



?>

【讨论】:

    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多