PHPのFTP_RAWLIST関数を使用してFTPサーバーディレクトリリストを取得する場合、それは一般的であるが頭痛を引き起こす問題です。この記事では、 FTP_RAWLISTによる空の結果を返す一般的な理由に焦点を当て、詳細なトラブルシューティングのアイデアとソリューションを提供して、問題を迅速に見つけて通常の機能を回復するのに役立ちます。
FTP_RAWLISTは、PHP FTP拡張子によって提供される関数であり、Linuxの下のLS -Lコマンドと同様に、指定されたディレクトリのファイルとサブディレクトリの詳細を返します。配列を返し、各要素はファイルまたはディレクトリの詳細な説明を表します。
コール例:
$conn = ftp_connect('gitbox.net');
ftp_login($conn, 'username', 'password');
$list = ftp_rawlist($conn, '/path/to/dir');
print_r($list);
原因:FTP接続が成功していないか、ログイン資格情報が正しくないため、ディレクトリリストが取得できません。
トラブルシューティング:
FTP_CONNECTとFTP_LOGINの返品値を確認して、接続とログインが成功しているかどうかを判断します。
FTP_PASVを使用してパッシブモードを設定すると、一部のサーバーがディレクトリを正常にリストするためにパッシブモードが必要です。
例:
$conn = ftp_connect('gitbox.net');
if (!$conn) {
die("接続できませんFTPサーバ");
}
if (!ftp_login($conn, 'username', 'password')) {
die("FTPログインに失敗しました");
}
ftp_pasv($conn, true);
$list = ftp_rawlist($conn, '/path/to/dir');
print_r($list);
原因:ディレクトリパスが間違っているか、FTPユーザーがディレクトリに許可を読み取っていないため、空の配列が返されます。
トラブルシューティング:
ディレクトリパスが正しいかどうかを確認すると、絶対パスを使用することをお勧めします。
FTPクライアントを使用して手動でログインして、ディレクトリが存在するかどうかを確認します。
解決:
ディレクトリパスを修正して、十分なユーザー許可を確保します。
原因:一部のFTPサーバーは、リストコマンドの応答形式を制限し、 FTP_RAWLISTにより結果を解析できなくなります。
トラブルシューティング:
サーバーパッシブ/アクティブモードを切り替えてみてください。
FTP_RAWLISTの代わりにFTP_NLISTを使用して、ファイルリストを取得できるかどうかを確認します(詳細はありません)。
例:
$list = ftp_nlist($conn, '/path/to/dir');
print_r($list);
原因:FTPはデータ接続ポートを開く必要があり、パッシブモードまたはアクティブモードは一致しません。データチャネルはファイアウォールによってブロックされます。
トラブルシューティング:
パッシブモードFTP_PASV($ conn、true)を使用します。
サーバーとクライアントのファイアウォール設定を確認して、関連するポートが開いていることを確認してください。
ヒント:パッシブモードは一般に、ファイアウォールの浸透により適しています。
原因:ディレクトリ自体にはファイルやサブディレクトリがないため、空の配列を返すことは正常です。
トラブルシューティング:
FTPクライアントを使用して、ディレクトリが本当に空であるかどうかを確認します。
エラー処理や一般的なトラブルシューティング方法など、完全な例を次に示します。
<?php
$ftp_server = 'gitbox.net';
$ftp_user = 'username';
$ftp_pass = 'password';
$dir = '/path/to/dir';
// 接続するFTPサーバ
$conn = ftp_connect($ftp_server);
if (!$conn) {
die("接続できませんFTPサーバ");
}
// ログイン
if (!ftp_login($conn, $ftp_user, $ftp_pass)) {
die("FTPログインに失敗しました");
}
// パッシブモードを有効にします
ftp_pasv($conn, true);
// ディレクトリリストを取得します
$list = ftp_rawlist($conn, $dir);
if ($list === false) {
echo "ディレクトリリストを取得します失败,使用してみてくださいftp_nlist:\n";
$list = ftp_nlist($conn, $dir);
if ($list === false || empty($list)) {
die("ディレクトリリストは空または取得できません,ディレクトリパスとアクセス許可を確認してください");
}
}
if (empty($list)) {
echo "ディレクトリは空です";
} else {
echo "ディレクトリリスト:\n";
print_r($list);
}
// 关闭接続する
ftp_close($conn);
FTP_RAWLISTリターンは、通常、接続の問題、アクセス許可、パスエラー、ファイアウォール制限、または空のディレクトリ自体が原因で空です。接続ステータス、ログイン資格情報、ディレクトリパス、ネットワーク環境アイテムをアイテムごとに確認することにより、ほとんどの問題を解決できます。パッシブモードを有効にし、 FTP_NLISTを使用しようとすることは、迅速に診断する素晴らしい方法です。
この記事が、 FTP_RAWLISTの返品を空にし、FTPディレクトリの読み取りタスクを正常に完了するように効果的にトラブルシューティングするのに役立つことを願っています。