duanhan3067 2018-05-22 12:22
浏览 127

我可以使用PHP连接到FTP服务器,但即使使用被动模式也无法连接到ftp_nlist

I have a problem. I can connect to a FTP server, but I can't use ftp_nlist. The page is white and loading endlessly.

Here's my code :

$ftpStream = ftp_connect($host,$port);

if($ftpStream!=false)
{
    echo 'FTP Connected </br>';
    echo 'Hostname = ' . $host . '</br>';
    $login=ftp_login($ftpStream,$username,$password);
    if($login!=false)
    {
        echo 'Logged in </br>';
        $pasvMode = ftp_pasv($ftpStream, true);
        if($pasvMode!=false)
        {
            echo 'Entered passive mode </br>';
            // These lines aren't working:
            $listOfFiles = ftp_nlist($ftpStream,'.');
            var_dump($listOfFiles);
        }

        else
            echo 'ftp_pasv() fail </br>';
    }
    else
        echo 'Login failure </br>';
}
else
    echo 'ftp_connect fail </br>';

When I'm only trying to connect to this server, everything works well, but when I'm trying to ftp_nlist, nothing works. When I try this code on another FTP server, the list of files is correctly displayed. I don't really know from where the problem could come.

I tried to connect to FTP from command-line on the web server and here are the results:

ftp> ls
Command okay.
150 File status okay; about to open data connection

Here's the FileZilla log file, when connecting from my local machine:

