简体   繁体   English

我可以用PHP连接到FTP服务器,但是即使在被动模式下也不能ftp_nlist

[英]I can connect to an FTP server with PHP but can't ftp_nlist even with passive mode

I have a problem. 我有个问题。 I can connect to a FTP server, but I can't use ftp_nlist . 我可以连接到FTP服务器,但是不能使用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. 当我仅尝试连接到该服务器时,一切正常,但是当我尝试ftp_nlist ,则没有任何效果。 When I try this code on another FTP server, the list of files is correctly displayed. 当我在另一个FTP服务器上尝试此代码时,文件列表将正确显示。 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: 我尝试从Web服务器上的命令行连接到FTP,结果如下:

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: 从本地计算机连接时,这是FileZilla日志文件:

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() ? 服务器是否可以禁止ftp_nlist()?

Sorry for my bad English, and thanks in advance for your future answers. 对不起,我的英语不好,谢谢您今后的回答。

It looks like your web hosting provider blocks outgoing data connections to the FTP server. 您的网络托管服务提供商似乎阻止了与FTP服务器的传出数据连接。

You can try using an active mode (remove the ftp_pasv call). 您可以尝试使用活动模式(删除ftp_pasv调用)。 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. 有关某些背景知识,请参阅我的文章,其中介绍了被动和主动FTP模式所需的网络设置 -尽管您自己无能为力。 You need to contact your provider. 您需要联系您的提供商。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM