2011-05-15 81 views
2

我試圖讓我的網站的大小使用PHP和FTP。 我想獲得httpdocs下所有東西的大小(文件和目錄合併)使用php的FTP功能獲取整個網站的大小

並輸出:我的網站是42.5MB。

我試過ftp_rawlist,但是這給了我一個醜陋的數組,我不知道如何解析。 (林新的PHP陣列)。它也只給出了httpdocs下文件的文件大小,而不是httpdocs中目錄內的文件。

是否有某種遞歸函數會執行此操作?

+0

快速的問題:我下面回答我自己的問題,但如果有人有時間來檢查它,你可以看到,如果總文件大小是正確的?我在想它可能不會輸出正確的尺寸。請第三方的健康檢查。 = D – David 2011-10-16 14:28:43

回答

2

想通了。

無論如何,這裏是我寫的讓這個工作。

<?php 
$host = 'HOST'; 
$username = 'USERNAME'; 
$password = 'PASSWORD'; 
$dir_is = 'DIRECTORY_TO_USE'; 
$conn_id = ftp_connect($host); 
$login_result = ftp_login($conn_id, $username,$password); 
$rawfiles = ftp_rawlist($conn_id, $dir_is, true); 

$total_size = 0; 
foreach($rawfiles as $info){ 
    $info = preg_split("/[\s]+/", $info, 9); 
    $size = $info[4]; 
    $total_size += $size; 
} 

function convert_size($size, $decimals = 1) { 
    $suffix = array('Bytes','KB','MB','GB','TB','PB','EB','ZB','YB','NB','DB'); 
    $i = 0; 

    while ($size >= 1024 && ($i < count($suffix) - 1)){ 
    $size /= 1024; 
    $i++; 
    } 
    return round($size, $decimals).' '.$suffix[$i]; 
} 

echo 'Total Size is: '.convert_size($total_size); 

?> 

請以你的連接信息:

$host = 'HOST'; 

$username = 'USERNAME'; 

$password = 'PASSWORD'; 

$dir_is = 'DIRECTORY_TO_USE'; 
0

是否有某種遞歸函數會這樣做?

不,你必須自己寫。如果你對數組不熟悉,那就意味着你完全不熟悉php,因爲大部分工作都是在數組上完成的。你會需要更多的字符串這裏解析,這裏是通用算法:

  1. 迭代通過該數組每多個空格替換爲單空間
  2. 爆炸,空間線,你會得到新的數組
  3. 採取的第一個字符新數組中的第一個元素
  4. 如果char等於' - ',則有常規文件 - 將第5個元素(大小)添加到全局計數器
  5. 否則,id char等於'd' - 它是目錄。它的名字在新數組的最後一個元素中 - 打開它並從第一步開始重複,直到用完文件;)
  6. 每個其他起始字符,如's'(套接字)或'l'(符號鏈接),可因爲沒有正規文件被省略,並且它們的大小是相當微不足道

這是一個小步行約版,適當的是使用sscanf解析單行線,但我覺得這一塊上面介紹對於初學者更容易理解

+0

「大部分工作都是在陣列上完成的」? – 2011-06-12 17:46:05