2018-05-22 15:45:03 5180 1 Réponse : 230 User logged in, proceed.
2018-05-22 15:45:03 5180 1 Suivi : CFtpControlSocket::SendNextCommand()
2018-05-22 15:45:03 5180 1 Commande : USER Username@IPADRESS:PORT
2018-05-22 15:45:04 5180 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-22 15:45:04 5180 1 Réponse : 331 User name okay, need password.
2018-05-22 15:45:04 5180 1 Suivi : CFtpControlSocket::SendNextCommand()
2018-05-22 15:45:04 5180 1 Commande : PASS ****
2018-05-22 15:45:08 5180 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-22 15:45:08 5180 1 Réponse : 230 User logged in, proceed.
2018-05-22 15:45:08 5180 1 Suivi : CFtpControlSocket::SendNextCommand()
2018-05-22 15:45:08 5180 1 Commande : SYST
2018-05-22 15:45:09 5180 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-22 15:45:09 5180 1 Réponse : 215 Windows_CE version 6.0.
2018-05-22 15:45:09 5180 1 Suivi : CFtpControlSocket::SendNextCommand()
2018-05-22 15:45:09 5180 1 Commande : FEAT
2018-05-22 15:45:10 5180 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-22 15:45:10 5180 1 Réponse : 211-Features:
2018-05-22 15:45:10 5180 1 Réponse :   SIZE
2018-05-22 15:45:10 5180 1 Réponse : 211 End
2018-05-22 15:45:10 5180 1 Statut : Le serveur ne supporte pas les 
caractères non-ASCII.
2018-05-22 15:45:10 5180 1 Statut : Connecté 
2018-05-22 15:45:10 5180 1 Suivi : CFtpControlSocket::ResetOperation(0)
2018-05-22 15:45:10 5180 1 Suivi : CControlSocket::ResetOperation(0)
2018-05-22 15:45:10 5180 1 Suivi : Measured latency of 1145 ms
2018-05-22 15:45:10 5180 1 Statut : Récupération du contenu du dossier...
2018-05-22 15:45:10 5180 1 Suivi : CFtpControlSocket::SendNextCommand()
2018-05-22 15:45:10 5180 1 Suivi : CFtpControlSocket::ChangeDirSend()
2018-05-22 15:45:10 5180 1 Commande : PWD
2018-05-22 15:45:10 5180 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-22 15:45:10 5180 1 Réponse : 257 "/"
2018-05-22 15:45:10 5180 1 Suivi : CFtpControlSocket::ResetOperation(0)
2018-05-22 15:45:10 5180 1 Suivi : CControlSocket::ResetOperation(0)
2018-05-22 15:45:10 5180 1 Suivi : 
CFtpControlSocket::ParseSubcommandResult(0)
2018-05-22 15:45:10 5180 1 Suivi : CFtpControlSocket::ListSubcommandResult()
2018-05-22 15:45:10 5180 1 Suivi : CFtpControlSocket::SendNextCommand()
2018-05-22 15:45:10 5180 1 Suivi : CFtpControlSocket::TransferSend()
2018-05-22 15:45:10 5180 1 Commande : TYPE I
2018-05-22 15:45:11 5180 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-22 15:45:11 5180 1 Réponse : 200 Command okay.
2018-05-22 15:45:11 5180 1 Suivi : 
CFtpControlSocket::TransferParseResponse()
2018-05-22 15:45:11 5180 1 Suivi : CFtpControlSocket::SendNextCommand()
2018-05-22 15:45:11 5180 1 Suivi : CFtpControlSocket::TransferSend()
2018-05-22 15:45:11 5180 1 Commande : PASV
2018-05-22 15:45:12 5180 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-22 15:45:12 5180 1 Réponse : 227 Entering Passive Mode 
(10,64,3,53,12,188)
2018-05-22 15:45:12 5180 1 Suivi : 
CFtpControlSocket::TransferParseResponse()
2018-05-22 15:45:12 5180 1 Suivi : CFtpControlSocket::SendNextCommand()
2018-05-22 15:45:12 5180 1 Suivi : CFtpControlSocket::TransferSend()
2018-05-22 15:45:12 5180 1 Commande : LIST
2018-05-22 15:45:12 5180 1 Suivi : CTransferSocket::OnConnect
2018-05-22 15:45:13 5180 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-22 15:45:13 5180 1 Réponse : 150 File status okay; about to open 
data connection.
2018-05-22 15:45:13 5180 1 Suivi : 
CFtpControlSocket::TransferParseResponse()
2018-05-22 15:45:13 5180 1 Suivi : CFtpControlSocket::SendNextCommand()
2018-05-22 15:45:13 5180 1 Suivi : CFtpControlSocket::TransferSend()
2018-05-22 15:45:15 5180 1 Suivi : CTransferSocket::TransferEnd(1)
2018-05-22 15:45:15 5180 1 Suivi : CFtpControlSocket::TransferEnd()
2018-05-22 15:45:15 5180 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-22 15:45:15 5180 1 Réponse : 226 Closing data connection. 
2018-05-22 15:45:15 5180 1 Suivi : 
CFtpControlSocket::TransferParseResponse()
2018-05-22 15:45:15 5180 1 Suivi : CFtpControlSocket::ResetOperation(0)
2018-05-22 15:45:15 5180 1 Suivi : CControlSocket::ResetOperation(0)
2018-05-22 15:45:15 5180 1 Suivi : 
CFtpControlSocket::ParseSubcommandResult(0)
2018-05-22 15:45:15 5180 1 Suivi : CFtpControlSocket::ListSubcommandResult()
2018-05-22 15:45:15 5180 1 Suivi : CFtpControlSocket::ResetOperation(0)
2018-05-22 15:45:15 5180 1 Suivi : CControlSocket::ResetOperation(0)
2018-05-22 15:45:15 5180 1 Statut : Contenu du dossier affiché avec succès

Is it possible for a server to forbid ftp_nlist() ?

Sorry for my bad English, and thanks in advance for your future answers.

  • 写回答

1条回答 默认 最新

  • doumi1944 2018-05-22 13:48
    关注

    It looks like your web hosting provider blocks outgoing data connections to the FTP server.

    You can try using an active mode (remove the ftp_pasv call). But it's quite unlikely that they would allow incoming connections (needed for the active mode), if they forbid outgoing connections.

    For some background, see my article about network setup needed for passive and active FTP modes - Though nothing you can do about it yourself. You need to contact your provider.

    评论

报告相同问题?

悬赏问题

  • ¥15 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!