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

sf_*_*anb 44 php upload file

在页面上,我有:

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)) {
      // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

但两者似乎都不起作用.

有任何想法吗?

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

谢谢.

Old*_*ool 78

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

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

或者,您可以使用仅在上载字段具有除空字符串("")之外的值时启用上载/提交按钮的javascript构造,以避免提交完全没有上载的表单.


Jon*_*nas 34

php文档中有一节关于文件处理.你会发现你可以检查各种错误,其中之一就是

UPLOAD_ERR_OK
    Value: 0; There is no error, the file uploaded with success.
<...>
UPLOAD_ERR_NO_FILE
    Value: 4; No file was uploaded.
Run Code Online (Sandbox Code Playgroud)

在你的情况下,你需要像

if ($_FILES['logo']['error'] == UPLOAD_ERR_OK) { ... }
Run Code Online (Sandbox Code Playgroud)

要么

if ($_FILES['logo']['error'] != UPLOAD_ERR_NO_FILE) { ... }
Run Code Online (Sandbox Code Playgroud)

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


bal*_*loo 14

您应该使用is_uploaded_file($ _ FILES ['logo'] ['tmp_name'])来确保文件确实通过POST上传.


Jes*_*ess 7

我会测试一下它是否有效.if (file_exists($_FILES['logo']['tmp_name']))

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