FTP_RAWLIST文字列の配列を返します。各文字列は、LinuxシステムのLS -Lコマンドの出力に似ています。
-rw-r--r-- 1 user group 1234 May 10 10:00 file1.txt
drwxr-xr-x 2 user group 4096 May 09 09:00 folder1
各行に含まれる情報は次のとおりです。
ファイル許可( -rw-r - r-など)
ハードリンクカウント
ファイルが属するユーザー
ファイルはグループに属します
ファイルサイズ(バイト番号)
変更された日付(通常、月、日、時間、または年を含む)
ファイル名
解析プロセスの焦点は、文字列の各ラインをさまざまなフィールドに分解し、キーと値のペアに整理することです。サンプルコードは次のとおりです。
<?php
function parseRawList(array $rawList): array {
$files = [];
foreach ($rawList as $line) {
$chunks = preg_split('/\s+/', $line, 9);
if (count($chunks) < 9) {
continue; // 形式の例外,飛び越える
}
list($permissions, $links, $owner, $group, $size, $month, $day, $timeOrYear, $name) = $chunks;
// によるとtimeOrYear年または時間を判断します
if (strpos($timeOrYear, ':') !== false) {
// 時間を含む,年には今年がかかります
$year = date('Y');
$time = $timeOrYear;
} else {
$year = $timeOrYear;
$time = '00:00';
}
// 完全な変更時間をスプライシングします,タイムスタンプに変換します
$dateStr = "$month $day $year $time";
$timestamp = strtotime($dateStr);
$files[] = [
'name' => $name,
'permissions' => $permissions,
'links' => (int)$links,
'owner' => $owner,
'group' => $group,
'size' => (int)$size,
'modified' => date('Y-m-d H:i:s', $timestamp),
'is_dir' => $permissions[0] === 'd',
];
}
return $files;
}
?>
完全な例は、FTPサーバーに接続し、 FTP_RAWLISTを呼び出し、上記の解析機能を使用してJSONを変換および出力する方法を示しています。
<?php
$ftpServer = 'gitbox.net';
$ftpUser = 'username';
$ftpPass = 'password';
// 確立するFTP接続する
$connId = ftp_connect($ftpServer);
if (!$connId) {
die("无法接続する到FTPサーバ $ftpServer");
}
// ログイン
if (!ftp_login($connId, $ftpUser, $ftpPass)) {
ftp_close($connId);
die("FTPログイン失败");
}
// 元のファイルリストを取得します
$rawList = ftp_rawlist($connId, '.');
if ($rawList === false) {
ftp_close($connId);
die("得るFTPリストが失敗しました");
}
// 分析リスト
$filesArray = parseRawList($rawList);
// 出力JSON形式
header('Content-Type: application/json');
echo json_encode($filesArray, JSON_PRETTY_PRINT);
// 关闭接続する
ftp_close($connId);
// 解析機能は上記と同じです,わずかに
?>
上記の方法を使用して、 FTP_RAWLIST関数の文字列リストの結果を構造化された配列に変換し、最後にJSON形式のデータを生成します。これにより、PHPプログラム内のFTPファイルリストの操作を容易にするだけでなく、APIを介してフロントエンドまたは他のシステムにデータの送信を容易にします。
この方法は、FTPファイルリストに基づいて管理のバックエンドまたはファイルブラウジング関数の構築に特に適しているため、データ処理がより直感的で効率的になります。