本章目标

  • 了解PHP的历史和特点
  • 掌握PHP的应用场景
  • 学会搭建PHP开发环境
  • 编写第一个PHP程序
  • 了解PHP的执行原理

1.1 PHP简介

1.1.1 什么是PHP

PHP(PHP: Hypertext Preprocessor)是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。PHP的语法借鉴了C、Java和Perl等语言的特点,易于学习,使用广泛。

1.1.2 PHP的历史

  • 1994年:Rasmus Lerdorf创建了PHP的前身Personal Home Page
  • 1995年:发布PHP/FI(Forms Interpreter)
  • 1997年:PHP 3.0发布,重新定义为PHP: Hypertext Preprocessor
  • 2000年:PHP 4.0发布,引入Zend引擎
  • 2004年:PHP 5.0发布,增强面向对象特性
  • 2015年:PHP 7.0发布,性能大幅提升
  • 2020年:PHP 8.0发布,引入JIT编译器和新特性
  • 2023年:PHP 8.3发布,持续优化和改进

1.1.3 PHP的特点

  1. 开源免费:PHP是开源软件,可以免费使用
  2. 跨平台:支持Windows、Linux、macOS等多种操作系统
  3. 易学易用:语法简单,学习曲线平缓
  4. 功能强大:内置丰富的函数库和扩展
  5. 社区活跃:拥有庞大的开发者社区
  6. 框架丰富:Laravel、Symfony、CodeIgniter等优秀框架

1.1.4 PHP的应用场景

  1. Web开发:动态网站、Web应用程序
  2. API开发:RESTful API、GraphQL API
  3. 命令行脚本:系统管理、数据处理
  4. 桌面应用:使用PHP-GTK开发桌面程序
  5. 内容管理系统:WordPress、Drupal、Joomla
  6. 电子商务:Magento、OpenCart、PrestaShop

1.2 PHP环境搭建

1.2.1 Windows环境搭建

方法一:使用集成环境(推荐新手)

XAMPP安装: 1. 访问XAMPP官网 2. 下载Windows版本 3. 运行安装程序,选择安装组件: - Apache(Web服务器) - MySQL(数据库) - PHP(脚本语言) - phpMyAdmin(数据库管理工具)

启动服务

# 打开XAMPP控制面板
# 启动Apache和MySQL服务

验证安装: 1. 打开浏览器访问 http://localhost 2. 看到XAMPP欢迎页面表示安装成功

方法二:手动安装

1. 安装Apache

# 下载Apache HTTP Server
# 解压到 C:\Apache24
# 配置httpd.conf文件

2. 安装PHP

# 下载PHP
# 解压到 C:\php
# 配置php.ini文件
# 在Apache中配置PHP模块

3. 安装MySQL

# 下载MySQL Community Server
# 运行安装程序
# 配置数据库

1.2.2 Linux环境搭建

Ubuntu/Debian系统

# 更新包列表
sudo apt update

# 安装Apache
sudo apt install apache2

# 安装PHP
sudo apt install php php-mysql php-curl php-gd php-mbstring php-xml php-zip

# 安装MySQL
sudo apt install mysql-server

# 启动服务
sudo systemctl start apache2
sudo systemctl start mysql

# 设置开机自启
sudo systemctl enable apache2
sudo systemctl enable mysql

CentOS/RHEL系统

# 安装EPEL仓库
sudo yum install epel-release

# 安装Apache
sudo yum install httpd

# 安装PHP
sudo yum install php php-mysql php-curl php-gd php-mbstring php-xml php-zip

# 安装MySQL
sudo yum install mysql-server

# 启动服务
sudo systemctl start httpd
sudo systemctl start mysqld

# 设置开机自启
sudo systemctl enable httpd
sudo systemctl enable mysqld

1.2.3 macOS环境搭建

使用Homebrew(推荐)

# 安装Homebrew(如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装PHP
brew install php

# 安装Apache
brew install httpd

# 安装MySQL
brew install mysql

# 启动服务
brew services start httpd
brew services start mysql

使用MAMP

  1. 下载MAMP
  2. 安装并启动MAMP
  3. 配置Apache和MySQL

1.2.4 Docker环境搭建

创建docker-compose.yml

version: '3.8'

services:
  web:
    image: php:8.3-apache
    ports:
      - "80:80"
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: testdb
      MYSQL_USER: testuser
      MYSQL_PASSWORD: testpass
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8080:80"
    environment:
      PMA_HOST: db
      PMA_USER: root
      PMA_PASSWORD: rootpassword
    depends_on:
      - db

