Faites attention à la documentation de la ftp_pasv
fonction de PHP (c'est moi qui souligne) :
Notez également que vous ne vérifiez pas la valeur de retour d'état de l'appel ftp_pasv
調(diào)用的狀態(tài)返回值,所以您不會注意到該調(diào)用是否實際成功(這很可能不會成功)。因此,您的腳本將嘗試建立主動的 FTP 連接。這在容器中不起作用(除非使用 --network=host
, vous ne remarquerez donc pas si l'appel a réellement réussi (ce qui ne sera probablement pas le cas). Par conséquent, votre script tentera d'établir une connexion FTP active. Cela ne fonctionne pas dans les conteneurs (sauf si démarré avec --network=host
), car les conteneurs s'exécutent dans un réseau privé via NAT sur la machine h?te.
Solution?: connectez-vous d'abord, puis activez le mode passif (vérifiez également toujours les valeurs de retour d'erreur?; de nombreuses anciennes fonctions de la bibliothèque standard PHP ne génèrent pas d'exceptions, mais s'appuient sur des valeurs de retour d'erreur)?:
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); }