PHP FTP ftp_nlist不工作​​,返回布尔值false

Mas*_*345 14 php ftp

这个代码有点问题.脚本连接,但它不会给我位于根目录中的文件夹...我错过了什么?

    $ftp_server = "ftp.something.com";
    $ftp_user = "user";
    $ftp_pass = "pass";

    // set up a connection or die
    $conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server"); 

    // try to login
    if (@ftp_login($conn_id, $ftp_user, $ftp_pass)) 
    {
        echo "Connected as $ftp_user@$ftp_server\n";
    } 
    else 
    {
        echo "Couldn't connect as $ftp_user@$ftp_server\n";
    }

    $contents = ftp_nlist($conn_id, ".");
    var_dump($contents);

    ftp_close($conn_id);  

    die;
Run Code Online (Sandbox Code Playgroud)

它输出

Connected as $ftp_user@$ftp_server;
Run Code Online (Sandbox Code Playgroud)

boolean false
Run Code Online (Sandbox Code Playgroud)

为什么它不会列出文件?

我可以非常快速地解决这个问题

  file_exists("ftp//user:pass@host.com") 
Run Code Online (Sandbox Code Playgroud)

......但是容易的部分不是我想要的东西,我什么都不会学到

Til*_*ill 52

ftp_nlist()false发生错误时返回.我猜你需要使用被动传输:

// after ftp_login(...)
ftp_pasv($conn_id, true);
Run Code Online (Sandbox Code Playgroud)

Generell,我建议使用像CLI之类的工具ftp或像Filezilla 这样的GUI客户端对此进行故障排除.日志/输出非常非常有用.

HTH

  • 设置被动模式为我解决了问题.必须记录这样的事情! (2认同)

Oma*_*mar 8

不要惊慌。它很容易解决。后ftp_login()只使用在下面给出的代码。

ftp_set_option($ftp_conn, FTP_USEPASVADDRESS, false); // set ftp option
ftp_pasv($ftp_conn, true); //make connection to passive mode
Run Code Online (Sandbox Code Playgroud)

这段代码解决了我的问题。

  • 它也对我有帮助,仅“ftp_pasv”还不够! (2认同)