我需要一個FTP服務器上所有文件(和相關文件大小)的列表。我可以使用CodeIgniter的FTP類獲取文件列表,但不知道如何獲取文件大小。我如何獲得文件大小?謝謝。如何獲取FTP服務器上文件的文件大小?
回答
我對CodeIgniter的FTP類一無所知,但這又如何呢?
http://www.php.net/manual/en/function.ftp-rawlist.php
我假設FTP類的list_files()方法不提供此信息。那是對的嗎?
get_file_info('path/to/file', $file_information)
給定一個文件名和路徑,返回名稱,路徑,大小,修改日期。第二個參數允許你顯式聲明你想要返回的信息;選項有:名稱,服務器路徑,大小,日期,可讀,可寫,可執行文件,文件。如果無法找到文件,則返回FALSE。
我不明白這是如何通過FTP連接工作? – 2010-07-09 09:25:22
@pekka它不,我認爲這是一個誤讀。 – DRL 2010-07-09 10:36:49
其相對簡單的擴展CI FTP類:
class MY_FTP extends CI_FTP {
function MY_FTP()
{
parent::CI_FTP();
}
function get_file_size()
{
}
}
基本上只是讓get_ftp_size()的包裝爲:
return ftp_size($conn, $file);
http://php.net/manual/en/function.ftp-size.php
我希望這有助於(如果您通過你安裝的ftp.php文件被卡住了;你應該很快找到你的方式)
編輯
由於wimvds正確建議的ftp_rawlist()可能是更理想/更容易的選擇,我可能甚至走那麼遠,建議改變list_files()使用ftp_rawlist()。
爲[ftp_rawlist](http://www.php.net/manual/en/function.ftp-rawlist.php)添加包裝可能會更容易,因此您可以將文件名和大小都設置爲一個FTP命令...您將不得不解析結果(因爲它只是每個文件返回一個字符串)。 – wimvds 2010-07-09 11:01:33
請注意,有一個chanche,FTP服務器已禁用角蛋白功能,或它不會讓你然後調用(例如filesize()函數)。 此外,標準的文件大小()http://php.net/manual/en/function.filesize.php通過ftp
functionshould工作剛剛有了一個快速瀏覽一下CodeIgniters FTP類。至於它與PHP4向後compat的,如果你要,你可以probabaly做到這一點(破解工作)寫的。
<?php
$files = $this->ftp->list_files('/folder/');
foreach ($files as $file)
{
echo 'File:'. $file .' Size: '. ftp_size($this->ftp->conn_id, $file) .' <br />';
}
$this->ftp->close();
我不建議這一點 - 這是probabably值得推廣的主要CI ftp類
class FTP extends CI_FTP
{
function FTP()
{
// call parent constructor
parent::CI_FTP();
}
// Single file size
function file_size($file)
{
return ftp_size($this->conn_id, $file);
}
}
把上面到應用程序/庫,並將其保存爲ftp.php。如果您運行CI的更新版本,它會加載您的擴展。
由於CI仍是PHP 4兼容的,你也許可以做到快速和骯髒如下:
$this->load->library('ftp');
$config['hostname'] = 'ftp.example.com';
$config['username'] = 'your-username';
$config['password'] = 'your-password';
$config['debug'] = TRUE;
$this->ftp->connect($config);
$files = ftp_rawlist($this->ftp->conn_id, $path);
在$文件,你應該得到每個文件一行,包含文件權限,所有者/組,文件大小和文件名。你將不得不解析這個分開顯示它們。免責聲明:只需從CI手冊複製/粘貼連接信息,添加基於CI源代碼YMMV:p的最後一行即可。
經過努力,這段代碼很好用!我想和社區分享(通過MundialSYS)
function dirFTPSize($ftpStream, $dir) {
$size = 0;
$files = ftp_nlist($ftpStream, $dir);
foreach ($files as $remoteFile) {
if(preg_match('/.*\/\.\.$/', $remoteFile) || preg_match('/.*\/\.$/', $remoteFile)){
continue;
}
$sizeTemp = ftp_size($ftpStream, $remoteFile);
if ($sizeTemp > 0) {
$size += $sizeTemp;
}elseif($sizeTemp == -1){//directorio
$size += dirFTPSize($ftpStream, $remoteFile);
}
}
return $size;
}
$hostname = '127.0.0.1'; // or 'ftp.domain.com'
$username = 'username';
$password = 'password';
$startdir = '/public_html'; // absolute path
$files = array();
$ftpStream = ftp_connect($hostname);
$login = ftp_login($ftpStream, $username, $password);
if (!$ftpStream) {
echo 'Wrong server!';
exit;
} else if (!$login) {
echo 'Wrong username/password!';
exit;
} else {
$size = dirFTPSize($ftpStream, $startdir);
}
echo number_format(($size/1024/1024), 2, '.', '') . ' MB';
ftp_close($ftpStream);
好的代碼! 費爾南多
- 1. C#在FTP服務器上沒有獲取文件大小
- 2. IIS ftp服務器沒有響應獲取文件大小
- 3. Android:如何通過FTPClient獲取FTP文件的文件大小?
- 4. 如何從FTP服務器上逐行讀取文本文件?
- 5. codeigniter ftp獲取文件大小
- 6. 在C中獲取FTP文件大小#
- 7. 獲取FTP服務器上文件的修改時間
- 8. 如何在將文件寫入服務器之前獲取文件大小?
- 9. 刪除Ftp服務器上的文件?
- 10. 如何獲取ftp服務器中文件或文件夾的路徑?
- 11. 如何從FTP服務器獲取文件名?
- 12. 如何在ftp服務器上只讀取十二個文件?
- 13. 獲取日期從文件上傳到遠程FTP服務器
- 14. 在FTP服務器上修改文件
- 15. c#上傳文件到FTP服務器
- 16. 上傳文件到FTP服務器
- 17. 上傳文件FTP服務器
- 18. ASP.Net文件上傳到FTP服務器
- 19. 上傳.txt文件到FTP服務器
- 20. 空文件上傳到FTP服務器
- 21. 上傳文件到FTP服務器
- 22. ftp'ing後如何獲取文件的大小?
- 23. 遍歷FTP子文件夾來獲取文件大小在C#
- 24. 如何使用C#獲取一個範圍從FTP服務器上的文件
- 25. 通過FTP在FTP服務器上檢查文件大小是否存在沒有擴展名的文件?
- 26. 550錯誤當我嘗試獲取FTP上的文件大小
- 27. Xcode - 如何將文本文件(.txt)上傳到FTP服務器
- 28. 的Apache Web服務器獲取 - 文件大小
- 29. 如何從服務器獲取文件
- 30. 將下載文件的文件大小與ftp服務器上的遠程文件進行比較
我認爲他想堅持CI的FTP功能('ftp_rawlist()'可能需要在使用PHP的內置函數打開的FTP連接時使用)。但是,它看起來像CI實際上不提供功能。 – 2010-07-09 09:26:08
@Pekka:CI FTP類是標準PHP FTP函數的簡單包裝類,所以很容易擴展它並添加一個執行ftp_rawlist的額外包裝函數。 CI的list_files只是調用ftp_nlist btw。 – wimvds 2010-07-09 11:04:26
@wim啊,有道理。 – 2010-07-09 12:09:54