2012-03-20 62 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循環