不少人觉得写代码难,其实把写好的代码弄到网站上,这个过程卡住的人更多。明明本地跑得好好的,传到服务器上就是白屏、报错,或者压根不知道从哪里下手。今天就把这条路上最常踩的坑和具体操作捋一遍,看完你就能自己动手了。
先说最普遍的场景,用了虚拟主机或者网站管理面板,比如宝塔、cPanel这类。这种情况下,你手上通常有个后台地址,能登录进去看到一个文件管理器。这就好办了,你复制的代码,如果是整个项目,最好先打包成zip压缩文件,然后在文件管理器里找到网站根目录,一般叫`wwwroot`或者`public_html`,把压缩包传上去,再解压到当前目录。注意别解压出多一层文件夹,那会导致访问路径不对。如果是单个文件,比如就改了一个`index.php`或者`style.css`,直接找到对应目录,点上传覆盖就行。
这里有个细节很多人栽跟头,你复制代码的时候是从Windows记事本或者Mac的文本编辑里复制的,传到Linux服务器上,可能会出现乱码或者莫名奇妙的换行错误。因为不同系统对换行符的解释不一样。解决办法是把代码文件另存为UTF-8格式,这在绝大多数现代编辑器里是默认选项。如果你用的是记事本,保存时在编码下拉框里选UTF-8。
接着说用FTP工具的情况,比如FileZilla。有时候你根本没装面板,或者空间商只给了你FTP账号。这时候你本地得装一个FileZilla客户端,新建站点,填上主机地址(一般是IP或者域名)、用户名、密码,端口一般默认21。连上之后,左边是你电脑的本地文件,右边是服务器文件。操作就是把你本地那个写好的文件,直接拖到右边对应目录去。本质上跟用文件管理器差不多,但FTP对传输大文件更稳定一些。如果你要传一堆散文件,建议也打包,传上去再解压,速度会快很多。
再往后就是给懂点命令行的人用的方式,Git。这对现在的开发流程来说更主流。你在本地项目文件夹里打开终端,先`git add .`把文件添加进暂存区,然后`git commit -m "更新了什么功能"`打个提交记录,接着你得先关联远程仓库,一般就是Github、Gitee或者你自己服务器上搭的Git服务,`git remote add origin 你的仓库地址`,最后`git push -u origin master`推上去。推到代码托管平台之后,还得让服务器上的代码同步。如果你服务器上已经用`git clone`拉取过这个项目,那登录服务器,在项目目录下执行`git pull origin master`,代码就更新了。这套流程走顺了之后非常方便,但刚开始配置SSH密钥那一步确实会劝退一些人。如果只是想快速更新一下线上网站,没必要在Git上死磕。

刚才讲的都是怎么把文件弄上去,下面得讲一个更关键的,为什么你传上去了,网站却显示不出来,或者显示的还是老样子。首先,确认你传的目录对不对。很多人把文件传到服务器根目录了,但网站绑定的子目录是`/public_html/wordpress`,那肯定没用。看一眼你浏览器打开域名时的实际路径,或者面板里网站设置里的运行目录是什么,对症下药。其次,缓存问题。如果你改的是CSS或者JS文件,浏览器会缓存,你盯着屏幕刷新半天没用。按Ctrl+F5强制刷新,或者去面板里清一下PHP缓存、Redis缓存、CDN缓存。很多时候所谓上传没生效,其实是缓存骗了你。
如果你用的是WordPress这类程序,修改主题代码要特别注意。最好是做个子主题,千万别直接在主题文件里改,不然主题一更新,你的修改全白费。操作上推荐在后台外观-主题文件编辑器里改`functions.php`或`style.css`,改完点更新文件即可。但如果代码写错了,可能导致整个网站白屏。这时候你连后台都进不去,就比较麻烦。好在还有一个办法,用FTP连上服务器,找到当前主题的文件夹,把里面的`functions.php`下载下来改了再传回去,但如果你改的确实是致命错误,PHP是会直接报错的。所以改之前,无论如何先备份一份原文件,这不能偷懒。
有一种常见错误是代码复制时带了奇怪的格式,特别是从网页上直接把代码块复制下来,里面可能含有` `这种非断行空格,或者引号被自动替换成了中文全角引号。这种问题非常隐蔽,肉眼很难发现。`parse error`报错时提示的行号往往不是真正出错的逻辑行,就是被这些隐形格式字符坑了。若出现这种情况,建议把代码先粘贴到一个纯文本编辑器,比如Notepad++里,把显示所有字符打开,检查一下有没有多余的空格点或者奇怪符号,再复制到项目文件里。
再补充一点关于数据库的,如果你的代码是需要连接数据库的,比如改了数据库连接信息,那不仅要传代码文件,还得保证服务器上的数据库账号密码对得上。常见的是本地测试数据库密码和线上不一样,你复制代码过来就得看一下配置文件里有没有把密码改成线上的。这一步如果不改,网页打开就是“数据库连接错误”,但程序文件本身是好的。
每次传代码之前,心里默念一句:备份旧文件,清空缓存,检查目录路径。把这三个动作养成习惯,能帮你规避掉百分之八十的线上事故。其实你可以先把代码传到测试服务器上跑一遍,确认无误了再转线上,比在线上直接改稳妥得多,特别是那种访问量很大的网站,代码改动几分钟就可能带来用户反馈,压力会很大。
说了这么多,你会发现真正的操作其实不难,难的是对整体的安全意识。只要熟练掌握一种上传方式,比如面板文件管理器,再加上会强制刷新缓存,就足够应付绝大多数个人网站的更新需求了。以后再遇到类似的问题,不妨先想清楚自己属于哪种情况,再动手去试,问题基本上都能解决。