本章目标
- 了解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的特点
- 开源免费:PHP是开源软件,可以免费使用
- 跨平台:支持Windows、Linux、macOS等多种操作系统
- 易学易用:语法简单,学习曲线平缓
- 功能强大:内置丰富的函数库和扩展
- 社区活跃:拥有庞大的开发者社区
- 框架丰富:Laravel、Symfony、CodeIgniter等优秀框架
1.1.4 PHP的应用场景
- Web开发:动态网站、Web应用程序
- API开发:RESTful API、GraphQL API
- 命令行脚本:系统管理、数据处理
- 桌面应用:使用PHP-GTK开发桌面程序
- 内容管理系统:WordPress、Drupal、Joomla
- 电子商务: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
- 下载MAMP
- 安装并启动MAMP
- 配置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!";
?>
运行方式:
Web服务器运行:
- 将文件放在Web根目录(如htdocs)
- 浏览器访问
http://localhost/hello.php
命令行运行:
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执行流程
- 词法分析:将PHP代码分解为tokens
- 语法分析:将tokens组织成抽象语法树(AST)
- 编译:将AST编译成操作码(Opcode)
- 执行: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的基础概念和环境搭建:
- PHP简介:了解了PHP的历史、特点和应用场景
- 环境搭建:学会在不同操作系统上搭建PHP开发环境
- 开发工具:配置了IDE和调试环境
- 第一个程序:编写并运行了Hello World程序
- 执行原理:理解了PHP的执行流程和核心组件
- 配置管理:掌握了PHP的配置方法
- 问题解决:学会了常见问题的调试和解决方法
1.10 实践练习
环境搭建:
- 在你的操作系统上搭建PHP开发环境
- 配置Xdebug调试器
- 安装并配置IDE
第一个程序:
- 创建一个显示当前时间的PHP页面
- 创建一个简单的个人信息展示页面
- 编写一个命令行PHP脚本
配置实验:
- 修改php.ini配置并观察效果
- 使用phpinfo()查看PHP配置信息
- 测试不同的错误报告级别
调试练习:
- 故意制造一些语法错误并调试
- 使用var_dump()和print_r()调试变量
- 设置断点进行调试
1.11 扩展阅读
下一章预告:在下一章中,我们将学习PHP的基本语法,包括变量、常量、注释等基础概念。