2011-11-21 82 views
8

我有这个代码的小问题。该脚本连接,但它不会给我位于根目录中的文件夹...我错过了什么?PHP的FTP ftp_nlist不工作​​,返回布尔值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 [email protected]$ftp_server\n"; 
    } 
    else 
    { 
     echo "Couldn't connect as [email protected]$ftp_server\n"; 
    } 

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

    ftp_close($conn_id); 

    die; 

它输出

Connected as [email protected]$ftp_server; 

boolean false 

为什么它不会列出文件?

我可以

file_exists("ftp//user:[email protected]") 

非常快的解决这个问题......但最简单的部分是不是有什么即时寻找,当错误发生时,我不会学到任何东西

+0

是否打开了错误报告? –

+0

error_reporting(E_ERROR | E_WARNING | E_PARSE); – Master345

+0

更改为error_reporting(E_ALL);并且什么也没有 – Master345

回答

35

ftp_nlist()回报false。我猜你需要使用被动传输:

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

Generell,我建议使用一个CLI工具像ftp或图形用户界面的客户端像Filezilla的解决此。日志/输出非常非常有用。

HTH

+0

所以有一些log.log应该有一个错误writeware,是吗? – Master345

+0

我没有看到文档中的任何内容,我没有尝试过。我没有任何FTP服务器。 :)它工作? – Till

+0

设置被动模式解决了我的问题。像这样的事情必须记录! – MilanG

0

我也只是建议,确认谁,你在哪里,以确保权限和你所期望的实际结果是真实的(有点完整性检查过一段时间是健康的)。

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

,并在连接之后为用户则

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

如果你可以从命令行做这些事情的目录此用户列表的内容,那么你应该对你的方式很好。

+0

我很早以前用一个简单的file_get_contents(URI USER PASS)解决了这个问题,但是你的想法很好,谢谢! – Master345