如何testing用户是否select了要上传的文件?

在一个页面上,我有:

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,就会产生一个错误:'错误您必须上传正确的types'

所以,如果用户没有在input框中放置任何东西来上传它,我不想在这些条件下inputtesting。

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

但两者似乎都不起作用。

有任何想法吗?

编辑:也许我不是很清楚,我不想testing他是否上传了一个标志,我想testing如果他select了一个file upload,因为现在,如果他没有select一个file upload, PHP提出一个错误,告诉他必须以正确的格式上传。

谢谢。

你可以检查这个:

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

或者,您可以使用JavaScript构造,只有在上传字段的值不是空string(“”)时才启用上传/提交button,以避免提交没有上传的表单。

有关文件处理的 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. 

在你的情况下你需要像这样的代码

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

要么

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

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

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

我会testingif ( file_exists ($_FILES['logo']['tmp_name'])) ,看看它是否工作。

或者,更贴切地(谢谢Baloo): if ( is_uploaded_file ($_FILES['logo']['tmp_name']))

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

是唯一正确的方法