volumes:
  mysql_data:

启动环境

# 创建项目目录
mkdir php-project
cd php-project

# 创建源码目录
mkdir src

# 启动容器
docker-compose up -d

# 查看容器状态
docker-compose ps

1.3 开发工具配置

1.3.1 IDE选择

PhpStorm(推荐): - 功能强大的PHP专业IDE - 智能代码补全和错误检测 - 内置调试器和版本控制 - 支持框架和数据库

Visual Studio Code: - 轻量级编辑器 - 丰富的PHP扩展 - 免费开源 - 跨平台支持

Sublime Text: - 快速轻量 - 强大的插件系统 - 多光标编辑

1.3.2 VS Code PHP开发配置

安装必要扩展

{
  "recommendations": [
    "bmewburn.vscode-intelephense-client",
    "xdebug.php-debug",
    "neilbrayfield.php-docblocker",
    "persoderlind.vscode-phpcbf",
    "rifi2k.format-html-in-php",
    "zobo.php-intellisense"
  ]
}

配置settings.json

{
  "php.validate.executablePath": "/usr/bin/php",
  "php.suggest.basic": false,
  "intelephense.files.maxSize": 5000000,
  "intelephense.completion.triggerParameterHints": true,
  "intelephense.completion.insertUseDeclaration": true,
  "intelephense.format.braces": "allman"
}

1.3.3 Xdebug调试配置

安装Xdebug

# Ubuntu/Debian
sudo apt install php-xdebug

# CentOS/RHEL
sudo yum install php-xdebug

# macOS
brew install php-xdebug

配置php.ini

[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.log=/tmp/xdebug.log

VS Code调试配置

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for Xdebug",
      "type": "php",
      "request": "launch",
      "port": 9003,
      "pathMappings": {
        "/var/www/html": "${workspaceFolder}"
      }
    }
  ]
}

1.4 第一个PHP程序

1.4.1 Hello World

创建文件 hello.php

<?php
// 这是我的第一个PHP程序
echo "Hello, World!";
?>

运行方式

  1. Web服务器运行

    • 将文件放在Web根目录(如htdocs)
    • 浏览器访问 http://localhost/hello.php
  2. 命令行运行

    php hello.php
    

    1.4.2 PHP标签

    PHP代码必须包含在PHP标签内:

    <?php
    // 标准PHP开始标签
    echo "Hello, PHP!";
    // PHP结束标签(可选)
    ?>
    <!-- HTML内容 -->
    <html>
    <body>
    <h1><?php echo "动态内容"; ?></h1>
    </body>
    </html>
    

标签类型

<?php
// 标准标签(推荐)
echo "Hello";
?>

<?= "短标签输出" ?>

<script language="php">
// 脚本标签(不推荐)
echo "Hello";
</script>

<% 
// ASP风格标签(已废弃)
echo "Hello";
%>

1.4.3 PHP与HTML混合

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title><?php echo "动态标题"; ?></title>
</head>
<body>
    <h1>欢迎来到我的网站</h1>
    
    <?php
    $name = "张三";
    $age = 25;
    ?>
    
    <p>用户姓名:<?= $name ?></p>
    <p>用户年龄:<?= $age ?></p>
    
    <ul>
    <?php
    $fruits = ["苹果", "香蕉", "橙子"];
    foreach ($fruits as $fruit) {
        echo "<li>$fruit</li>";
    }
    ?>
    </ul>
    
    <p>当前时间:<?= date('Y-m-d H:i:s') ?></p>
</body>
</html>

1.5 PHP执行原理

1.5.1 PHP执行流程

  1. 词法分析:将PHP代码分解为tokens
  2. 语法分析:将tokens组织成抽象语法树(AST)
  3. 编译:将AST编译成操作码(Opcode)
  4. 执行:Zend引擎执行操作码 PHP源码 → 词法分析 → 语法分析 → 编译 → 执行 ↓ ↓ ↓ ↓ ↓ .php文件 → Tokens → AST → Opcode → 结果

1.5.2 Zend引擎

Zend引擎是PHP的核心,负责: - 解析PHP代码 - 管理内存 - 执行操作码 - 垃圾回收

1.5.3 SAPI(Server API)

SAPI是PHP与Web服务器的接口:

  • Apache模块:mod_php
  • CGI/FastCGI:独立进程
  • CLI:命令行接口
  • FPM:FastCGI进程管理器

1.5.4 OPcache优化

