使用 ftp_connect() 建立 FTP 連接時,出現警告:
PHP Warning: ftp_connect(): php_network_getaddresses: getaddrinfo failed
此錯誤表示 PHP 無法解析目標 FTP 服務器的主機名(DNS 解析失敗)或網絡不可達。常見原因包括:
/etc/resolv.conf 配置錯誤或 DNS 服務器不可用。ftp://)或尾部斜杠。開放 FTP 相關端口:
# 開放命令連接端口 21
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# 開放被動模式數據端口範圍(需與 FTP 服務器配置一致,例:30000-31000)
iptables -A INPUT -p tcp --dport 30000:31000 -j ACCEPT
# 保存規則
service iptables save
# 測試 DNS 解析
nslookup ftp.example.com
# 測試 TCP 連通性
telnet ftp.example.com 21
# 或
nc -zv ftp.example.com 21
<?php
$host = 'ftp.example.com'; // 不要加 ftp:// 或尾部 /
$port = 21;
$conn = ftp_connect($host, $port, 30); // 30 秒超時
if (!$conn) {
die('FTP 連接失敗,請檢查主機名、防火牆及網絡');
}
echo '連接成功';
ftp_close($conn);
?>
ftp_pasv($conn, true))下需額外開放數據端口範圍。ssh2_sftp 或 phpseclib)替代明文 FTP,提升安全性。