游客发表
PHP网站能跑起来,站入核心就三件事:能解析PHP文件、站入能连上数据库、站入能把请求分发到正确的站入代码上。很多新手卡住,站入不是站入语法没学会,而是站入本地环境没搭对,代码写对了却打不开页面。站入
我见过一个典型情况:有人用XAMPP装好了环境,站入把项目丢进htdocs,站入浏览器访问localhost,站入结果跳出目录列表而不是站入首页。原因很简单,站入Apache默认找index.php,站入但他的站入文件叫home.php。改个文件名,或者配一下DirectoryIndex,问题就没了。这种细节教程里往往不提,但实际开发中天天遇到。
新手最容易犯的错是一上来就学Laravel或ThinkPHP。框架确实好用,但连$_GET和$_POST的区别都没搞清,学框架只会更迷糊。建议先用原生PHP写一个最简单的留言板:一个HTML表单提交到PHP文件,PHP接收数据、写入MySQL、再读出来显示。这个过程走一遍,请求响应周期就理解了。
本地环境用phpStudy或者XAMPP都行,装完确认两件事:Apache和MySQL都启动了,phpinfo()能正常输出。phpinfo里重点看两个地方——Loaded Configuration File的路径,以及mysqli或pdo_mysql扩展有没有开。我遇到过好几次连不上数据库,最后发现是php.ini里extension=mysqli被注释掉了。
初学者常把数据库密码直接写在PHP文件里,然后上传到GitHub。这种事每年都能看到几起。至少用一个config.php单独存配置,再在.gitignore里排除掉。不用一上来就搞环境变量、密钥管理服务,那是团队协作阶段的事。
连接代码用PDO比mysqli更省心,尤其是预处理语句。比如用户登录查询:
$stmt = $pdo->prepare('SELECT id, username FROM users WHERE email = ?'); $stmt->execute([$email]); $user = $stmt->fetch(); 这样写自动防SQL注入,不用手动转义字符串。很多老教程还在用mysql_query加addslashes,那套写法现在跑在PHP7以上会直接报错,扩展早就移除了。
不用框架的话,路由就是一个switch或者if-else。比如index.php里根据$_GET['page']加载不同文件:
$page = $_GET['page'] ?? 'home'; if ($page === 'about') { include 'views/about.php'; } elseif ($page === 'contact') { include 'views/contact.php'; } else { include 'views/home.php'; } 这看起来很土,但能让你明白URL参数怎么控制页面内容。模板就是PHP文件里混写HTML,用<?php echo $title; ?>输出变量。别急着上Twig或Blade,先感受一下原生写法里怎么防止XSS——输出用户内容时用htmlspecialchars()包一层。
有个真实案例:某小网站留言板没做转义,用户提交一段<script>alert(1)</script>,每次有人打开页面就弹窗。修复方法就是输出时加htmlspecialchars($content, ENT_QUOTES, 'UTF-8')。这个函数名很长,但值得记住。
开发阶段把display_errors打开,error_reporting设成E_ALL。线上环境则相反,错误记到日志里,别让用户看到路径和SQL语句。我见过有人本地开发时把错误关了,结果一个拼写错误找了半小时。PHP的错误提示其实很直接,比如“Undefined variable $name”,告诉你变量没定义,比猜强多了。
最后说个观察:很多PHP教程花大量篇幅讲语法,却很少讲文件权限、路径分隔符、字符编码这些“脏活”。但恰恰是这些地方最容易让新手卡住。比如Windows下路径用反斜杠,Linux下用正斜杠,写include时用DIRECTORY_SEPARATOR或者干脆统一用/,能省不少事。
PHP网站入门不难,难的是把每个环节都亲手跑通一遍。跑通了,再去看框架,会发现它只是把那些重复的步骤包装了一下。
友情链接