![](/img/trans.png)
[英]FTP transfer all files in a remote directory, and tweak permissions, using PHP
[英]php - ftp all files in a directory?
嘗試使用php獲取目錄中的所有文件並將其保存在本地...似乎我經常需要指定一個名稱? 是對的嗎?
function grabFiles() {
$conn = ftp_connect(REMOTE);
@ftp_login($conn, REMOTEUSER, REMOTEPASS);
ftp_get($conn, '*', FTP_BINARY);
}
您可以使用ftp_nlist
獲取所有文件的列表:
http://www.php.net/manual/en/function.ftp-nlist.php
瀏覽該數組並使用ftp_fget
下載每個文件:
http://www.php.net/manual/en/function.ftp-fget.php
我剛剛寫了一個ftp_glob
函數,因為我在項目中也需要它。 它的工作方式與glob()完全相同,但沒有任何選項。
用法示例
$ftp = ftp_connect($server, $port, 90);
ftp_login($ftp, $login, $password);
ftp_pasv($ftp, true);
$list = ftp_glob($ftp, "/sample/*.csv");
碼
function ftp_glob($resource, $pattern)
{
$dir_patterns = explode('/', ltrim($pattern, '/'));
if (count($dir_patterns) == 0)
{
return array ();
}
$paths_to_check = array (ftp_pwd($resource));
return ftp_glob_rec($resource, $dir_patterns, $paths_to_check);
}
function ftp_glob_rec($resource, $dir_patterns, $paths_to_check)
{
$matching_paths = array();
$pattern = array_shift($dir_patterns);
foreach ($paths_to_check as $path)
{
$list = ftp_nlist($resource, $path);
if ($list === false)
{
continue ;
}
foreach ($list as $file)
{
if (in_array($file, array('.', '..')))
{
continue ;
}
if (match($file, $pattern) > 0)
{
$matching_paths[] = rtrim($path, '/') . '/' . $file;
}
}
}
if (count($dir_patterns) == 0)
{
return $matching_paths;
}
return ftp_glob_rec($resource, $dir_patterns, $matching_paths);
}
function match($string, $pattern, $a = 0, $b = 0, $options = '')
{
if ((!isset($string[$a])) && (!isset($pattern[$b])))
{
return 1;
}
if (strpos($options, 'x') !== false)
{
if (($string[$a] == "\n") || ($string[$a] == "\t") || ($string[$a] == "\r") || ($string[$a] == " "))
{
return (match($string, $pattern, ($a + 1), $b, $options));
}
if (($pattern[$b] == "\n") || ($pattern[$b] == "\t") || ($pattern[$b] == "\r") || ($pattern[$b] == " "))
{
return (match($string, $pattern, $a, ($b + 1), $options));
}
}
if ((isset($pattern[$b])) && ($pattern[$b] == '*'))
{
if (isset($string[$a]))
{
return (match($string, $pattern, ($a + 1), $b, $options) + match($string, $pattern, $a, ($b + 1), $options));
}
else
{
return (match($string, $pattern, $a, ($b + 1), $options));
}
}
if ((isset($string[$a])) && (isset($pattern[$b])) && ($pattern[$b] == '?'))
{
return (match($string, $pattern, ($a + 1), ($b + 1), $options));
}
if ((isset($string[$a])) && (isset($pattern[$b])) && ($pattern[$b] == '\\'))
{
if ((isset($pattern[($b + 1)])) && ($string[$a] == $pattern[($b + 1)]))
{
return (match($string, $pattern, ($a + 1), ($b + 2), $options));
}
}
if ((isset($string[$a])) && (isset($pattern[$b])) && ($string[$a] == $pattern[$b]))
{
return (match($string, $pattern, ($a + 1), ($b + 1), $options));
}
return 0;
}
是的,這是正確的,但在foreach循環中使用glob並獲取目錄中的所有文件將非常容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.