2017-05-24 65 views
0

如何在PHP中检测上传的图像是否为空?检测文件名是否为空

+0

''_FILES ['file'] ['size']''是指图像的大小,以字节为单位,而不是文件名的长度。为此,你应该使用''strlen($ _ FILES ['file'] ['name'])''。 – alistaircol

+0

if(isset($ _ FILES ['file']))? – MacBooc

+0

如果没有文件上传,也可以返回错误代码“4”。你的if语句的第二个条件可能是错误的。 – ViLar

回答

1

使用/检查文件名值:

这是不好的做法使用由上传脚本给定的文件名。您有no idea what this value can be或脚本的任何用户将尝试将该值设置为。

如果你想检查上传表单给出的文件名是否为空,你可以简单地使用if(empty($_FILES['file']['tmp_name'])){...这将返回布尔值(true/false)。 Read about empty()

语法不一致:

您在这里有一个逻辑上的矛盾:

if ($_FILES['file']['size'] == 0 && $_FILES['file']['error'] == 0) { 

如果文件大小是零,这通常意味着该文件是NULL或空或不你真的想有一个文件上传。 但是$_FILES['file']['error']将只返回零如果没有错误

你可能想什么是错误号码4,具体是指没有文件被上传:

if($_FILES['file']['error'] == 4){ 
    //no file was uploaded. 
} 

See the manual reference

示例代码检查文件上传就可以了,并检查文件名是安全的:

正如我前面所说,这是不好的做法使用由上传脚本给定的名称,如果你要使用这个数值我强烈建议您使用它preg_replace去除无效字符,然后测试如果空:

if($_FILES['file']['error'] == 0 && $_FILES['file']['size'] > 0){ 
    ///file was uploaded ok, has a size above zero bytes. 

    $uploadedFileName = preg_replace("/[^0-9a-z._-]/i","",$_FILES['file']['name']); 
    if (empty($uploadedFileName)){ 

     //sorry no file name was given.... 

    } 
} 
+0

[*不客气... *](https://stackoverflow.com/questions/44162978/ph​​p-mysql-check-password-for-a-specific-username-if-username-exists/44163230?noredirect = 1#comment75345170_44163230);-) –

+0

@ Fred-ii-很高兴今年将你添加到我的*圣诞卡片列表中...... – Martin

+0

将一个放入iframe中某处;-) * JoyeuxNoël*提前的时间。 –

0

您可以轻松地检查是否是空的,

$uploadedFile = $_FILES['file']['name']; 
if ($uploadedFile==""){ 
    //do something 
} 
0

首先检查如果文件名设置,事后检查文件名的值不为空。

请尝试以下代码:

if (isset($_FILES['file']['name'])) { 
    if ($_FILES['file']['name'] != "") { 
     $uploadedFile = $_FILES['file']['tmp_name']; 
     $image = imagecreatefrompng($uploadedFile); 
     ... 
    } 
}