首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

解決 PHP ftp_connect() 報錯:php_network_getaddresses: getaddrinfo failed

     編輯:PHP 綜合知識

錯誤現象

使用 ftp_connect() 建立 FTP 連接時,出現警告:

PHP Warning: ftp_connect(): php_network_getaddresses: getaddrinfo failed

原因分析

此錯誤表示 PHP 無法解析目標 FTP 服務器的主機名(DNS 解析失敗)或網絡不可達。常見原因包括:

  1. 防火牆攔截:服務器防火牆(如 iptables)未開放 FTP 端口(默認 21)及被動模式端口範圍。
  2. DNS 解析異常:/etc/resolv.conf 配置錯誤或 DNS 服務器不可用。
  3. 主機名拼寫錯誤:傳入的 host 參數包含協議頭(ftp://)或尾部斜杠。
  4. 網絡不通:服務器之間無路由、安全組規則阻擋。

排查與解決步驟

1. 檢查防火牆(最常見)

開放 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

2. 驗證網絡連通性

# 測試 DNS 解析
nslookup ftp.example.com

# 測試 TCP 連通性
telnet ftp.example.com 21
# 或
nc -zv ftp.example.com 21

3. 正確調用 ftp_connect()

<?php
$host = 'ftp.example.com'; // 不要加 ftp:// 或尾部 /
$port = 21;
$conn = ftp_connect($host, $port, 30); // 30 秒超時
if (!$conn) {
    die('FTP 連接失敗,請檢查主機名、防火牆及網絡');
}
echo '連接成功';
ftp_close($conn);
?>

最佳實踐建議

  • 優先使用 IP 地址而非域名,排除 DNS 故障。
  • 被動模式(ftp_pasv($conn, true))下需額外開放數據端口範圍。
  • 生產環境建議使用 SFTP(ssh2_sftp 或 phpseclib)替代明文 FTP,提升安全性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved