PHP中的If语句帮助

PHP中的If语句帮助,php,image,if-statement,directory,Php,Image,If Statement,Directory,所以出于某种原因,这对我来说毫无意义 我想做的是显示两件事中的一件: 如果文件夹中只有一个图像的文件太大,请显示上面的错误消息 如果所有文件大小都正常,则显示一些HTML代码 另外,如果我希望限制为5MB,我的阈值是否正确 <?php $threshold = 5368709120; $path = 'dir/'.$username; foreach (glob($path."/{*.gif,*.jpg,*.jpeg,*.png}",GLOB_BRACE|GLOB_NOSORT) as $

所以出于某种原因,这对我来说毫无意义

我想做的是显示两件事中的一件:

  • 如果文件夹中只有一个图像的文件太大,请显示上面的错误消息
  • 如果所有文件大小都正常,则显示一些HTML代码
  • 另外,如果我希望限制为5MB,我的阈值是否正确

    <?php
    $threshold = 5368709120;
    $path = 'dir/'.$username;
    foreach (glob($path."/{*.gif,*.jpg,*.jpeg,*.png}",GLOB_BRACE|GLOB_NOSORT) as $filename)  
    {
        $size = filesize($filename);
        if ($size > $threshold) {
            exit('One or more of your photos are larger than 5MB. Resize your photos and try again.');
        }
    }
    ?>
    

    不,您的文件限制实际上是5 GB:

    5 -> bytes = 5
    5 * 1024 -> kilobytes = 5,120
    5 * 1024 * 1024 -> megabytes = 5,242,880
    5 * 1024 * 1024 * 1024 -> gigabytes => 5,368,709,120
    
    为了方便用户,您应该告诉用户哪个文件太大,并在退出之前检查所有文件。假设用户不知道有5兆的限制,上传了50个文件。49个太大了。你只是告诉用户有问题,而不是问题的起因。现在他们必须重新上传一个文件,然后再上传一次。现在有48个文件太大了,它们到处都是

    这样更合适

    $limit = 5 * 1024 * 1024; // 5 meg
    $errors = array();
    
    foreach (glob($path."/{*.gif,*.jpg,*.jpeg,*.png}",GLOB_BRACE|GLOB_NOSORT) as $filename)  
       if (filesize($filename) > $limit) {
          $errors[] = $filename
       }
    }
    
    if (count($errors) > 0) {
       echo "The following files are too large: <ul>";
       echo implode("</li><li>", $errors);
       echo "</ul>";
    } else {
       echo "Everything A-OK!";
    }
    
    $limit=5*1024*1024;//5兆欧
    $errors=array();
    foreach(glob($path./{*.gif、*.jpg、*.jpeg、*.png})、glob_BRACE | glob_NOSORT)作为$filename)
    if(文件大小($filename)>$limit){
    $errors[]=$filename
    }
    }
    如果(计数($errors)>0){
    echo“以下文件太大:
      ”; 回波内爆(“
    • ”,$errors); 回声“
    ”; }否则{ 回声“一切都好!”; }
    不,您的文件限制实际上是5 GB:

    5 -> bytes = 5
    5 * 1024 -> kilobytes = 5,120
    5 * 1024 * 1024 -> megabytes = 5,242,880
    5 * 1024 * 1024 * 1024 -> gigabytes => 5,368,709,120
    
    为了方便用户,您应该告诉用户哪个文件太大,并在退出之前检查所有文件。假设用户不知道有5兆的限制,上传了50个文件。49个太大了。你只是告诉用户有问题,而不是问题的起因。现在他们必须重新上传一个文件,然后再上传一次。现在有48个文件太大了,它们到处都是

    这样更合适

    $limit = 5 * 1024 * 1024; // 5 meg
    $errors = array();
    
    foreach (glob($path."/{*.gif,*.jpg,*.jpeg,*.png}",GLOB_BRACE|GLOB_NOSORT) as $filename)  
       if (filesize($filename) > $limit) {
          $errors[] = $filename
       }
    }
    
    if (count($errors) > 0) {
       echo "The following files are too large: <ul>";
       echo implode("</li><li>", $errors);
       echo "</ul>";
    } else {
       echo "Everything A-OK!";
    }
    
    $limit=5*1024*1024;//5兆欧
    $errors=array();
    foreach(glob($path./{*.gif、*.jpg、*.jpeg、*.png})、glob_BRACE | glob_NOSORT)作为$filename)
    if(文件大小($filename)>$limit){
    $errors[]=$filename
    }
    }
    如果(计数($errors)>0){
    echo“以下文件太大:
      ”; 回波内爆(“
    • ”,$errors); 回声“
    ”; }否则{ 回声“一切都好!”; }
    您的代码是正确的,尽管您的阈值不正确
    5368709120
    是5,您需要
    5000000


    只是百万的另一个词。

    您的代码是正确的,尽管您的阈值不是
    5368709120
    是5,您需要
    5000000


    只是百万的另一个词。

    为了使代码的意图始终清晰,我将使用以下内容:

    $threshold = 5 * 1024 * 1024; // 5MB
    

    我将使用以下内容,以便代码的意图始终清晰:

    $threshold = 5 * 1024 * 1024; // 5MB
    
    您的问题是,您没有在文件的完整路径上调用
    filesize()
    ,而只是在文件名上调用。这意味着,如果文件位于当前工作目录之外(看起来是这样),它将无法工作。显然,这与
    glob()
    不符

    关于
    我的阈值是否正确如果我希望限制为5MB
    ,确保它正确的简单方法是计算它,而不是硬编码它:

    $threshold = 1024 * 1024 * 5;
    
    实际上,您正在查找超过5 GB的文件。

    您的问题是,您没有在文件的完整路径上调用
    filesize()
    ,而只是在文件名上调用。这意味着,如果文件位于当前工作目录之外(看起来是这样),它将无法工作。显然,这与
    glob()
    不符

    <?php
    $threshold = 5 * 1024 * 1024; // 5MB
    $path = 'dir/'.$username;
    foreach (glob($path."/{*.gif,*.jpg,*.jpeg,*.png}",GLOB_BRACE|GLOB_NOSORT) as $filename)  
    {
        $size = filesize($filename);
        if ($size > $threshold) {
            exit('One or more of your photos are larger than 5MB. Resize your photos and try      
    again.');
        }
    }
    ?>
    //display html code here
    
    关于
    我的阈值是否正确如果我希望限制为5MB
    ,确保它正确的简单方法是计算它,而不是硬编码它:

    $threshold = 1024 * 1024 * 5;
    
    实际上,您正在查找超过5 GB的文件。

    
    
    <?php
    $threshold = 5 * 1024 * 1024; // 5MB
    $path = 'dir/'.$username;
    foreach (glob($path."/{*.gif,*.jpg,*.jpeg,*.png}",GLOB_BRACE|GLOB_NOSORT) as $filename)  
    {
        $size = filesize($filename);
        if ($size > $threshold) {
            exit('One or more of your photos are larger than 5MB. Resize your photos and try      
    again.');
        }
    }
    ?>
    //display html code here
    
    //在此处显示html代码
    只需在foreach循环之后的任意位置添加html代码,因为它已经通过了if //$size>$threshold检查(并且已经检查了for循环中的所有图像

    
    //在此处显示html代码
    
    只需在foreach循环之后的任意位置添加html代码,因为它已经通过了if
    //$size>$threshold检查(并且已经检查了for循环中的所有图像

    有什么不合理的地方?它不是按照您想要的方式工作吗?不,我不知道如何编写IF语句。如果我将HTML代码添加到底部,无论所有图像的文件大小是否合适,它都会显示出来。我只希望在所有文件大小都合适的情况下显示HTML代码。您可以使用
    5*pow(10,6)
    以获得SI 5mb,或者使用
    5*pow(2,20)
    以旧的方式我认为您希望
    5242880
    作为阈值。(5*1024*1024)5MB将是5242880字节。你的数字是5GB。有什么不合理的地方吗?它不是按照你想要的方式工作吗?不,我不知道如何编写IF语句。如果我将HTML代码添加到底部,无论所有图像的文件大小是否合适,它都会显示出来。我只想在所有文件大小都合适的情况下显示HTML代码。你可以使用
    5*pow(10,6)
    以获得SI 5mb,或使用
    5*pow(2,20)
    以传统方式我认为您希望
    5242880
    作为阈值。(5*1024*1024)5MB将是5242880字节。您的数字是5GB。glob的返回值实际上包括路径。我必须自己检查它,但它确实…@MarcB哦…对。我总是使用
    opendir()
    (习惯的力量),但我认为
    glob()
    基本上会做相同的事情。注意到了。Marc B是正确的。(我也检查了。)如果你使用的是
    readdir()
    ,你只会得到文件名。glob的返回值实际上包括路径。我必须自己检查它,但它确实…@MarcB哦…对。我总是使用
    opendir()
    (习惯的力量),但我认为
    glob()
    会做基本相同的事情。注意到了。Marc B是正确的。(我也检查了。)如果你使用的是
    readdir()
    你只会得到文件名。嗯?。显然,5368709120不是