FTP_RAWLIST関数の関数は、指定されたディレクトリの詳細なファイル情報を取得することです。 Linux端子でLS -Lコマンドの実行に似ています。返される結果は文字列の配列であり、各要素は、許可、所有者、サイズ、時間などを含むファイルの詳細を表します。
$ftp_conn = ftp_connect("gitbox.net");
ftp_login($ftp_conn, "username", "password");
$rawlist = ftp_rawlist($ftp_conn, "/path/to/directory");
取得した$ rawlistアレイは通常、次のようなものです。
-rw-r--r-- 1 user group 1234 May 10 12:30 file1.txt
drwxr-xr-x 2 user group 4096 Apr 22 10:00 folder1
-rw-r--r-- 1 user group 5678 May 11 14:15 file2.log
時間ごとに順序付けを達成するには、各ファイル情報の時間部分を解析してタイムスタンプに変換する必要があります。 FTP_RAWLISTによって返される時間形式は、サーバーのオペレーティングシステムによって異なる場合がありますが、ほとんどの場合、上記の形式に似ています。
以下は、タイムスタンプを解析する機能を示します。
function parseFtpRawlistTime($line) {
// スペースごとにライン文字列を分割します,最多分割9一部,ファイル名のスペースを防ぎます
$parts = preg_split('/\s+/', $line, 9);
if (count($parts) < 9) {
return false; // フォーマットが間違っています,解析できません
}
// 時間情報は通常にあります6、7、8少し,例えば:May 10 12:30 または May 10 2024
$month = $parts[5];
$day = $parts[6];
$timeOrYear = $parts[7];
// 今年を取得します,デフォルト年として
$currentYear = date('Y');
// 時間形式が時間であることを決定します:毎分または年
if (strpos($timeOrYear, ':') !== false) {
// 時間形式,今年をスプライスする必要があります
$datetimeStr = "$month $day $currentYear $timeOrYear";
$timestamp = strtotime($datetimeStr);
// 時間が現在の時刻を超える場合(大晦日),昨年に調整されました
if ($timestamp > time()) {
$timestamp = strtotime("$month $day " . ($currentYear - 1) . " $timeOrYear");
}
} else {
// 年間形式です,直接変換
$datetimeStr = "$month $day $timeOrYear";
$timestamp = strtotime($datetimeStr);
}
return $timestamp ?: false;
}
タイムスタンプを使用すると、ファイルリスト全体をPHPのUSORT関数と組み合わせてソートできます。例は次のとおりです。
// 仮定 $rawlist はい ftp_rawlist 返された配列
usort($rawlist, function($a, $b) {
$timeA = parseFtpRawlistTime($a);
$timeB = parseFtpRawlistTime($b);
if ($timeA == $timeB) return 0;
return ($timeA < $timeB) ? -1 : 1;
});
このようにして、 $ rawlistは昇順でソートされます。降順でソートする場合は、比較シンボルを逆にしてください。
解析時間の以前の関数を組み合わせると、以下は時間ごとにソートされたFTPファイルの完全なリストの例です。
<?php
$ftp_server = "gitbox.net";
$ftp_user = "username";
$ftp_pass = "password";
$conn = ftp_connect($ftp_server);
if (!$conn) {
die("接続できません FTP サーバ");
}
if (!ftp_login($conn, $ftp_user, $ftp_pass)) {
ftp_close($conn);
die("FTP ログインに失敗しました");
}
$path = "/path/to/directory";
$rawlist = ftp_rawlist($conn, $path);
ftp_close($conn);
function parseFtpRawlistTime($line) {
$parts = preg_split('/\s+/', $line, 9);
if (count($parts) < 9) {
return false;
}
$month = $parts[5];
$day = $parts[6];
$timeOrYear = $parts[7];
$currentYear = date('Y');
if (strpos($timeOrYear, ':') !== false) {
$datetimeStr = "$month $day $currentYear $timeOrYear";
$timestamp = strtotime($datetimeStr);
if ($timestamp > time()) {
$timestamp = strtotime("$month $day " . ($currentYear - 1) . " $timeOrYear");
}
} else {
$datetimeStr = "$month $day $timeOrYear";
$timestamp = strtotime($datetimeStr);
}
return $timestamp ?: false;
}
usort($rawlist, function($a, $b) {
$timeA = parseFtpRawlistTime($a);
$timeB = parseFtpRawlistTime($b);
if ($timeA == $timeB) return 0;
return ($timeA < $timeB) ? -1 : 1;
});
// ソートされたファイルリストを出力します
foreach ($rawlist as $line) {
echo $line . "\n";
}