Lösung für PHP-FTP-Verbindungsprobleme in einer Containerumgebung
P粉302484366
P粉302484366 2023-08-28 23:03:17
0
1
501

Ich versuche, mein PHP-Skript zu containerisieren.

Aber aus irgendeinem Grund kann keine Verbindung zu meinem FTP-Server hergestellt werden, wenn es in einem Container ausgeführt wird.

Führen Sie das Skript problemlos auf meinem lokalen Computer aus.

Dockerfile:

FROM php:8.1-cli EXPOSE 8080 KOPIEREN ./var/www/html/ ARBEITSVERZEICHNIS /var/www/html ENTRYPOINT php -f dienen.php

PHP-Skript:

$ Verbindung = ftp_connect(FTP_HOST, 21, 90); ftp_pasv($connection, true); if(ftp_login($connection, FTP_USERNAME, FTP_PASSWORD)) { $stream = fopen('data://text/plain,','r'); ftp_fput($connection, $filename, $stream); } ftp_close($connection);

Nach 90 Sekunden wird die folgende Warnung ausgegeben:

ftp_fput(): Connection timed out in /var/ www/html/ftp.php in Zeile 16

Ich habe versucht, in den Container zu gehen und den FTP-Client zu installieren.

Bei mir tritt ein ähnlicher Zeitüberschreitungsfehler auf: Ich kann eine Verbindung zum Host herstellen, aber die Ausführung eines beliebigen Befehls führt zu einer Pause.

Ich habe auch versucht, den Container auf einem VPS auszuführen, um lokale Firewall-/Netzwerkprobleme zu beseitigen.

Aber das Problem besteht immer noch.

Wenn Sie weitere Informationen zur Lösung des Problems benötigen, lassen Sie es mich bitte wissen.

P粉302484366
P粉302484366

Antworte allen (1)
P粉775723722

注意 PHP 的ftp_pasv函数的文档(重点在我这里):

还要注意您没有检查ftp_pasv调用的状态返回值,所以您不会注意到该调用是否实际成功(这很可能不会成功)。因此,您的脚本将尝试建立主动的 FTP 连接。这在容器中不起作用(除非使用--network=host启动),因为容器在主机机器上通过 NAT 运行在私有网络中。

解决方案:首先登录,然后启用被动模式(还要始终检查错误返回值;许多来自 PHP 标准库的旧函数不会引发异常,而是依赖于错误返回值):

if (ftp_login($connection, FTP_USERNAME, FTP_PASSWORD)) { if (ftp_pasv($connection, true) === false) { throw new \Exception("无法启用被动模式") } $stream = fopen('data://text/plain,','r'); ftp_fput($connection, $filename, $stream); }
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!