2012-03-20 64 views
0

因此,出于某种原因,这对我来说没有任何意义。If-Statement Help in PHP

什么即时试图做的是两两件事显示1:

  1. 如果只是1图像的文件夹中的文件大小太大,显示错误消息,我有以上。
  2. 如果所有的filesizes的都行,显示出位的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.'); 
    } 
} 
?> 
+2

什么没有意义吗?它不会像你想要的那样工作吗? – Nanne 2012-03-20 15:00:04

+0

不,我不知道如何编写IF语句。如果我将HTML代码放在底部,它会显示无论所有图像的文件大小是如果所有文件大小都正常,我只想要显示HTML代码。 – blbaker 2012-03-20 15:03:31

+0

您可以使用'5 * pow(10,6)'获取SI 5mb,或者使用'5 * pow(2,20) )'对于旧的学校方式 – ianbarker 2012-03-20 15:03:46

回答

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 

对用户友好,你应该知道哪些文件太大的用户,以及在退出之前检查所有文件。假设用户不知道有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!"; 
} 
+0

'echo“以下文件太大:

  • ”; echo implode(“
  • ”,$ errors); echo“
”;' – AndrewR 2012-03-20 15:17:33

+0

非常感谢!在$ errors [] = $ filename之前/之后的'{'和两个'}'导致了一个错误,但我弄明白了。你摇滚! – blbaker 2012-03-20 15:18:18

0

你的代码是正确的,虽然你的门槛是不是。 5368709120是5 GiB,你想要5000000

mega只是万字的另一个词。

+0

咦? [千兆意味着十亿](http://en.wikipedia.org/wiki/Giga-)。显然,5368709120不是50亿。 – phihag 2012-03-20 15:10:45

1

我会用下面这样的代码的意图是始终明确:

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

你的问题是,你是不是该文件的完整路径上调用 filesize(),只是在文件名称。这意味着如果文件驻留在当前工作目录之外 - 就像它看起来那样 - 它将不起作用。 显然这与​​3210不符。

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

$threshold = 1024 * 1024 * 5; 

正因为如此,你在5 GB寻找文件。

+2

glob的返回值实际上包含路径。必须自己检查一下,但它确实... – 2012-03-20 15:08:08

+0

@MarcB哦...对。我总是使用'opendir()'(习惯的力量),但我认为'glob()'基本上会做同样的事情。正式指出。 – DaveRandom 2012-03-20 15:09:42

+0

Marc B是正确的。 (我也检查过了。)如果你使用'readdir()',你只能得到文件名。 – AndrewR 2012-03-20 15:10:00

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 

只需添加HTML代码中的foreach循环后的任何地方,因为它已经通过了,如果 // $大小> $阈值检查(并已通过所有的图像消失在for循环