利用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());