You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service中PHP函数ftp_connect()无法使用的求助

解决Azure App Service中PHP FTP连接无响应/被拒绝的问题

问题根源

Azure App Service的沙盒环境默认限制主动模式的FTP(21端口)出站连接,这就是你本地能正常连接,但Azure端无论是PHP代码还是Kudu控制台都失败的核心原因:主动模式需要FTP服务器主动发起入站连接,会被沙盒拦截;而被动模式的连接是允许的。

具体解决方案

1. 切换为被动模式连接FTP

修改PHP代码,在ftp_connect后启用被动模式,这是最直接的解决办法:

$ftpServer = 'ftp.xxx.com';
$ftpUser = 'your-ftp-username';
$ftpPass = 'your-ftp-password';

// 建立连接
$ftpConn = ftp_connect($ftpServer);
if (!$ftpConn) {
    die("无法连接到FTP服务器");
}

// 启用被动模式(关键步骤)
ftp_pasv($ftpConn, true);

// 登录FTP服务器
$loginStatus = ftp_login($ftpConn, $ftpUser, $ftpPass);
if (!$loginStatus) {
    die("FTP登录失败");
}

// 后续执行FTP操作,比如上传/下载
// ftp_put(...) 或 ftp_get(...)

// 关闭连接
ftp_close($ftpConn);

2. 验证PHP FTP扩展是否启用

Azure的PHP环境可能未默认开启FTP扩展,检查方法:

  • 进入Kudu控制台(访问 https://<你的应用名称>.scm.azurewebsites.net)
  • 新建或打开phpinfo.php文件,写入内容:<?php phpinfo(); ?>
  • 访问该文件,搜索「ftp」关键词,确认ftp扩展已加载
  • 若未启用,可在App Service的「配置」→「常规设置」中,确保对应PHP版本的FTP扩展已勾选;或在项目根目录添加.user.ini文件,写入extension=ftp

3. 检查App Service网络配置

  • 公网FTP服务器:确认App Service没有配置出站IP限制:
    1. 登录Azure门户,进入你的App Service
    2. 左侧菜单选择「网络」→「出站流量限制」
    3. 确保没有规则阻止目标FTP服务器IP或21端口的出站流量
  • 内网FTP服务器:需要将App Service配置为VNet集成,才能访问内部网络资源,具体操作可在Azure门户的「网络」→「VNet集成」中设置

4. 白名单Azure出站IP到FTP服务器

目标FTP服务器的防火墙可能拦截了Azure的出站IP,解决步骤:

  • 在Azure门户的App Service「概述」页面,复制「出站IP地址」列表
  • 将这些IP添加到FTP服务器的防火墙白名单中

关于Kudu控制台的ftp命令

Kudu环境同样受App Service沙盒限制,ftp命令返回「Access is denied」是正常现象,无需纠结,只要PHP代码用被动模式能正常连接,就说明问题已解决。


内容的提问来源于stack exchange,提问作者Muhammad Mubashir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:26:17