2011-05-15 25 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