OPcache是PHP的操作码缓存:

[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=2
opcache.fast_shutdown=1

1.6 PHP配置

1.6.1 php.ini配置文件

查找php.ini位置

<?php
echo php_ini_loaded_file();
?>

重要配置项

; 基本设置
max_execution_time = 30
memory_limit = 128M
post_max_size = 8M
upload_max_filesize = 2M

; 错误报告
error_reporting = E_ALL
display_errors = On
log_errors = On
error_log = /var/log/php_errors.log

; 时区设置
date.timezone = Asia/Shanghai

; 扩展
extension=mysqli
extension=pdo_mysql
extension=curl
extension=gd
extension=mbstring

1.6.2 运行时配置

<?php
// 设置时区
date_default_timezone_set('Asia/Shanghai');

// 设置内存限制
ini_set('memory_limit', '256M');

// 设置执行时间
ini_set('max_execution_time', 60);

// 获取配置值
echo ini_get('memory_limit');

// 查看所有配置
phpinfo();
?>

1.7 常见问题解决

1.7.1 环境问题

问题1:Apache无法启动

# 检查端口占用
netstat -an | grep :80

# 检查配置文件语法
apachectl configtest

# 查看错误日志
tail -f /var/log/apache2/error.log

问题2:PHP模块未加载

# 检查PHP模块
php -m

# 检查Apache模块
apachectl -M | grep php

问题3:权限问题

# 设置Web目录权限
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

1.7.2 调试技巧

1. 错误显示

<?php
// 开启错误显示
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>

2. 调试输出

<?php
// 变量调试
$data = ['name' => '张三', 'age' => 25];
var_dump($data);
print_r($data);

// 调试信息
echo "<pre>";
print_r($_SERVER);
echo "</pre>";
?>

3. 日志记录

<?php
// 记录错误日志
error_log("调试信息: " . $variable);

// 自定义日志
file_put_contents('debug.log', date('Y-m-d H:i:s') . " - 调试信息\n", FILE_APPEND);
?>

1.8 开发最佳实践

1.8.1 代码规范

PSR标准: - PSR-1:基本编码标准 - PSR-2:编码风格指南 - PSR-4:自动加载标准 - PSR-12:扩展编码风格

示例代码

<?php

namespace App\Controllers;

use App\Models\User;
use Exception;

/**
 * 用户控制器
 */
class UserController
{
    /**
     * 获取用户信息
     *
     * @param int $id 用户ID
     * @return array
     * @throws Exception
     */
    public function getUser(int $id): array
    {
        if ($id <= 0) {
            throw new Exception('无效的用户ID');
        }

        $user = User::find($id);
        
        return [
            'id' => $user->id,
            'name' => $user->name,
            'email' => $user->email,
        ];
    }
}

1.8.2 安全考虑

<?php
// 1. 输入验证
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if (!$email) {
    die('无效的邮箱地址');
}

// 2. SQL注入防护
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ?');
$stmt->execute([$email]);

// 3. XSS防护
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');

// 4. CSRF防护
if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
    die('CSRF token不匹配');
}
?>

1.9 小结

本章介绍了PHP的基础概念和环境搭建:

  1. PHP简介:了解了PHP的历史、特点和应用场景
  2. 环境搭建:学会在不同操作系统上搭建PHP开发环境
  3. 开发工具:配置了IDE和调试环境
  4. 第一个程序:编写并运行了Hello World程序
  5. 执行原理:理解了PHP的执行流程和核心组件
  6. 配置管理:掌握了PHP的配置方法
  7. 问题解决:学会了常见问题的调试和解决方法

1.10 实践练习

  1. 环境搭建

    • 在你的操作系统上搭建PHP开发环境
    • 配置Xdebug调试器
    • 安装并配置IDE
  2. 第一个程序

    • 创建一个显示当前时间的PHP页面
    • 创建一个简单的个人信息展示页面
    • 编写一个命令行PHP脚本
  3. 配置实验

    • 修改php.ini配置并观察效果
    • 使用phpinfo()查看PHP配置信息
    • 测试不同的错误报告级别
  4. 调试练习

    • 故意制造一些语法错误并调试
    • 使用var_dump()和print_r()调试变量
    • 设置断点进行调试

1.11 扩展阅读

  1. PHP官方文档
  2. PSR编码标准
  3. Xdebug文档
  4. Composer包管理器
  5. PHP最佳实践

下一章预告:在下一章中,我们将学习PHP的基本语法,包括变量、常量、注释等基础概念。