Я не могу работать на FTP-сервере с PHP, соединение работает, но я не могу получить файлы или другие вещи. Работает с FileZilla - PullRequest
0 голосов
/ 03 мая 2018

У меня есть проблема. Я использую PHP для подключения к FTP-серверу, чтобы получить список файлов, хранящихся на сервере. Я могу подключиться правильно (с помощью ftp_connect, а также войти с помощью ftp_login, я тоже использовал пассивный режим). Все работает, когда я просто соединяюсь. Когда я добавляю ftp_nlist или другое действие в мой код, это не работает. Страница просто загружается бесконечно. Я могу использовать FileZilla для подключения и работы на сервере, но я хочу автоматизировать это. Он работает с FileZilla, но не с PHP, вы можете мне помочь?

Он попытался подключиться к другому FTP-серверу и работает хорошо. Я могу получить список файлов. Но я не могу с сервером, который я хочу.

Вот мой код:

$ftpStream=ftp_connect($hostname,$port);
if($ftpStream==false) 
    echo 'No connection </br>';
else { 
    echo 'Connected </br>';
    if(ftp_login($ftpStream,$ftpUsername,$ftpPassword)!=false) { 
        echo 'Logged </br>';
            if(ftp_pasv($ftpStream,true)!=false) 
                echo 'Passive mode on </br>'; 
        $list=ftp_nlist($ftpStream,'.'); 
    } 
    else echo 'Wrong ftpUsername or ftpPassword</br>'; 
}

Я проверил права доступа к файлам, могу читать, писать и выполнять, поэтому проблема не в разрешениях файлов, я думаю.

Вот файл журнала:

