PHP를 사용하여 FTP 프로토콜을 통해 원격 서버를 작동 할 때 FTP_Rawlist ()는 UNIX 시스템의 LS -L 명령과 유사한 출력을 반환 할 수있는 일반적인 기능입니다. 이러한 원시 출력은 완전한 파일 목록 정보를 제공하지만 형식은 일반 텍스트 문자열이므로 파일 크기 및 수정 시간과 같은 특정 정보를 추출하려면 일부 추가 처리가 필요합니다.
이 기사에서는 ftp_rawlist () 의 출력을 구문 분석하여 각 파일의 크기 및 마지막 수정 시간을 추출하는 방법을 소개하며 샘플 코드가 제공됩니다.
ftp_rawlist () 는 문자열 배열을 반환합니다. 각 요소는 다음과 같이 형식으로 파일 또는 디렉토리에 대한 정보를 나타냅니다.
-rw-r--r-- 1 user group 1048576 May 21 13:37 filename.zip
drwxr-xr-x 2 user group 512 May 20 10:15 subdir
각 줄은 파일 유형, 권한, 링크 수, 소유자, 그룹, 크기, 수정 날짜 및 시간 및 파일 이름을 포함하는 공간 구분 문자열입니다.
파일 크기 및 수정 시간을 추출하려면이 필드를 일반 표현식으로 구문 분석 할 수 있습니다.
<?php
// 연결하다 FTP
$ftp = ftp_connect("gitbox.net");
ftp_login($ftp, "username", "password");
// 디렉토리 목록을 가져옵니다
$rawList = ftp_rawlist($ftp, ".");
// 반복하고 각 줄을 구문 분석하십시오
foreach ($rawList as $line) {
if (preg_match('/^([\-ld])([rwx\-]{9})\s+\d+\s+\S+\s+\S+\s+(\d+)\s+([A-Za-z]{3})\s+(\d{1,2})\s+(\d{2}:\d{2}|\d{4})\s+(.*)$/', $line, $matches)) {
$type = $matches[1];
$size = $matches[3];
$month = $matches[4];
$day = $matches[5];
$timeOrYear = $matches[6];
$name = $matches[7];
// 수정 된 시간을 타임 스탬프로 변환하십시오
$currentYear = date("Y");
$fileTimeStr = "$month $day $timeOrYear";
if (strpos($timeOrYear, ':') !== false) {
// 그것은 하루의 시간을 의미합니다,올해는 현재 연도입니다
$fileTimeStr .= " $currentYear";
$timestamp = strtotime($fileTimeStr);
} else {
// 시간은 해입니다
$timestamp = strtotime("$month $day $timeOrYear");
}
echo "문서: $name\n";
echo "유형: " . ($type === 'd' ? '목차' : '문서') . "\n";
echo "크기: $size 바이트\n";
echo "수정 시간: " . date("Y-m-d H:i:s", $timestamp) . "\n";
echo "-----------------------------\n";
}
}
ftp_close($ftp);
?>
ftp_rawlist () 의 형식은 원격 서버의 운영 체제 유형에 따라 다르며 위 규칙은 Unix 스타일 목록 결과를 대상으로합니다. 서버가 Windows FTP를 사용하는 경우 출력 형식은 완전히 다르며 실제 상황에 따라 조정해야합니다.
구문 분석 프로세스 중에 항상 일치하지 않는 형식으로 인한 문제를 방지하기 위해 항상 정기적 인 일치 오류 처리를 수행하는 것이 좋습니다.
시간대에 걸쳐 서버의 경우 strtotime () 변환의 결과에 오류가 발생할 수 있습니다. DateTime 클래스 및 시간대 객체를 사용하여 시간을보다 정확하게 처리하는 것이 좋습니다.
위의 방법을 통해 FTP_Rawlist () 의 결과에서 파일 크기 및 수정 시간을 쉽게 추출하여 파일 동기화, 로그 분석 및 기타 시나리오에 사용할 수 있습니다.