【发布时间】:2021-07-13 21:40:40
【问题描述】:
我有一个 PHP Laravel (5.6) 系统,我需要连接到 FTP 服务器来上传单个文件。我要连接的 FTP 服务器通过 ip 地址限制访问,使用端口 990,除此之外还有一个看似简单的配置。在我的本地机器上(如果有帮助,我在 Linux Ubuntu 上运行)我能够很好地连接到 FileZilla 中的 ftp 服务器,FileZilla 似乎确实自动选择了 ftps。我也可以 ping 这个服务器。
现在这个 PHP Laravel (5.6) 应用程序正在 NGINX 上运行(已经运行了一段时间,服务器方面的其他一切似乎都很好)。到目前为止,我只是想让它在本地工作,尽管必须将它推送到生产服务器上(尽管配置几乎相同)。
我开始尝试使用内置的 PHP 函数 ftp_connect 和 ftp_ssl_connect - 两者都使用与 FileZilla 中相同的主机和端口号 (990)。我一直无法通过这一步 - 它返回 false(因此甚至无法访问我的登录逻辑)。
$ftp = ftp_connect(env('FTP_HOST'),env('FTP_PORT')); // returns FALSE
$ftp = ftp_ssl_connect(env('FTP_HOST'),env('FTP_PORT')): // returns FALSE
搜索了一段时间后,我决定尝试 Laravel 的文件系统,看看是否会更容易,这些是我在 config/filesystems.php 中的设置:
'ftp' => [
'driver' => 'ftp',
'host' => env('FTP_HOST'),
'username' => env('FTP_USER'),
'password' => env('FTP_PASSWORD'),
'port' => env('FTP_PORT'),
'ssl' => true,
'timeout' => 60,
],
'sftp' => [
'driver' => 'sftp',
'host' => env('FTP_HOST'),
'username' => env('FTP_USER'),
'password' => env('FTP_PASSWORD'),
'port' => env('FTP_PORT'),
'timeout' => 60,
],
我想我会在这里尝试 ftp 和 sftp,然后我尝试了以下方法:
Storage::disk('ftp')->put('test.csv', $file);
和
Storage::disk('sftp')->put('test.csv', $file);
第一个刚刚超时,第二个给了我消息:League\Flysystem\Sftp\ConnectionErrorException: Could not login with username: ###, host: ### in...
任何关于这可能是什么或我可以采取的后续步骤来进行故障排除的任何想法都将不胜感激,我觉得我只是不知道如何尝试更好地了解这里的问题。谢谢!
编辑: 我意识到以前我一直为此使用 FileZilla 中的快速连接功能。我进一步调查并确认加密必须是基于 TLS 的隐式 FTP - 所以我想知道是否有我遗漏的设置。
【问题讨论】:
-
SFTP 不是 FTP/FTPS。
-
我知道,我只是在尝试一切。