检查上载文件数组中是否存在文件

时间:2014-05-29 09:49:11

标签: php forms

我在前端提交表单以提交内容,其中我需要在提交时检查文件是否存在。

请注意,表单提交了文件数组。它失败了我一直在尝试的所有逻辑。请注意html第二行的upload[]

HTML

<form method="post" id="upload-form" action="" enctype="multipart/form-data" >
<input type="file" multiple="true" name="upload[]">
<input type="submit" name="upload_attachments" value="UPLOAD">
<form>

PHP

if(!file_exists($_FILES['upload']['tmp_name'].'/'.$FILES['upload']['name'])) {

   $upload_error = 'file is not set !'; 
   return; //stop further code execution 
   }else{

   //do further validation   

   }

上面的代码在两种情况下都会显示'file is not set !',即当我点击提交按钮而不上传文件时以及当我选择上传文件并点击提交按钮时。

这里发生了什么,我甚至做得对吗?

基本上我想要回复一个&#39; File Empty&#39;当有人点击提交按钮而不选择要上传的文件时,会发出消息,并停止进一步执行代码。

4 个答案:

答案 0 :(得分:5)

$_FILES[<key>]['tmp_name'] - 包含服务器上的文件路径

$_FILES[<key>]['name'] - 只是原始文件名

要解决文件数组file[],您需要获取数据 $_FILES[<key>][<property>][<id>]

尝试

if(!file_exists($_FILES['upload']['tmp_name'][0])) {

<强>手册

http://www.php.net/manual/en/features.file-upload.php

http://www.php.net/manual/en/features.file-upload.multiple.php

答案 1 :(得分:1)

您要附加tmp_name和name。这不是必需的。只需检查上传的文件名,如;

if(empty($_FILES['upload']['name'])) {

   $upload_error = 'file is not set !'; 
   return; //stop further code execution 
}else{

   //do further validation   

}

或者您可以检查文件是否存在;

if(!file_exists($_FILES['upload']['tmp_name'][0])) {

   $upload_error = 'file is not set !'; 
   return; //stop further code execution 
}else{

   //do further validation   

}

您的多文件数组格式如下所示;

Array
(
    [name] => Array
        (
            [0] => foo.txt
            [1] => bar.txt
        )

    [type] => Array
        (
            [0] => text/plain
            [1] => text/plain
        )

    [tmp_name] => Array
        (
            [0] => /tmp/phpYzdqkD
            [1] => /tmp/phpeEwEWG
        )

    [error] => Array
        (
            [0] => 0
            [1] => 0
        )

    [size] => Array
        (
            [0] => 123
            [1] => 456
        )
)

您可以参考here

答案 2 :(得分:0)

试试这个

   if (empty($_FILES['upload']['name']))
   {
   // No file was selected for upload, your (re)action goes here
   }

  note: place this code above
   if(!file_exists($_FILES['upload']['tmp_name'].'/'.$FILES['upload']['name'])) {

答案 3 :(得分:0)

你可以使用php的is_uploaded_file函数。

以下是php网站关于该功能的摘录。

  

为了正常工作,函数is_uploaded_file()需要一个像$ _FILES ['userfile'] ['tmp_name']这样的参数, - 客户端机器上传文件的名称$ _FILES ['userfile'] ['name ']不起作用。

http://www.php.net/manual/en/function.is-uploaded-file.php