2018-05-04 09:28:10 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:10 248 1 Suivi : CFtpLogonOpData::Send() in state 0
2018-05-04 09:28:10 248 1 Statut : Connexion à ... //Connecting to the FTP server
2018-05-04 09:28:10 248 1 Statut : Connexion établie, attente du message d'accueil... //Connection established, waiting for the welcome message
2018-05-04 09:28:11 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:11 248 1 Réponse : 220 Service ready for new user.
2018-05-04 09:28:11 248 1 Suivi : CFtpLogonOpData::ParseResponse() in state 1
2018-05-04 09:28:11 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:11 248 1 Suivi : CFtpLogonOpData::Send() in state 2
2018-05-04 09:28:11 248 1 Commande : AUTH TLS
2018-05-04 09:28:11 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:11 248 1 Réponse : 500 Syntax error, command unrecognized.
2018-05-04 09:28:11 248 1 Suivi : CFtpLogonOpData::ParseResponse() in state 2
2018-05-04 09:28:11 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:11 248 1 Suivi : CFtpLogonOpData::Send() in state 3
2018-05-04 09:28:11 248 1 Commande : AUTH SSL
2018-05-04 09:28:11 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:11 248 1 Réponse : 500 Syntax error, command unrecognized.
2018-05-04 09:28:11 248 1 Suivi : CFtpLogonOpData::ParseResponse() in state 3
2018-05-04 09:28:11 248 1 Statut : Serveur non sécurisé, celui-ci ne supporte pas FTP sur TLS.// No TLS
2018-05-04 09:28:11 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:11 248 1 Suivi : CFtpLogonOpData::Send() in state 5
2018-05-04 09:28:11 248 1 Commande : USER user
2018-05-04 09:28:12 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:12 248 1 Réponse : 331 User name okay, need password.
2018-05-04 09:28:12 248 1 Suivi : CFtpLogonOpData::ParseResponse() in state 5
2018-05-04 09:28:12 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:12 248 1 Suivi : CFtpLogonOpData::Send() in state 5
2018-05-04 09:28:12 248 1 Commande : PASS ****
2018-05-04 09:28:12 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:12 248 1 Réponse : 230 User logged in, proceed.
2018-05-04 09:28:12 248 1 Suivi : CFtpLogonOpData::ParseResponse() in state 5
2018-05-04 09:28:12 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:12 248 1 Suivi : CFtpLogonOpData::Send() in state 6
2018-05-04 09:28:12 248 1 Commande : SYST
2018-05-04 09:28:12 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:12 248 1 Réponse : 215 Windows_CE version 6.0.
2018-05-04 09:28:12 248 1 Suivi : CFtpLogonOpData::ParseResponse() in state 6
2018-05-04 09:28:12 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:12 248 1 Suivi : CFtpLogonOpData::Send() in state 7
2018-05-04 09:28:12 248 1 Commande : FEAT
2018-05-04 09:28:13 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:13 248 1 Réponse : 211- Features supported
2018-05-04 09:28:13 248 1 Réponse : REST SIZE STREAM
2018-05-04 09:28:13 248 1 Réponse : 211 End
2018-05-04 09:28:13 248 1 Suivi : CFtpLogonOpData::ParseResponse() in state 7
2018-05-04 09:28:13 248 1 Statut : Le serveur ne supporte pas les caractères non-ASCII. //Doesn't support non ASCII characters
2018-05-04 09:28:13 248 1 Statut : Connecté // Connected
2018-05-04 09:28:13 248 1 Suivi : Measured latency of 296 ms
2018-05-04 09:28:13 248 1 Suivi : CFtpControlSocket::ResetOperation(0)
2018-05-04 09:28:13 248 1 Suivi : CControlSocket::ResetOperation(0)
2018-05-04 09:28:13 248 1 Statut : Récupération du contenu du dossier... //Getting directory content
2018-05-04 09:28:13 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:13 248 1 Suivi : CFtpListOpData::ListSend() in state 0
2018-05-04 09:28:13 248 1 Suivi : CFtpChangeDirOpData::Send() in state 0
2018-05-04 09:28:13 248 1 Suivi : CFtpChangeDirOpData::Send() in state 1
2018-05-04 09:28:13 248 1 Commande : PWD
2018-05-04 09:28:13 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:13 248 1 Réponse : 257 "/".
2018-05-04 09:28:13 248 1 Suivi : CFtpChangeDirOpData::ParseResponse() in state 1
2018-05-04 09:28:13 248 1 Suivi : CFtpControlSocket::ResetOperation(0)
2018-05-04 09:28:13 248 1 Suivi : CControlSocket::ResetOperation(0)
2018-05-04 09:28:13 248 1 Suivi : CControlSocket::ParseSubcommandResult(0)
2018-05-04 09:28:13 248 1 Suivi : CFtpListOpData::SubcommandResult() in state 1
2018-05-04 09:28:13 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:13 248 1 Suivi : CFtpListOpData::ListSend() in state 2
2018-05-04 09:28:13 248 1 Suivi : CFtpRawTransferOpData::Send() in state 1
2018-05-04 09:28:13 248 1 Commande : TYPE I
2018-05-04 09:28:13 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:13 248 1 Réponse : 200 Command okay.
2018-05-04 09:28:13 248 1 Suivi : CFtpRawTransferOpData::ParseResponse() in state 1
2018-05-04 09:28:13 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:13 248 1 Suivi : CFtpRawTransferOpData::Send() in state 2
2018-05-04 09:28:13 248 1 Commande : PASV
2018-05-04 09:28:13 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:13 248 1 Réponse : 227 Entering Passive Mode (x,x,x,x,200,64).
2018-05-04 09:28:13 248 1 Suivi : CFtpRawTransferOpData::ParseResponse() in state 2
2018-05-04 09:28:13 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:13 248 1 Suivi : CFtpRawTransferOpData::Send() in state 4
2018-05-04 09:28:13 248 1 Suivi : Binding data connection source IP to control connection source IP (myIP)
2018-05-04 09:28:13 248 1 Commande : LIST
2018-05-04 09:28:14 248 1 Suivi : CTransferSocket::OnConnect
2018-05-04 09:28:14 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:14 248 1 Réponse : 125 Data connection already open; transfer starting.
2018-05-04 09:28:14 248 1 Suivi : CFtpRawTransferOpData::ParseResponse() in state 4
2018-05-04 09:28:14 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:14 248 1 Suivi : CFtpRawTransferOpData::Send() in state 5
2018-05-04 09:28:14 248 1 Suivi : CFtpControlSocket::OnReceive()
2018-05-04 09:28:14 248 1 Réponse : 226 Closing data connection. 
2018-05-04 09:28:14 248 1 Suivi : CFtpRawTransferOpData::ParseResponse() in state 5
2018-05-04 09:28:14 248 1 Suivi : CControlSocket::SendNextCommand()
2018-05-04 09:28:14 248 1 Suivi : CFtpRawTransferOpData::Send() in state 8
2018-05-04 09:28:14 248 1 Suivi : CTransferSocket::OnClose(0)
2018-05-04 09:28:14 248 1 Suivi : CTransferSocket::TransferEnd(1)
2018-05-04 09:28:14 248 1 Suivi : CFtpControlSocket::TransferEnd()
2018-05-04 09:28:14 248 1 Suivi : CFtpControlSocket::ResetOperation(0)
2018-05-04 09:28:14 248 1 Suivi : CControlSocket::ResetOperation(0)
2018-05-04 09:28:14 248 1 Suivi : CControlSocket::ParseSubcommandResult(0)
2018-05-04 09:28:14 248 1 Suivi : CFtpListOpData::SubcommandResult() in state 3
2018-05-04 09:28:14 248 1 Suivi : CFtpControlSocket::ResetOperation(0)
2018-05-04 09:28:14 248 1 Suivi : CControlSocket::ResetOperation(0)
2018-05-04 09:28:14 248 1 Statut : Contenu du dossier "/" affiché avec succès // "/" directory successfully displayed

