php - 我无法使用 PHP 在 FTP 服务器上工作,连接正常,但我无法获取文件或其他内容。它适用于 FileZilla
问题描述
我有一个问题。我正在使用 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
解决方案
检查您从服务器上获取文件的目录是否具有正确的权限,或者文件夹本身...假设您尝试让 PHP 在其上工作的服务器是 linux 服务器,请记住您拥有文件所有者的权限或文件夹、特定用户和全局用户,因此当您更改权限时,您将使用 chmod 777...
- 要检查的另一件事是,当您使用 php 连接到服务器时,您的守护进程/客户端从那里识别出什么样的用户,这样更容易知道您拥有哪些权限。
-我还建议您检查服务器是否已配置为允许外部客户端/连接处理文件。您的服务器管理员可能对服务器进行了不同的配置,让 FileZilla 访问是您的 ftp 帐户使用不同的端口,在本例中为端口 21,但问题是您的 PHP 应用程序尝试使用哪个端口。希望这可以指导您了解可能是什么问题。
推荐阅读
- angular - 生产 Angular 7 应用程序在与 ngx-bootstrap 相关的控制台中产生运行时错误
- sql - Oracle:最大和最小日期之间的 SUM 值
- django - Django 高级 LIKE 过滤
- python-3.x - 如何在 networkx 2.2 中使用社区模块“python-louvain”?
- c# - C# MVC & React - 在 MS EDGE 上反应未完全加载(Cors 错误 SEC7120)
- git - 如何列出包含精心挑选的提交的 git 标签
- javascript - 从父组件修改子状态
- ios - 如何使用两条边设置 UIScreenEdgePanGestureRecognizer
- html - HTML SVG 作为背景,带有未缩放的右对齐内容
- gitlab - 根据条件运行 gitlab 管道