【问题标题】:PHP FTP ftp_nlist not working, returning boolean falsePHP FTP ftp_nlist 不起作用,返回布尔值 false
【发布时间】:2012-01-03 09:29:10
【问题描述】:

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

    $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") 

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

【问题讨论】:

  • 错误报告是否开启?
  • error_reporting(E_ERROR | E_WARNING | E_PARSE);
  • 更改为 error_reporting(E_ALL);还是什么都没有
  • It outputs Connected as $ftp_user 它不应该发生,因为它应该输出 $ftp_user 的实际值!
  • 相信我它输出 Connected as user@host.com

标签: php ftp


【解决方案1】:

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

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

Generell,我建议使用像 ftp 这样的 CLI 工具或像 Filezilla 这样的 GUI 客户端来解决这个问题。日志/输出非常非常有用。

HTH

【讨论】:

  • 所以有一些 log.log 应该有一个错误写入,对吗?
  • 我在文档中看不到任何内容,也没有尝试过。而且我没有任何 FTP 服务器。 :) 有用吗?
  • 设置被动模式为我解决了问题。这样的事情必须记录在案!
  • 是的,这是一个需要解决的有趣问题。如果您需要使用“被动连接”,有没有办法在服务器到服务器的基础上轻松确定。还有被动连接是什么意思?
【解决方案2】:

我还建议确认您的身份和位置,以确保您所期望的权限和实际结果是真实的(偶尔进行一点健全性检查是健康的)。

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

在你以用户身份连接之后

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

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

【讨论】:

  • 我很久以前用一个简单的 file_get_contents(URI USER PASS) 解决了这个问题,但是你的想法很好,谢谢!
【解决方案3】:

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

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

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

【讨论】:

  • 它也帮助了我,仅“ftp_pasv”还不够!
【解决方案4】:

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

putenv('TMPDIR=/tmp/');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多