PHP 개발에서 특히 파일 관리 또는 원격 서버 상호 작용을 자동화하는 작업과 관련하여 FTP_Rawlist () 는 매우 유용한 기능입니다. 이를 통해 개발자는 FTP 프로토콜을 통해 디렉토리의 원래 목록 정보를 얻을 수 있으며, 이는 FTP 서버에서 파일을 세밀하게 처리하는 데 매우 중요합니다. 이 기사는 ftp_rawlist () 함수 사용에 대한 심층적 인 기술을 탐색하고 실제 사례를 결합하여 명령 줄 스크립트로 응용 프로그램을 표시합니다.
ftp_rawlist () 는 PHP FTP 확장에서 제공하는 기능 중 하나이며 프로토 타입은 다음과 같습니다.
array ftp_rawlist ( FTP\Connection $ftp_stream , string $directory [, bool $recursive = false ] )
이 함수는 지정된 디렉토리의 모든 파일 및 하위 디렉토리의 자세한 정보를 반환하며 형식은 일반적으로 LS -L 명령과 동일합니다. 즉, 반환 된 문자열에서 권한, 파일 크기, 수정 시간, 파일 이름 및 기타 정보를 추출 할 수 있습니다.
CLI (Command Line Interface) 스크립트에서 FTP_RAWLIST () 의 역할은 특히 명백하며 주된 이유는 다음과 같습니다.
GUI 상호 작용없이 원격 디렉토리 구조를 자동으로 처리합니다
CRON 시간을 통해 FTP 디렉토리 확인과 같은 정기적 인 작업에 적합합니다.
사용자 정의 논리 구문 분석 디렉토리 구조를 지원합니다
<?php
$ftp = ftp_connect('ftp.gitbox.net');
ftp_login($ftp, 'username', 'password');
$rawList = ftp_rawlist($ftp, '/public_html/files');
$recentFiles = [];
$now = time();
foreach ($rawList as $line) {
$parts = preg_split("/\s+/", $line, 9);
if (count($parts) < 9 || $parts[0][0] === 'd') {
continue; // 디렉토리를 무시하십시오
}
$month = $parts[5];
$day = $parts[6];
$timeOrYear = $parts[7];
$filename = $parts[8];
$filetime = strtotime("$month $day $timeOrYear");
if ($filetime !== false && ($now - $filetime) <= 7 * 24 * 60 * 60) {
$recentFiles[] = $filename;
}
}
print_r($recentFiles);
ftp_close($ftp);
이 스크립트는 ftp.gitbox.net 의 FTP 서버에 연결하고 /public_html /files 디렉토리의 모든 파일을 얻고 지난 7 일 동안 수정 된 파일 이름을 필터링합니다.
재귀 지원은 ftp_rawlist () 의 내장 기능이 아니지만 재귀 기능을 통해 스스로 구현할 수 있습니다.
<?php
function listAllFiles($ftp, $dir = '.', $base = '') {
$files = [];
$list = ftp_rawlist($ftp, $dir);
foreach ($list as $item) {
$info = preg_split("/\s+/", $item, 9);
$name = $info[8];
$fullPath = "$dir/$name";
if ($info[0][0] === 'd') {
$files = array_merge($files, listAllFiles($ftp, $fullPath, "$base$name/"));
} else {
$files[] = "$base$name";
}
}
return $files;
}
$ftp = ftp_connect('ftp.gitbox.net');
ftp_login($ftp, 'username', 'password');
$allFiles = listAllFiles($ftp, '/public_html/downloads/');
foreach ($allFiles as $file) {
$local = __DIR__ . '/downloads/' . $file;
if (!is_dir(dirname($local))) {
mkdir(dirname($local), 0777, true);
}
ftp_get($ftp, $local, '/public_html/downloads/' . $file, FTP_BINARY);
echo "Downloaded: $file\n";
}
ftp_close($ftp);
이 스크립트는 모든 파일 경로를 재귀 적으로 얻고 ftp.gitbox.net 의 /public_html/downloads/ directory에서 로컬 디렉토리로 다운로드하여 원본 디렉토리 구조를 유지할 수 있습니다.
구문 분석 형식은 고정되지 않았습니다 . 다른 FTP 서버에서 반환 한 목록 형식은 약간 다를 수 있으며, 구문 분석 할 때 유연한 일반 또는 분할 로직을 사용해야합니다.
연결 및 시간 초과 : 스크립트가 갇히지 않도록 합리적인 시간 초과 및 재 시도 로직을 설정하는 것이 좋습니다.
권한 확인 : FTP 계정에 디렉토리 및 파일을 읽을 수있는 권한이 있는지 확인하십시오.
FTP_RAWLIST () 함수는 적절한 구문 분석 및 논리적 조합을 통해 원래 문자열을 출력하지만 FTP 디렉토리의 모니터링, 백업 및 자동화 된 관리를위한 강력한 명령 줄 도구를 구축 할 수 있습니다. 매일 운영 및 유지 보수 또는 자동화 스크립트에서 마스터 할 가치가있는 강력한 도구입니다.