1

您好,由于某种原因,我无法让我的程序查看我的文件是否为空,如果选择了某些内容,它不应该通过,但它是。这是代码

if (empty($_FILES['file'] ) )
    {
        echo "testing";
        $seterror =1;
        returnBack();

    } 
4

6 回答 6

2

从您在评论中提供的 var_dump($_FILES) 看来,它似乎没有回显“测试”(即它不起作用),因为 $_FILE['file'] 不为空。

根据您提供给我的内容:

$_FILES['file'] = array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["错误"]=> int(4) ["size"]=> int(0) }

我不完全确定 empty() 如何处理数组(文档只是说它将为空数组返回 true),但至少你需要摆脱 $_FILES['file'][' error'] (它不是空的,因为它是一个 int(4)),或者使用 empty() 来检查类似 $_FILES['file']['name']

因此,使用我的建议,代码如下所示:

if (empty($_FILES['file']['name'])) {
    echo "testing";
    $seterror = 1;
    returnBack();    
}

或者(因为我对 PHP 数组的理解可能有问题),试试这个:

if(empty($_FILES['file']['name'])) {
    echo "testing";
    $seterror = 1;
    returnBack();
}
于 2012-09-05T00:15:18.733 回答
2

如果你输出文件数组,你会得到什么?(即print_r($_FILES);

您的代码不会告诉您调用的文件的内容是否file为空,它会告诉您的值是否$_FILES['file']为空,这可能不是您想要的。你也可能不想要这样的逻辑empty——你试过这个看看是否有区别吗?

if (array_key_exists('file', $_FILES)) {
    ...
}
于 2012-09-04T23:55:49.433 回答
1

我想你可以试试这个

if(empty($_FILES['file']['name']))
{
    // not uploaded
}
else
{
    // uploded
}
于 2012-09-05T00:15:16.020 回答
1

PHP 中的语言结构empty()和数组不能很好地混合。此外,如果您<input type='file' name='file' />的表单中有 a,您获得一个$_FILES[]数组。你应该做if( !array_key_exists('file', $_FILES) ) { // no file uploaded }的开始。

实际上,您应该进行几项检查:

  • 如果file元素被填充$_FILES
  • 如果没有错误(即$_FILES['file']['error']== 0)
  • 如果上传文件的临时位置有文件名
  • 如果 PHP 认为它是一个上传的文件和/或它可以移动它

只有所有这些都是真实的,您才有要处理的文件。否则你不会。

我发现在文件上传处理程序上认真执行这些步骤是完全可靠的。

于 2012-09-05T00:23:34.730 回答
1

如果您正在测试空文件,这里是代码

$file = 'test.txt';

if(filesize($file) == NULL) {
    echo "empty"; 
}
于 2012-09-05T00:01:13.740 回答
0

好的,所以我必须做的是检查它是否出错 - 所以如果它出错了,它就不会通过,因为这意味着它是空的

代码:

if (!empty($_FILES['file']['error'] ) )
    {

        echo "file";
        $seterror =1;
        returnBack();

    } 

非常感谢你们的帮助!

于 2012-09-05T00:35:08.630 回答