Php $\u文件数组在未上载任何内容时不为空

Php $\u文件数组在未上载任何内容时不为空,php,file,upload,Php,File,Upload,这是表格 form action="index.php" method="POST" enctype="multipart/form-data" > <input type="file" name="image[]" multiple="multiple"> <input type="submit" value="upload"> </form> 图像上传 <form action="index

这是表格

form action="index.php" method="POST" enctype="multipart/form-data" >
        <input type="file" name="image[]" multiple="multiple">
        <input type="submit" value="upload">
    </form> 

图像上传

    <form action="index.php" method="POST" enctype="multipart/form-data" >
        <input type="file" name="image[]" multiple="multiple">
        <input type="submit" value="upload">
    </form> 

    <?php

    include 'connect.php';

    if(!empty($_FILES['image'])){
    echo $_FILES['image']['error'];
        $allowed = array('jpg', 'gif', 'png', 'jpeg');
        $count = 0;

        foreach($_FILES['image']['name'] as $key => $name){
        $image_name = $name;
        $tmp = explode('.', $image_name);
        $image_extn = strtolower(end($tmp)); //can only reference file
        $image_temp = $_FILES['image']['tmp_name'][$count];
        $filesize = filesize($_FILES['image']['tmp_name'][$count]);
        $count = $count +1;

        if(count($_FILES['image']['tmp_name']) > 5){
            echo "You can upload a maximum of five files.";
            break;
        }

        else if(in_array($image_extn, $allowed) === false){
            echo $name." is not an allowed file type<p></p>";
        }

        else if($filesize > 1024*1024*0.3){
            echo $name." is too big, can be a maximum of 3MB";
        }

        else{

            $image_path = 'images/' . substr(md5($name), 0, 10) . '.' . $image_extn;


            move_uploaded_file($image_temp, $image_path);

            mysql_query("INSERT INTO store VALUES ('', '$image_name', '$image_path')") or die(mysql_error());

            $lastid = mysql_insert_id();
            $image_link = mysql_query("SELECT * FROM store WHERE id = $lastid");
            $image_link = mysql_fetch_assoc($image_link);
            $image_link = $image_link['image'];
            echo "Image uploaded.<p></p> Your image: <p></p><a href = $image_link>$image_path</a>";
            }

        }
        }

    else{
            echo "Please select an image.";
        }

    ?>



改用
is\u uploaded\u file
PHP函数:

if(is_uploaded_file($_FILES['image']['tmp_name'])) {
  //code here
}

这就是当没有上传任何内容时,
$\u文件
数组的外观

Array ( [image] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) )
所以它从来都不是空的

错误代码4
[error]=>4
表示未上载任何文件,错误
代码0
表示未上载任何错误和文件,因此您可以进行检查

if($_FILES['image']['error']==0) {
    // file uploaded, process code here
}
就这样吧。

如果表单中没有选择要上载的文件,PHP将返回 $\u文件['userfile']['size']为0,而$\u文件['userfile']['tmp\u name'] 没有


即使用户没有选择要上载的文件,每个“文件”上载字段也会有一个数组条目。

您应该首先查看PHP手册,因为您不是第一个遇到此问题的人,解决方案已经编写好:

如果表单中没有选择要上载的文件,PHP将
$\u文件['userfile']['size']
返回为0,将
$\u文件['userfile']['tmp\u name']
返回为无

因此,如果您确实想知道
image
元素的任何文件是否已提交,请检查它:

 $noFile = $_FILES['image']['size'][0] === 0 
           && $_FILES['image']['tmp_name'][0] === '';
是的,就是这么简单

您使用的测试:

empty($_FILE);
只会告诉你整个表格是否已经提交。下面是一个完整的例子:

$submitted = empty($_FILE);
if ($submitted) {
    $noFile    = $_FILES['image']['size'][0] === 0 
                 && $_FILES['image']['tmp_name'][0] === '';
    if ($noFile) {
        ...
    }
}


对于($1=0;$i我遇到了多文件输入的问题。
我发现用于检查是否选择了任何文件的是:

<?php
$size_sum = array_sum($_FILES['img']['size']);
if ($size_sum > 0) {
 // at least one file has been uploaded
} else {
 // no file has been uploaded
}
?>

检查值不为空:

in_array(!null,$_FILES['field_name']['name'])

UPLOAD\u ERR\u OK
返回值0如果没有错误,文件已成功上载。

我认为它永远不会为空,因为它保存了上载的所有数据。例如,它会告诉您文件大小为
0
。它将是某种字符串-使用
打印($\u文件)
检查数组并查看要用于检查图像是否未上载的内容。尝试执行var_dump($_文件)并查看内容…什么意思
数组不为空
??它不应为空此文件名为index.php?当我将其放在
if(!empty($_FILES['image']){
下并将其用作
if时,这一点起作用(是上传的文件($文件['image']['tmp\u name'][$count])){
。当然,您也可以做许多其他不同的事情,但这并不意味着这实际上是正确的方法,也不意味着您了解自己的操作。您需要检查错误代码,请参见:-这对于您在此处使用的
$count
尤其重要,因为您应该更好地了解如何处理您正在处理的数据类型。请参阅:(上载文件数组)这种方式工作得很好。我对原始代码的唯一问题是当我提交一个空白表单时,该代码:`else if(in_array($image_extn,$allowed)==false){echo$name.”不是允许的文件类型

“;}`仍然会运行。是的,当然。它会一直工作到崩溃。问题是你是否能够真正理解某些东西为什么会工作,为什么不会。我只能尝试帮助你理解。我添加了一个答案,告诉你实际发生了什么,也许它能帮助你澄清事情:我确实理解现在发生了什么。我只是检查
是否(!empty($\u FILES['image']){
确保设置了涉及“$\u FILES['image']”数组的其余代码,否则空提交表单将返回一个数组,该数组将使此
如果(在数组中($image\u extn,$allowed)==false){
执行。您可能会得到不同的错误,我还看到
UPLOAD\u ERR\u PARTIAL
(3)在
UPLOAD\u ERR\u NO\u FILE
(4)旁边。使用
if(is\u UPLOAD\u FILE($\u FILES['image']['tmp\u name'])可以节省几个字节
导致更快的页面加载..lol.侧注:可能没有错误,但文件大小为0字节。这是上载表单的重播,实际上没有上载任何文件数据。浏览器可能会出现这种情况,我在Chromium中看到过。此代码与其他6个答案有何不同?其目标是什么?请在您的答案中解释。我只是分享了易于理解的简单代码。我为初学者分享了您应该添加一个解释:如何使用此代码?
for($1=0;$i<count($_FILES['image']);$i++){
if(!empty($_FILES['image']['name'][$i])){
   // do something
}
}
<?php
$size_sum = array_sum($_FILES['img']['size']);
if ($size_sum > 0) {
 // at least one file has been uploaded
} else {
 // no file has been uploaded
}
?>
if(isset($_FILES['file'])){//do some thing here}
in_array(!null,$_FILES['field_name']['name'])
if($_FILES['image']['error'] === UPLOAD_ERR_OK) {
    // Success code Goes here .. 
}