利用php实现ftp功能操作。
遇到问题: ftp_nlist(): php_connect_nonb() failed: No error (0)
解决该问题:
添加设置:
ftp_set_option($conn,FTP_USEPASVADDRESS,false);
说明
bool ftp_set_option ( resource $ftp_stream , int $option , mixed $value )
本函数控制指定 FTP 流的各种运行时选项。
参数
ftp_stream
FTP 连接的标识符。
option
目前支持以下选项:
FTP_TIMEOUT_SEC更改所有网络相关功能所用的超时(以秒为单位)。value必须为大于0的整数。默认超时为90秒。
FTP_AUTOSEEK启用后,带有resumepos或startpos 参数的GET或PUT请求 将首先查找文件中的请求位置。默认情况下启用。
FTP_USEPASVADDRESS禁用后,PHP将忽略FTP服务器响应PASV命令返回的IP地址,而是使用ftp_connect()中提供的IP地址。 value必须是布尔值。
value
本参数取决于要修改哪个 option
主要方法如下:
<?php function ftp() { $host = '登录地址'; $port = '21'; $user = '用户名'; $pwd = '用户密码'; if (!function_exists('ftp_connect')) { return ['code' => -1, 'ftp未安装']; } $conn = ftp_connect($host, $port); //切换目录 //ftp_chdir($conn, "toDirName"); // 使用username和password登录 $login = ftp_login($conn, $user, $pwd); if (!$login) { return ['code' => -1, '登录失败']; } //禁用后,PHP将忽略FTP服务器响应PASV命令返回的IP地址,而是使用ftp_connect()中提供的IP地址。 value必须是布尔值。 ftp_set_option($conn, FTP_USEPASVADDRESS, false); //被动模式(PASV)的开关,打开或关闭PASV(1表示开) ftp_pasv($conn, true); // 获取远端系统类型 $sysType = ftp_systype($conn); $myDir = ftp_pwd($conn); // 列示文件 $fileList = ftp_nlist($conn, '.'); ftp_close($conn); return [ $myDir, $sysType, $fileList ]; // 下载文件,mode:传送模式。只能为 (文本模式) FTP_ASCII 或 (二进制模式) FTP_BINARY 中的其中一个 ftp_get($conn, "localFileName.txt", "remoteFileName.txt", FTP_BINARY); //切换到上级目录 ftp_cdup($conn); //新建目录 ftp_mkdir($conn, "newDirName"); //删除目录 ftp_rmdir($conn, "toDeleteDirName"); //上传文件,mode:只能为 FTP_ASCII(文本模式)或 FTP_BINARY(二进制模式) ftp_put($conn, "remoteFileName", "localFileName", FTP_ASCII); //函返回你所指定的文件的大小,使用BITES作为单位。要指出的是,如果它返回的是 “-1”的话,意味着这是一个目录 $fileSize = ftp_size($conn, "fileName"); // 关闭连接 ftp_quit($conn); } print_r(ftp());