Lorsque nous utilisons PHP pour les opérations FTP, nous rencontrons souvent des délais de connexion ou des données ne peuvent pas être transférées. Surtout dans certains environnements de réseau de feu de feu ou de NAT, le mode actif peut entraîner l'échec des connexions de données FTP. À l'heure actuelle, le mode passif est la clé pour résoudre le problème. Cet article vous mènera étape par étape pour comprendre comment utiliser FTP_Connect et FTP_PASV pour obtenir des connexions FTP stables et une transmission de données.
En mode actif, le client initie le port de contrôle connecté au serveur (par défaut 21) et le serveur se connecte ensuite à un port aléatoire du client pour transmettre des données. Cela peut être intercepté dans certains environnements de réseau.
En mode passif, le client initie non seulement des connexions de contrôle, mais initie également activement les connexions de données, ce qui est plus facile à passer par le pare-feu et le NAT.
Par conséquent, activer explicitement le mode passif dans les scripts PHP est une étape importante pour améliorer le taux de réussite de compatibilité et de transmission.
FTP_Connect est une fonction intégrée pour se connecter à un serveur FTP. La syntaxe est la suivante:
<span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$hostname</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">21</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$timeout</span></span><span> = </span><span><span class="hljs-number">90</span></span><span>): FTP\Connection|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
Exemple de code:
<span><span><span class="hljs-variable">$ftp_host</span></span><span> = </span><span><span class="hljs-string">'ftp.example.com'</span></span><span>;
</span><span><span class="hljs-variable">$ftp_port</span></span><span> = </span><span><span class="hljs-number">21</span></span><span>;
</span><span><span class="hljs-variable">$conn</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-variable">$ftp_host</span></span><span>, </span><span><span class="hljs-variable">$ftp_port</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$conn</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Impossible de se connecter à FTP serveur:<span class="hljs-subst">$ftp_host</span></span></span><span>");
}
</span></span>
Une fois la connexion établie, nous devons utiliser ftp_login pour vous connecter:
<span><span><span class="hljs-variable">$ftp_user</span></span><span> = </span><span><span class="hljs-string">'username'</span></span><span>;
</span><span><span class="hljs-variable">$ftp_pass</span></span><span> = </span><span><span class="hljs-string">'password'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">ftp_login</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>, </span><span><span class="hljs-variable">$ftp_user</span></span><span>, </span><span><span class="hljs-variable">$ftp_pass</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>);
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"FTP La connexion a échoué!"</span></span><span>);
}
</span></span>
Une fois la connexion réussie et connectée, vous devez appeler FTP_PASV pour activer le mode passif avant d'exécuter des fonctions de transfert de données (telles que ftp_get , ftp_put , etc.) :
<span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">ftp_pasv</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>);
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Le mode passif ne peut pas être activé!"</span></span><span>);
}
</span></span>
Réglé sur true pour activer le mode passif et false pour utiliser le mode actif.
Intégrez les étapes ci-dessus pour obtenir l'exemple complet suivant:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$ftp_host</span></span><span> = </span><span><span class="hljs-string">'ftp.example.com'</span></span><span>;
</span><span><span class="hljs-variable">$ftp_port</span></span><span> = </span><span><span class="hljs-number">21</span></span><span>;
</span><span><span class="hljs-variable">$ftp_user</span></span><span> = </span><span><span class="hljs-string">'username'</span></span><span>;
</span><span><span class="hljs-variable">$ftp_pass</span></span><span> = </span><span><span class="hljs-string">'password'</span></span><span>;
</span><span><span class="hljs-comment">// 1. Établir une connexion</span></span><span>
</span><span><span class="hljs-variable">$conn</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-variable">$ftp_host</span></span><span>, </span><span><span class="hljs-variable">$ftp_port</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$conn</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Impossible de se connecter à FTP serveur!"</span></span><span>);
}
</span><span><span class="hljs-comment">// 2. Se connecter</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">ftp_login</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>, </span><span><span class="hljs-variable">$ftp_user</span></span><span>, </span><span><span class="hljs-variable">$ftp_pass</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>);
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"FTP La connexion a échoué!"</span></span><span>);
}
</span><span><span class="hljs-comment">// 3. Activer le mode passif</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">ftp_pasv</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>);
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Le mode passif ne peut pas être activé!"</span></span><span>);
}
</span><span><span class="hljs-comment">// 4. Exemple:Télécharger un fichier</span></span><span>
</span><span><span class="hljs-variable">$remote_file</span></span><span> = </span><span><span class="hljs-string">'remote/path/file.txt'</span></span><span>;
</span><span><span class="hljs-variable">$local_file</span></span><span> = </span><span><span class="hljs-string">'local_copy.txt'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ftp_get</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>, </span><span><span class="hljs-variable">$local_file</span></span><span>, </span><span><span class="hljs-variable">$remote_file</span></span><span>, FTP_BINARY)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Télécharger le fichier avec succès!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le téléchargement du fichier a échoué!"</span></span><span>;
}
</span><span><span class="hljs-comment">// 5. Fermer la connexion</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>);
</span></span>
FTP_PASV doit être appelé après que FTP_LOGIN a réussi.
Certains serveurs FTP ne prennent pas en charge le mode passif par défaut et doivent être configurés du côté serveur.
Lorsque vous rencontrez des problèmes de connexion, utilisez FTP_RAW pour afficher la réponse du serveur pour aider à résoudre les problèmes.
En combinant FTP_CONNECT , FTP_LOGIN et FTP_PASV , nous pouvons utiliser FTP pour transférer des fichiers de manière stable dans des environnements réseau complexes. Dans le développement réel, ce processus est particulièrement important. La maîtrise de l'utilisation de ces fonctions peut vous permettre de gérer plus facilement divers problèmes de fonctionnement FTP. J'espère que l'explication de cet article peut vous aider à réaliser avec succès la connexion FTP et les paramètres de mode passif.