如何检查用户是否上传了PHP文件?

php
2022-08-30 09:09:01

我做一些表单验证,以确保用户上传的文件是正确的类型。但是上传是可选的,所以如果他没有上传任何东西并提交了表单的其余部分,我想跳过验证。我如何检查他是否上传了某些内容?会起作用吗?$_FILES['myflie']['size'] <=0


答案 1

您可以使用 is_uploaded_file()

if(!file_exists($_FILES['myfile']['tmp_name']) || !is_uploaded_file($_FILES['myfile']['tmp_name'])) {
    echo 'No upload';
}

从文档中:

如果文件名命名的文件是通过 HTTP POST 上载的,则返回 TRUE。这对于帮助确保恶意用户没有试图诱骗脚本处理它不应该工作的文件(例如/etc/passwd)非常有用。

如果对上传的文件所做的任何事情都可能向用户甚至同一系统上的其他用户泄露其内容,则这种检查尤其重要。

编辑:我在我的FileUpload类中使用它,以防万一它有帮助:

public function fileUploaded()
{
    if(empty($_FILES)) {
        return false;       
    } 
    $this->file = $_FILES[$this->formField];
    if(!file_exists($this->file['tmp_name']) || !is_uploaded_file($this->file['tmp_name'])){
        $this->errors['FileNotExists'] = true;
        return false;
    }   
    return true;
}

答案 2

这段代码对我有用。我正在使用多个文件上传,因此我需要检查是否有任何上传。

部分:

<input name="files[]" type="file" multiple="multiple" />

PHP 部分:

if(isset($_FILES['files']) ){  


foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){

      if(!empty($_FILES['files']['tmp_name'][$key])){

    //  things you want to do
    }
}

推荐