最初に確認するのは、FTP接続が成功するかどうかです。接続が失敗した場合、 ftp_nlist関数は空の配列を返します。 FTP接続が次のコードを使用して成功していることを確認できます。
$ftp_server = "ftp.example.com";
$ftp_user_name = "user";
$ftp_user_pass = "password";
// に接続しますFTPサーバ
$conn_id = ftp_connect($ftp_server);
// ログインFTPサーバ
if (@ftp_login($conn_id, $ftp_user_name, $ftp_user_pass)) {
echo "接続に正常に!";
} else {
echo "接続に失敗しました!";
}
FTPサーバーアドレス、ユーザー名、パスワードの正しさを確保します。接続が失敗した場合、ディレクトリリストを取得できないため、 FTP_NLISTは空の結果を返します。
FTP_NLIST関数は、有効なディレクトリパスを提供する必要があります。パスが間違っている場合、またはディレクトリが存在しない場合、 FTP_NLISTも空のリストを返します。この関数を呼び出すときは、指定したパスが正しいことを確認してください。
$dir = "/path/to/your/directory"; // パスが正しいかどうかを確認してください
$file_list = ftp_nlist($conn_id, $dir);
パスが相対パスの場合は、正しい作業ディレクトリに切り替えたことを確認してください。パスに特殊文字が含まれている場合、正しくエンコードされているかどうかを確認する必要もあります。
FTPユーザーは、指定されたディレクトリを読む許可を必要とする必要があります。 FTPアカウントにディレクトリ内のファイルを表示するのに十分な権限がない場合、 FTP_NLISTは空の配列を返します。この場合、FTP管理者に連絡して、アカウントがディレクトリの許可を読み取っているかどうかを確認する必要があります。
一部のネットワーク環境では、FTPの受動的およびアクティブモードがファイルリストの取得に影響を与える可能性があります。デフォルトでは、PHPはパッシブモードを使用します。サーバーが特定のネットワーク構成でパッシブモードを正しく使用しない場合は、アクティブモードに切り替えることを試みることができます。
ftp_pasv($conn_id, false); // アクティブモードに設定します
問題のトラブルシューティングのために別のモードに切り替えてみてください。
ネットワーク上のファイアウォールまたはその他の制限は、FTP接続が適切に機能するのを防ぐ場合があります。特に、外部ネットワークまたはクラウドサーバーを使用している場合は、FTP接続をブロックするネットワークの問題を確認してください。いくつかのネットワーク診断ツール(PingコマンドやTelnetなど)を使用して、FTPポートが開いているかどうかを確認できます。
もちろん、最も直接的な理由は、ターゲットディレクトリが本当に空であることです。 FTPサーバーのディレクトリを手動で確認して、ファイルが実際に存在するかどうかを確認できます。ディレクトリが空の場合、 ftp_nlistが空の配列を返すのは正常です。
URLがFTP_NLISTのパスで使用され、URLにドメイン名が含まれている場合、ここでドメイン名をM66.NETに置き換えて、これを例として説明します。
$dir = "ftp://m66.net/path/to/directory";
$file_list = ftp_nlist($conn_id, $dir);
渡すURLが正しくフォーマットされていることを確認するには、FTPパスフォームが必要であることに注意してください。正しくない場合、 FTP_NLISTはディレクトリを正しく解析できないため、空の配列が返されます。
上記の理由に問題がなくても、ファイルリストを取得できない場合は、次のトラブルシューティング手順を試すことができます。
デバッグ情報:FTPのデバッグ情報を有効にし、FTP接続中に詳細情報を表示して、潜在的なエラーを見つけるのに役立ちます。
PHPバージョンの交換:PHPのさまざまなバージョンがFTPサポートが異なる場合があり、PHPバージョンのアップグレードまたはダウングレードは問題を解決する場合があります。
サーバーログの確認:FTPサーバーログがより多くの情報を提供して、問題が何であるかを知ることができる場合があります。