在页面上,我有:
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引发错误,告诉他必须以正确的格式上传。
感谢。
答案 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)
是唯一正确的方法