Я продолжил поиски и нашел что-то странное. Соединение с данными мгновенно закрывается в FileZilla, но он все еще может получить список файлов, возможно, мне стоит поработать с ним с помощью PHP:

Commande :  PASV
Réponse :   227 Entering Passive Mode (x,x,x,x,19,201)
Commande :  LIST
Réponse :   150 File status okay; about to open data connection.
Réponse :   226 Closing data connection. 
Statut :    Contenu du dossier affiché avec succès // The directory's content is well displayed

А вот как это работает с другим сервером

Commande :  PASV
Réponse :   227 Entering Passive Mode (x,x,x,x,15,73)
Commande :  LIST
Réponse :   150 File status okay; about to open data connection.
Réponse :   226 Transfer complete
Statut :    Contenu du dossier affiché avec succès //Sucessfully displayed

1 Ответ

0 голосов
/ 03 мая 2018

Убедитесь, что каталог, из которого вы получаете файлы на сервере, имеет правильные разрешения или саму папку ... Предполагая, что сервер, на котором вы пытаетесь заставить работать PHP, является сервером linux, помните, что у вас есть разрешения для владельца файла или папки, конкретных пользователей и глобальных пользователей, следовательно, при изменении разрешений вы будете использовать chmod 777 ...

-Другая вещь, которую нужно проверить, это то, что когда вы используете connect to server с помощью php, какого типа пользователь идентифицирует ваш демон / клиент, так как оттуда будет проще узнать, какие у вас есть разрешения.

-Также я бы посоветовал вам проверить, настроен ли сервер для работы с файлами для внешних клиентов / соединений. Администратор сервера мог настроить сервер по-разному, имея доступ к FileZilla, если ваша учетная запись ftp использует другой порт, в данном случае это порт 21, но вопрос в том, какой порт пытается использовать ваше PHP-приложение. Надеюсь, что это поможет вам понять, в чем может быть проблема.

...