1. PHP简介
1.1 PHP的发展历程
1.1.1 PHP的起源
- PHP(Hypertext Preprocessor)是一种开源的脚本语言,最初由Rasmus Lerdorf在1994年设计。
- 它最初被设计为一种简单的服务器端脚本语言,用于生成动态网页。
1.1.2 PHP的版本演进
- 自从PHP 1.0版本发布以来,PHP经历了多个版本的迭代。从PHP 4和PHP 5的广泛应用,到2018年PHP 7的发布,PHP在性能和特性上都取得了显著提升。2020年,PHP 8进一步延续了这一趋势,引入了更多现代化的特性,如联合类型、属性(Attributes)、构造器属性提升等,进一步增强了语言的灵活性和性能。
1.2 PHP的特点
1.2.1 解释型语言
- PHP是一种解释型语言,这意味着它不需要编译就可以直接在服务器上执行。
1.2.2 跨平台
- PHP可以在多种操作系统上运行,包括Windows、Linux和Mac OS。
1.2.3 易于学习
- PHP语法简洁,易于学习和使用,尤其适合初学者。
1.3 PHP的应用领域
1.3.1 Web开发
- PHP是构建动态网站和Web应用程序的主要语言之一。
- 它与HTML、CSS和JavaScript一起使用,可以创建交互式和功能丰富的网页。
1.3.2 内容管理系统(CMS)
- PHP广泛用于开发内容管理系统,如WordPress、Emlog和typecho。
1.3.3 电子商务平台
- PHP被广泛用于开发电子商务平台,如Magento、PrestaShop和OpenCart。
1.3.4 社区和论坛系统
- PHP也广泛用于开发社区和论坛系统,如Discuz!。
1.3.5 网盘系统
- PHP被广泛用于开发网盘系统,例如Nextcloud和ownCloud。
1.3.6 API开发
- PHP可以用于开发RESTful API,为移动应用、前端框架(如React、Vue.js)和第三方服务提供数据交互接口。
2. 安装软件
2.1 安装XAMPP/LNMP/PHPStudy/宝塔面板等集成环境(选择1)
- XAMPP Installers and Downloads for Apache Friends
- LNMP一键安装包 - CentOS/RadHat/Debian/Ubuntu下自动编译安装Nginx,PHP,MySQL,PHPMyAdmin
- WampServer中文站 - Apache/MySQL/MariaDB/PHP集成环境软件下载站
- 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板
环境名称 | 适用平台 | 特点 |
---|---|---|
XAMPP | 跨平台 | 简单易用,适合初学者 |
WampServer | Windows | 图形化界面友好 |
宝塔面板 | Linux | 服务器管理一体化 |
2.2 安装Apache+Php+Mysql自行配置(选择2)
- 略
3. 安装Xampp(需要管理员方式运行)
需要以管理员的方式
安装选择(根据实际需要,这里仅演示Apache+Php+Mysql)
4.使用Xampp
4.1 启动Apache
-
点击Satart即可启动(纯净系统)
image.png
4.2 打开浏览器,预览默认网页
-
http://localhost/dashboard/
image.png
image.png - 由于已经封装完毕,所以Php和Apache已经配置好,可以直接使用
- 可以根据需求自行更改配置文件,如果需要复杂配置,可以自行学习,这里基本够用了
4.3 自定义源码
4.3.1 自定义子功能源码
- 打开 http://localhost/ 将默认加载C:\xampp\htdocs\index.php
- 打开 http://localhost/1.php 将默认加载C:\xampp\htdocs\1.php
- 打开 http://localhost/emlog/1.php 将默认加载C:\xampp\htdocs\emlog\1.php
- 只需要在对应位置创建对应的文件,打开网页即可访问(简单的学习,不涉及路由跳转)
- 带分页的数据库查询接口(AI生成)
<?php
// 数据库连接配置
$db_host = 'localhost';// ip 地址
$db_user = 'test';//mysql 用户名
$db_pass = 'test123456';//mysql 用户密码
$db_name = 'test';//数据库名字
// 创建数据库连接
$conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
// 检查连接
if ($conn->connect_error) {
die("数据库连接失败: " . $conn->connect_error);
}
// 设置字符集
$conn->set_charset("utf8");
// 获取当前页码,默认为1
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page = max($page, 1); // 确保页码不小于1
// 每页显示的记录数
$per_page = 20;
// 计算总记录数
$total_query = "SELECT COUNT(*) AS total FROM devices";// 其中的“devices”是数据库test中的一个表名
$total_result = $conn->query($total_query);
$total_row = $total_result->fetch_assoc();
$total_records = $total_row['total'];
// 计算总页数
$total_pages = ceil($total_records / $per_page);
// 确保页码不超过总页数
$page = min($page, $total_pages);
// 计算偏移量
$offset = ($page - 1) * $per_page;
// 查询当前页的数据
$query = "SELECT * FROM devices LIMIT $offset, $per_page";
$result = $conn->query($query);
// 检查查询结果
if (!$result) {
die("查询失败: " . $conn->error);
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>设备列表</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
background-color: #f5f5f5;
}
.container {
max-width: 1200px;
margin: 0 auto;
background-color: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
table {
width: 100%;
border-collapse: collapse;
margin-bottom: 20px;
}
th, td {
padding: 12px 15px;
text-align: left;
border-bottom: 1px solid #ddd;
}
th {
background-color: #f2f2f2;
font-weight: bold;
}
tr:hover {
background-color: #f9f9f9;
}
.pagination {
display: flex;
justify-content: center;
margin-top: 20px;
}
.pagination a {
color: #333;
padding: 8px 16px;
text-decoration: none;
border: 1px solid #ddd;
margin: 0 4px;
border-radius: 4px;
}
.pagination a.active {
background-color: #4CAF50;
color: white;
border: 1px solid #4CAF50;
}
.pagination a:hover:not(.active) {
background-color: #ddd;
}
.page-info {
text-align: center;
margin-bottom: 20px;
color: #666;
}
</style>
</head>
<body>
<div class="container">
<h1>设备列表</h1>
<div class="page-info">
共 <?php echo $total_records; ?> 条记录,当前显示第 <?php echo $page; ?> 页/共 <?php echo $total_pages; ?> 页
</div>
<table>
<thead>
<tr>
<th>ID</th><!-- 根据实际表结构添加更多列(这里是备注翻译) -->
<th>设备</th><!-- 根据实际表结构添加更多列(这里是备注翻译) -->
<th>IMEI</th><!-- 根据实际表结构添加更多列(这里是备注翻译) -->
<th>插件</th><!-- 根据实际表结构添加更多列(这里是备注翻译) -->
<th>时间</th><!-- 根据实际表结构添加更多列(这里是备注翻译) -->
<!-- 根据实际表结构添加更多列 -->
</tr>
</thead>
<tbody>
<?php if ($result->num_rows > 0): ?>
<?php while($row = $result->fetch_assoc()): ?>
<tr>
<td><?php echo htmlspecialchars($row['id']); ?></td><!-- 根据实际表结构添加更多列 -->
<td><?php echo htmlspecialchars($row['device_id']); ?></td><!-- 根据实际表结构添加更多列 -->
<td><?php echo htmlspecialchars($row['node_id']); ?></td><!-- 根据实际表结构添加更多列 -->
<td><?php echo htmlspecialchars($row['model']); ?></td><!-- 根据实际表结构添加更多列 -->
<td><?php echo htmlspecialchars($row['updated_at']); ?></td><!-- 根据实际表结构添加更多列 -->
<!-- 根据实际表结构添加更多列 -->
</tr>
<?php endwhile; ?>
<?php else: ?>
<tr>
<td colspan="5" style="text-align: center;">没有找到设备记录</td>
</tr>
<?php endif; ?>
</tbody>
</table>
<div class="pagination">
<?php if ($page > 1): ?>
<a href="?page=1">首页</a>
<a href="?page=<?php echo $page - 1; ?>">上一页</a>
<?php endif; ?>
<?php
// 显示页码导航(最多显示5个页码)
$start_page = max(1, $page - 2);
$end_page = min($total_pages, $page + 2);
if ($start_page > 1) {
echo '<a href="?page=1">1</a>';
if ($start_page > 2) {
echo '<span>...</span>';
}
}
for ($i = $start_page; $i <= $end_page; $i++) {
if ($i == $page) {
echo '<a href="?page='.$i.'" class="active">'.$i.'</a>';
} else {
echo '<a href="?page='.$i.'">'.$i.'</a>';
}
}
if ($end_page < $total_pages) {
if ($end_page < $total_pages - 1) {
echo '<span>...</span>';
}
echo '<a href="?page='.$total_pages.'">'.$total_pages.'</a>';
}
?>
<?php if ($page < $total_pages): ?>
<a href="?page=<?php echo $page + 1; ?>">下一页</a>
<a href="?page=<?php echo $total_pages; ?>">末页</a>
<?php endif; ?>
</div>
</div>
</body>
</html>
<?php
// 关闭数据库连接
$conn->close();
?>
4.3.2 使用Emlog搭建自己的网站
- 下载 emlog - 基于php的blog博客程序及CMS建站系统
- 将文件解压后放在C:\xampp\htdocs目录下
- 打开mysql
- 访问http://localhost/phpmyadmin/
新建数据库 - 新增mysql用户,赋予权限
- 访问http://localhost/
image.png - 配置完成,即可使用
4.4 常见问题解决
4.4.1 服务无法启动
- 检查Apache服务的权限,确保用户有启动服务的权限。
- 查看系统日志,查找启动失败的详细原因。
4.4.2 网站无法访问
- 检查虚拟主机配置是否正确,包括文档根目录、域名等。
- 检查服务器防火墙设置,确保端口80(或443)已开放。
- 查看系统日志,查找访问失败的详细原因。
4.4.3 性能优化建议
- 启用OPcache加速PHP执行
- 配置适当的PHP内存限制
- 使用MySQL索引优化查询
5. 学习资源推荐
5.1 官方文档
5.2 在线教程
- PHP中文网基础教程
- W3School PHP教程
- Laravel学院实战课程
5.3 开发工具
- VS Code + PHP扩展
- PHPStorm专业IDE
- Git版本控制工具
6. 安全最佳实践
- 输入验证:对所有用户输入进行过滤
- 密码安全:使用password_hash()存储密码
- SQL防护:使用预处理语句防止注入
- 错误处理:生产环境关闭错误显示
- 定期更新:保持PHP和组件为最新版本