phpenv环境下ftp扩展默认不启用,需对每个php版本单独编译源码并添加--enable-ftp选项,windows或docker可跳过编译,file_get_contents("ftp://")在allow_url_fopen=on时也可有限使用。

phpenv 环境下 FTP 扩展默认不启用
phpenv 本身只是 PHP 版本管理工具,它不自动启用任何扩展——包括 ftp。即使你用 phpenv 安装了 PHP 8.2 或 8.3,ftp_connect() 仍会报错 Call to undefined function ftp_connect(),除非手动编译并加载扩展。
Linux 下需重新编译 PHP 源码启用 FTP
phpenv 安装的 PHP 默认不带 ftp 扩展(尤其较新版本如 8.1+),因为 configure 脚本默认禁用 --enable-ftp。必须从源码重装:
- 先确认当前 PHP 源码路径:
phpenv version-file+phpenv whence php反推源码位置(通常在~/.phpenv/sources/<version>/</version>) - 进入该目录,执行:
./configure --enable-ftp --with-php-config=$(which php-config) [其他原有选项] -
make && make install(注意:不要make clean,否则丢失已配置项) - 验证:
php -m | grep ftp应输出ftp
跳过这步直接改 php.ini 加 extension=ftp.so 会失败——因为根本没生成这个文件。
Windows 或 Docker 环境可绕过编译
如果你不是在裸机 Linux 上用 phpenv,而是:
- Windows:phpenv 通常不适用,建议直接用官方 Windows 包,
php_ftp.dll已内置,只需取消php.ini中extension=php_ftp.dll的注释 - Docker(如 gitee.com/tonyshow/dockerCfg):镜像已预装
ftp,php -m可见,无需额外操作 - 使用
file_get_contents("ftp://...")类远程 URL 方式:只要allow_url_fopen=On,不依赖ftp扩展也能读写 FTP 文件(但功能受限,无法列目录、建目录、设权限等)
常见错误:phpenv 切换版本后 FTP 功能消失
这是最易被忽略的点:每次用 phpenv install 新装一个 PHP 版本,都是一次独立编译。哪怕上个版本启用了 FTP,新版本默认仍是关闭的。
必须对每个需要 FTP 的版本重复执行「进入源码目录 → configure --enable-ftp → make install」流程。别指望 phpenv global 切换就能继承扩展状态。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











