PHP服务器软件开发使用

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 跨平台 简单易用,适合初学者
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搭建自己的网站

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. 安全最佳实践

  1. 输入验证:对所有用户输入进行过滤
  2. 密码安全:使用password_hash()存储密码
  3. SQL防护:使用预处理语句防止注入
  4. 错误处理:生产环境关闭错误显示
  5. 定期更新:保持PHP和组件为最新版本
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容