SFTP自动上传失败主因是SSH未启用SFTP子系统或用户shell被禁用;需检查sshd_config中SftpSubsystem配置及用户shell(非/bin/false);PhpStorm连接需合法shell、绝对路径Root path、OpenSSH格式密钥;排除文件应设为On explicit save并配置Exclude items;时间戳差异导致上传跳过,建议校时或关闭时间戳比较;Xdebug调试需正确设置remote_host为本地局域网IP或host.docker.internal。
怎么配SFTP自动上传,不卡在“Test Connection”失败
多数人卡在这一步不是密码错了,而是ssh服务没开sftp子系统,或者用户被限制了shell访问。linux服务器上/etc/ssh/sshd_config里必须有sftpsubsystem配置,且对应用户不能是/bin/false或/usr/sbin/nologin——哪怕你只传文件,phpstorm底层仍需一个合法shell来初始化sftp会话。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 用
ssh -v user@host手动连一次,看最后几行有没有debug1: Sending subsystem: sftp,没有就说明SFTP没启用 - PhpStorm里填的
Root path必须是绝对路径(比如/var/www/html),不能以~开头,否则连接能通但同步失败 - 如果用密钥登录,私钥格式要是OpenSSH(
-----BEGIN OPENSSH PRIVATE KEY-----),PuTTY的.ppk不行,得用puttygen转成OpenSSH格式再导入
映射本地路径到远程时,“Excluded Paths”为什么不起作用
这个设置只影响自动上传触发范围,不阻止手动Upload操作,更不等于.gitignore。它本质是告诉PhpStorm:“这些目录别监听文件变化”,所以改了node_modules或vendor里的文件,不会触发上传——但如果你右键选“Upload to xxx”,它们照传不误。
常见错误现象:改完.env本地测试正常,一上传就炸,结果发现.env被同步到线上了。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 在
Deployment > Options里勾上Exclude items by name,填.env,.git,*.log(逗号分隔,不加空格) - 真正要防误传,得配合
Automatic Upload模式设为On explicit save,而不是On file change - 如果项目用Docker,
docker-compose.yml这类编排文件建议也加进排除列表,避免本地调试配置覆盖线上环境
为什么改了代码,远程文件没更新,但PhpStorm显示“Uploaded successfully”
这是时区或时间戳校准问题。PhpStorm默认用“比较时间戳”判断是否需要上传,如果服务器时间和本地差超过1分钟,它可能认为远程文件“更新”,跳过覆盖——尤其跨时区部署时高发。
性能影响:关掉时间戳比对会强制全量校验文件内容(MD5),小项目无感,但vendor目录一多,每次保存都卡两秒。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 进
Settings > Build, Execution, Deployment > Deployment > Options,取消勾选Upload changed files automatically to the default server下的Compare file timestamps - 更稳妥的做法是统一服务器时区:
sudo timedatectl set-timezone Asia/Shanghai,再用ntpdate -s time.windows.com校时 - 临时验证是否是这问题?改一行代码,保存后立刻在终端跑
ls -l remote_file.php,看修改时间是否晚于本地
PHP调试和SFTP部署共存时,xdebug.remote_host容易指向错地方
很多人把xdebug.remote_host设成服务器公网IP,结果调试连不上——因为PhpStorm监听的是本地回环,而服务器上的Xdebug尝试反向连“自己”的公网IP,绕了一圈又回到本机防火墙外。
使用场景:你在本地写代码,服务器跑PHP-FPM,想用PhpStorm断点调试,同时还要自动上传代码。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
-
xdebug.remote_host必须设为host.docker.internal(Docker场景)或10.0.2.2(Vagrant),真实物理服务器则填你本地电脑的局域网IP(比如192.168.1.100),不是localhost - 确保本地防火墙放行
9003端口(Xdebug 3默认端口),Windows用户常忽略Windows Defender防火墙 - 部署配置里别勾
Web server root URL里的Use "http://" instead of "https://",否则调试时重定向会丢断点
最麻烦的其实是权限链:SFTP上传的文件属主是部署用户,但PHP-FPM跑在www-data下,cache/目录写不了——这事不报错,但页面白屏,得去查php-fpm.log才看得见。


















