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

时间:2011-11-21 22:18:57

标签: 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;

输出

Connected as $ftp_user@$ftp_server;

boolean false

为什么它不会列出文件?

我可以用

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

...但简单的部分不是我想要的,我什么都不学习

4 个答案:

答案 0 :(得分:47)

发生错误时,

ftp_nlist()会返回false。我猜你需要使用被动转移:

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

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

HTH

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:1)

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

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

以用户身份连接后

    echo "Current directory is now: " . ftp_pwd($conn_id) . "</br>";

如果您可以从命令行执行这些操作作为此用户并列出目录的内容,那么您就应该顺利完成。

答案 3 :(得分:0)

对我来说,在您的连接上方添加以下内容即可:

putenv('TMPDIR=/tmp/');