上传PHP网站到服务器,核心就三步:准备好本地文件、传上去、配好运行环境。 别把这事儿想复杂了,整个流程走一遍,你会觉得它比装个电脑软件还简单。
在开始之前,我先跟你交个底:PHP网站和纯静态网站不一样,它不光要传文件,还得让服务器“听得懂”PHP语言,并且给它配一个数据库,别一上来就拖文件,先把思路理顺,后面才不会手忙脚乱。
部署前,先跟你的网站“内部人员”打个招呼
很多朋友第一次部署就翻车,栽就栽在准备工作没做扎实,我见过不少人,本地跑得好好的,传上去全是白屏,原因八成是PHP版本或者扩展不一致。
第一件事:确认你的PHP版本。 本地用的是PHP 7.4,服务器上默认给的却是PHP 5.6,那代码大概率会直接报错,你可以在服务器上建一个phpinfo.php文件,里面写上<?php phpinfo(); ?>,然后用浏览器访问一下,就能看清服务器的“底细”了。
第二件事:检查数据库导出是否完整。 用phpMyAdmin或者Navicat导出SQL文件时,注意选“含DROP TABLE语句”和“UTF-8编码”,否则传到线上,容易遇到数据乱码或者表结构冲突的怪问题。
第三件事:备份你本地的伪静态规则。 如果你用ThinkPHP、Laravel这类框架,或者WP这种伪静态链接较多的程序,一定把本地的nginx.conf、.htaccess或者路由配置文件单独复制一份出来,很多“500错误”就是这一步偷懒导致的。
上传PHP网站到服务器的三种体面方式
文件传输是体力活,但方式选对了,能帮你省掉不少麻烦。不同场景用不同工具,别一把梭。
小站点、数据量不大,用宝塔面板直接拖
如果你用的是宝塔面板(BT Panel),登录后台,找到“文件”菜单,进入你站点对应的目录(一般是/www/wwwroot/你的域名),直接点“上传”,把本地压缩包传上去,再右键解压。别忘了把解压后的文件移动到站点根目录下,很多人上传到二级目录导致访问404。
但要注意,别用面板自带的在线编辑器去改大文件,卡顿不说,容易丢数据,下载到本地用Notepad++或VS Code改完再传回去,更稳妥。
大项目、改动频繁,用Git或命令行推送
对于代码量大的项目,用FTP分段传太折磨人,这时候用Git配合服务器端的钩子(Hook)部署,是业内比较优雅的玩法,简单说,你在服务器上建一个裸仓库(Bare Repository),本地执行
git push origin master,服务器上的代码就会自动更新到网站目录,这招对经常改代码的人来说,效率是肉眼可见的提升。
普通用户最稳的选择,用FileZilla这类SFTP工具
FileZilla不用多介绍,但务必选择SFTP协议(端口22),而不是老旧的FTP(端口21),虽然慢一点,但安全性和稳定性都不错,打开软件,填上服务器IP、用户名(一般不是root,可能是www或者特定用户)、密码,端口填22,点快速连接,连上后,左边是本地,右边是服务器,把public或www目录里的东西,一股脑拖进右边根目录就行。
上传完成才是重头戏,环境配置别踩坑
文件传完了,网站能不能跑起来,全看这一步。 这一块,我建议你按下面这个顺序来排查,能少走一半弯路。
运行目录要“指对路”
大部分现代PHP框架(Laravel、ThinkPHP、CodeIgniter)都不是让用户直接访问根目录的,你得把网站的运行目录指向public或者web子目录,在宝塔面板里,找到“网站” -> “设置” -> “网站目录”,把“运行目录”改成/public,然后保存。这一步不做,你会看到一堆目录结构暴露在浏览器里,或者直接白屏。
PHP版本与扩展要“对号入座”
在宝塔面板的“软件商店”里,你可能会看到PHP 5.6、7.4、8.0好几个版本。安装哪个,取决于你的程序源码。 比如老牌的Discuz! Q系列,用PHP 7.4就很稳,但如果你上PHP 8.2,部分老插件可能直接打不开,装完版本后,记得去“PHP扩展”里安装fileinfo、opcache、redis这些常用扩展,大部分程序在安装时会检测这些东西是否开启。
伪静态(Rewrite)规则要配上
打开“网站”->“设置”->“伪静态”,如果你是ThinkPHP,选“ThinkPHP”模板保存;如果你是WordPress,选“wordpress”模板。如果你用的是Nginx服务器,伪静态规则写错,会导致除了首页之外的所有内页都404。
文件权限别“自由散漫”
很多新手为了图省事,直接把wwwroot目录权限改成777。这是大忌。 权限太宽松,容易被植入木马脚本,正确的做法是:网站目录的所有者(Owner)设为www,权限设为755,存储目录(如runtime、upload)设为755即可。 如果你用的是别的环境,也尽量别用777,安全第一。
数据库导入与配置文件的“临门一脚”
PHP网站的灵魂在数据库里。 文件哪怕全传对了,数据库连不上,网站依然在你面前转圈圈。
- 在宝塔面板的“数据库”菜单中,创建一个新数据库,记得字符集选
utf8mb4,这个字符集能完美支持emoji和生僻字。 - oto导入你本地导出的SQL文件,点击“导入”,选择文件,等待完成,如果SQL文件很大(比如超过50MB),用面板导入容易超时,最好用命令行:
mysql -u用户名 -p密码 数据库名 < 本地文件.sql。 - 打开你网站源码里的数据库配置文件(Laravel是
.env,ThinkPHP是database.php,WordPress是wp-config.php),把里面的DB_HOST改成localhost或0.0.1,DB_DATABASE改成你刚才新建的库名,DB_USERNAME和DB_PASSWORD改成你设置的用户名和密码。
部署踩坑自查:为什么你的PHP网站上传到服务器后还是打不开?
如果你按照上面的步骤走完了,还是有问题,多数是下面这几个细节在做怪。 业内专家指出,大部分部署失败案例都集中在环境差异上,而不是代码逻辑本身。
- 访问域名出现“502 Bad Gateway”:这是PHP-FPM没启动,或者PHP版本与你站点绑定的版本不一致,去宝塔“软件商店”查看PHP服务是否运行,或者在“网站”设置里改一下PHP版本。
- 出现“404 Not Found”:伪静态没配,或者运行目录指错了。
- 出现“403 Forbidden”:看下站点目录下的
index.php文件是否存在,或者权限设置里禁止了PHP解析。 - 能打开首页,但点开商品详情页就报错:大概率是伪静态规则没匹配上,或者是URL模式没改,比如ThinkPHP要设置
url_route_on => true。
海外服务器不用备案,能省心多少?
关于服务器选择,如果你不想折腾备案,那海外服务器不用备案就是比较适合你的选择了。 我自己常用的是香港或新加坡的轻量服务器,虽然延迟比国内高个20-30毫秒(基本感知不到),但胜在即开即用,如果你的访客主要在国内,建议选国内服务器(简米云、酷番云)并老老实实备案;如果业务面向海外或者你只是测试用,那海外服务器不用备案的优势就很明显了省下至少两周的备案等待时间,但要注意,
国内访问海外服务器,偶尔会有丢包现象,尤其是晚高峰时段。
关于php网站上传到服务器和本地部署的区别
很多朋友混淆了这两个概念。在本地部署,你用的是集成环境(比如phpStudy或xampp),它是把所有服务都揉在一个进程里;而在服务器上,Nginx/Apache、PHP-FPM、MySQL是三个独立的服务,需要你分别确认它们是否运行正常,这也是为什么有些代码本地没问题,一到线上就报错本地集成环境默认开了所有扩展,但服务器为了性能和安全,只开了必要的扩展。 排查线上问题时,先看看PHP错误日志(一般位于/www/wwwroot/站点目录/runtime/log或/var/log/php-fpm.log),这比瞎猜要高效得多。
常见问答
-
问:把一个PHP网站上传到服务器,大概需要花多少钱?
答: 成本主要看服务器配置,个人博客或展示站,云虚拟主机或轻量应用服务器就够用,国内主流云厂商的活动价一年也就一百来块,如果是并发较高的企业站,建议买云服务器CVM(2核4G起步),价格大概在一年几百元到上千元不等,域名费用是另外的,普通.com域名首年一般几十元。 -
问:上传PHP网站到服务器时,需要把本地
node_modules或vendor目录一起传上去吗?
答: 别传。vendor目录是Composer根据composer.json生成的依赖包,应当直接在服务器上执行composer install命令来安装,同样,node_modules是前端构建产物,应该在服务器上跑npm install和npm run build,手动上传这些目录,不仅上传速度慢得让人抓狂,而且容易出现文件丢失或权限错乱的隐患。 -
问:为什么我用IP地址访问服务器上的PHP网站,却跳转到了域名?
答: 这是程序配置里写死了APP_URL或者站点域名,比如Laravel的.env文件里设置了APP_URL=http://你的域名.com,当你用IP访问时,框架会强制跳转到这个域名。你需要把.env里的APP_URL改成http://IP地址,或者临时在本地hosts文件里把域名解析到服务器IP来测试。 同时也要检查数据库里的wp_options表(WordPress)中的siteurl字段是否写死了老域名。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/601700.html




