php实现ftp功能和问题解决

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


评论/留言