如何获取PHP中ftp_raw执行LIST -al的文件列表并写入文件/输出控制台?
解决PHP获取FTP LIST命令文件列表的问题
问题原因
ftp_raw() 仅返回FTP控制连接的状态响应,而LIST -al的文件列表数据是通过独立的数据连接传输的,所以你只拿到了“开始传输数据”的150状态码,无法获取实际的文件列表内容。
解决方案
方法1:使用PHP封装好的列表函数(推荐)
直接用ftp_rawlist()函数,它会自动处理数据连接,返回完整的详细文件列表(和ls -al输出格式一致):
// 获取当前目录的详细文件列表 $fileList = ftp_rawlist($ftpConn, '.'); // 输出到控制台 print_r($fileList); // 写入到本地文件 if ($fileList) { file_put_contents('ftp_file_list.txt', implode("\n", $fileList)); }
如果只需要纯文件名列表,可改用ftp_nlist($ftpConn, '.')。
方法2:手动处理数据连接(适合特殊场景)
如果一定要用ftp_raw()配合LIST命令,需要手动处理数据连接的传输:
// 切换到被动模式(大部分FTP服务器要求) ftp_pasv($ftpConn, true); // 发送LIST命令触发数据传输 ftp_raw($ftpConn, 'LIST -al'); // 打开本地文件用于写入 $localHandle = fopen('ftp_list.txt', 'w'); if ($localHandle) { // 从数据连接获取列表内容并写入文件 ftp_fget($ftpConn, $localHandle, '-al', FTP_BINARY); fclose($localHandle); // 读取文件内容输出到控制台 echo file_get_contents('ftp_list.txt'); }
内容的提问来源于stack exchange,提问作者Faye D.
相关产品推荐
相关产品推荐

