如何测试用户是不是选择了要上传的文件?
Posted
技术标签:
【中文标题】如何测试用户是不是选择了要上传的文件?【英文标题】:How to test if a user has SELECTED a file to upload?如何测试用户是否选择了要上传的文件? 【发布时间】:2011-02-26 20:11:00 【问题描述】:在一个页面上,我有:
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的情况下编辑信息,则会引发错误:'error you must upload the right type'
所以,如果用户没有在输入框中输入任何内容来上传它,我不想进入这些条件测试。
我测试过:
if (!empty($_FILES['logo']['name'])
和 if (isset($_FILES['logo']['name'])
但两者似乎都不起作用。
有什么想法吗?
编辑:也许我不太清楚,我不想测试他是否上传了徽标,我想测试他是否选择了要上传的文件,因为现在,如果他没有选择文件要上传,php 会报错,告诉他必须以正确的格式上传。
谢谢。
【问题讨论】:
【参考方案1】:您可以通过以下方式检查:
if (empty($_FILES['logo']['name']))
// No file was selected for upload, your (re)action goes here
或者您可以使用 javascript 构造,仅当上传字段的值不是空字符串 ("") 时才启用上传/提交按钮,以避免在根本不上传的情况下提交表单。
【讨论】:
这就是我想要的。谢谢... +1 提问和回答。 (y)【参考方案2】: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) ...
您还应该考虑检查(并可能为用户提供适当的响应)其他各种错误。
【讨论】:
@Tristan 睁开眼睛看看:值:4; 没有上传文件 @Col。弹片哎呀,确实,对不起,也许是我戴眼镜的时候了;p 我自己检查了这个。这确实是检查这种情况的正确方法。另请注意:“如果您的表单中没有选择要上传的文件,PHP 将返回 $_FILES['userfile']['size'] 为 0,并且 $_FILES['userfile']['tmp_name'] 为无。” (来自 PHP 文档)php.net/manual/en/features.file-upload.post-method.php【参考方案3】:您应该使用is_uploaded_file($_FILES['logo']['tmp_name']) 来确保文件确实是通过 POST 上传的。
【讨论】:
我在我的帖子中添加了一些信息。如果你能看看它。谢谢【参考方案4】:我会测试if (@987654321@($_FILES['logo']['tmp_name']))
看看它是否有效。
或者,更恰当地说(感谢 Baloo):if (@987654322@($_FILES['logo']['tmp_name']))
【讨论】:
我在我的帖子中添加了一些信息。如果你能看看它。谢谢【参考方案5】:我们可以使用
对于单个文件:
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
【讨论】:
【参考方案6】:if ($_FILES['logo']['error'] === 0)
是唯一正确的方法
【讨论】:
这与 PHP 文档的说明相反。如果文件成功上传,这实际上将评估为 true。 php.net/manual/en/features.file-upload.errors.php以上是关于如何测试用户是不是选择了要上传的文件?的主要内容,如果未能解决你的问题,请参考以下文章