国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Solution au problème de connexion PHP FTP dans un environnement conteneurisé
P粉302484366
P粉302484366 2023-08-28 23:03:17
0
1
898
<p>J'essaie de conteneuriser mon script PHP. </p><p>Mais pour une raison quelconque, il ne peut pas se connecter à mon serveur FTP lorsqu'il est exécuté dans un conteneur. </p><p>Exécutez le script sur ma machine locale sans aucun problème. </p><p><strong>Dockerfile?:</strong></p><pre class="brush:php;toolbar:false;">FROM php:8.1-cli EXPOSER 8080 COPIER ./var/www/html/ RéP TRAVAIL /var/www/html ENTRYPOINT php -f serve.php</pre><p><strong>Script PHP?:</strong></p><pre class="brush:php;toolbar:false;">$ connexion = ftp_connect(FTP_HOST, 21, 90); ftp_pasv($connexion, vrai); si (ftp_login ($ connexion, FTP_USERNAME, FTP_PASSWORD)) { $stream = fopen('data://text/plain,','r'); ftp_fput ($ connexion, $ nom de fichier, $ flux); } ftp_close ($connection);</pre><p>Après 90 secondes, l'avertissement suivant s'affichera?: </p><p><em>ftp_fput()?: connexion expirée dans /var/ www/html/ftp.php sur la ligne 16</em></p><p>J'ai essayé d'accéder au conteneur et d'installer le client FTP. </p><p>Cela me donne une erreur de délai d'attente similaire?: je peux me connecter à l'h?te, mais l'exécution d'une commande provoque une pause. </p><p>J'ai également essayé d'exécuter le conteneur sur un VPS pour éliminer tout problème de pare-feu/réseau local. </p><p>Mais le problème existe toujours. </p><p>Si vous avez besoin de plus amples informations pour résoudre le problème, veuillez me le faire savoir. </p>
P粉302484366
P粉302484366

répondre à tous(1)
P粉775723722

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);
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal