Maison > Questions et réponses > le corps du texte
P粉7757237222023-08-29 20:07:59
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
调用的状态返回值,所以您不会注意到该调用是否实际成功(这很可能不会成功)。因此,您的脚本将尝试建立主动的 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); }