如何测试用户是否已选择要上传的文件?

时间:2010-06-02 13:33:22

标签: php file upload

在页面上,我有:

if (!empty($_FILES['logo']['name'])) {
    $dossier     = 'upload/';
    $fichier     = basename($_FILES['logo']['name']);
    $taille_maxi = 100000;
    $taille      = filesize($_FILES['logo']['tmp_name']);
    $extensions  = array('.png', '.jpg', '.jpeg');
    $extension   = strrchr($_FILES['logo']['name'], '.');

    if(!in_array($extension, $extensions)) {
        $erreur = 'ERROR you  must upload the right type';
    }

    if($taille>$taille_maxi) {
         $erreur = 'too heavy';
    }

    if(!empty($erreur)) {
      // ...
    }
}

问题是,如果用户想要编辑信息而不上传LOGO,则会引发错误:'错误您必须上传正确的类型'

因此,如果用户没有在输入框中放置任何内容以便上传,我不想在这些条件下输入测试。

我测试过: if (!empty($_FILES['logo']['name'])if (isset($_FILES['logo']['name'])

但两者似乎都不起作用。

有什么想法吗?

编辑:也许我不是那么清楚,我不想测试他是否上传了一个徽标,我想测试他选择了一个文件上传,因为现在,如果他没有选择一个文件上传,php引发错误,告诉他必须以正确的格式上传。

感谢。

6 个答案:

答案 0 :(得分:78)

您可以通过以下方式查看:

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

或者,只要上传字段的值为空字符串(“”),就可以使用仅启用上传/提交按钮的javascript构造,以避免提交完全没有上传的表单。

答案 1 :(得分:34)

php文档中有一节关于file handling。您find可以检查各种错误,其中一个是

UPLOAD_ERR_OK
    Value: 0; There is no error, the file uploaded with success.
<...>
UPLOAD_ERR_NO_FILE
    Value: 4; No file was uploaded.

在您的情况下,您需要像

这样的代码
if ($_FILES['logo']['error'] == UPLOAD_ERR_OK) { ... }

if ($_FILES['logo']['error'] != UPLOAD_ERR_NO_FILE) { ... }

您应该考虑检查(并可能为用户提供适当的响应)以解决其他各种错误。

答案 2 :(得分:14)

您应该使用is_uploaded_file($_FILES['logo']['tmp_name'])来确保文件确实是通过POST上传的。

答案 3 :(得分:7)

我会测试if (file_exists($_FILES['logo']['tmp_name']))并查看它是否有效。

或者,更加认真(感谢Baloo):if (is_uploaded_file($_FILES['logo']['tmp_name']))

答案 4 :(得分:2)

我们可以使用

对于单个文件:

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

对于多个文件:

if ($_FILES['logo']['tmp_name'][0] == "") {
    // No files were selected for upload, your (re)action goes here
}

答案 5 :(得分:-3)

if ($_FILES['logo']['error'] === 0)

是唯一正确的方法