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


PHP FTP ftp_nlist not working, returning boolean false

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

    $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;

输出

Connected as $ftp_user@$ftp_server;

boolean false

为什么不列出文件?

我可以用

很快解决这个问题
  file_exists("ftp//user:pass@host.com") 

…但是简单的部分不是我想要的,我不会学到任何东西

发生错误时,ftp_nlist()返回false。我猜你需要使用被动转换:

// after ftp_login(...)
ftp_pasv($conn_id, true);

一般来说,我建议通过使用CLI工具(如ftp)或gui客户端(如Filezilla)来解决这个问题。日志/输出非常非常有用。

HTH

别慌。这很容易解决。在ftp_login()之后,只需使用下面给出的代码。

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

我还建议确认一下你是谁,在哪里,以确保权限和你期望的实际结果是真实的(偶尔检查一下是健康的)。

    echo shell_exec('whoami')." is who i am </br>";

,当你以用户身份连接时,

    echo "Current directory is now: " . ftp_pwd($conn_id) . "</br>";
如果你可以在命令行中使用这个用户来做这些事情,并列出目录的内容,那么你应该很顺利。

对我来说,在你的连接上面添加以下内容:

putenv('TMPDIR=/tmp/');