如何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)
是唯一正确的方法