PHP中的If-Statement帮助

时间:2012-03-20 14:58:11

标签: php image if-statement directory

所以出于某种原因,这对我来说没有意义。

我想要做的是显示以下两件事之一:

  1. 如果文件夹中只有1个图像的文件大小太大,请显示上面的错误消息。
  2. 如果所有文件都没问题,则显示一些HTML代码
  3. 另外,如果我希望限制为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 个答案:

答案 0 :(得分:2)

不,你的文件限制实际上是5千兆字节:

5 -> bytes = 5
5 * 1024 -> kilobytes = 5,120
5 * 1024 * 1024 -> megabytes = 5,242,880
5 * 1024 * 1024 * 1024 -> gigabytes => 5,368,709,120

为了用户友好,您应该告诉用户WHICH文件太大,以及在退出之前检查所有文件。假设用户不知道有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!";
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

关于is my threshold correct if I want the limit to be 5MB,确保它是正确的简单方法是计算它而不是硬编码:

$threshold = 1024 * 1024 * 5;

实际上,您正在寻找超过5 GB的文件。

答案 3 :(得分:1)

<?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

只需在foreach循环后的任何地方添加html代码,因为它已经传递了if     // $ size&gt; $ threshold check(并且已遍历for循环中的所有图像

答案 4 :(得分:0)

您的代码是正确的,但您的阈值不是。 5368709120为5 GiB,您需要5000000

mega只是百万的另一个词。