当前位置: 首页 > article >正文

PHP零起点入门:适合普通学习者的极简教程

PHP从零开始手把手入门指南与实战教程PHP是一门专门用于Web开发的服务器端脚本语言最大特点是能嵌入HTML上手简单且就业需求大。本文避开复杂术语用“操作步骤实际代码”带你从0学会PHP每个例子都能直接复制运行。一、环境搭建5分钟跑起第一个PHP程序1.1 选择并安装开发环境对于新手强烈推荐使用集成环境一键安装所有需要的组件环境名称适用系统特点phpStudyWindows中文界面简单易用XAMPP跨平台功能全面社区活跃MAMPMac界面美观专业友好WAMPWindows稳定性强以phpStudy为例的安装步骤全程图解式操作官网下载百度搜索“phpStudy”进入官网下载最新版免费安装软件安装时一路下一步建议不要装在C盘避免占用系统空间启动环境打开phpStudy找到“环境”选项卡勾选“Apache”和“MySQL”点击“启动”验证成功两个服务都显示“绿色对勾”即启动成功1.2 创建第一个PHP文件?php // 这是我的第一个PHP程序 echo Hello, PHP World!; echo br; // 换行标签 echo 今天是 . date(Y-m-d H:i:s); ?操作步骤找到网站根目录点击phpStudy左侧“网站”记住根目录路径默认是WWW或wwwroot文件夹新建文件在根目录下新建文本文档重命名为index.php注意后缀必须是.php粘贴代码将上面的代码复制到文件中运行测试打开浏览器输入http://localhost就能看到输出结果了二、PHP基础语法像说话一样写代码2.1 变量数据的“容器”变量就像生活中的盒子可以存放各种东西?php // 定义变量PHP是弱类型语言不用声明类型 $name 张三; // 字符串 $age 25; // 整数 $height 1.75; // 浮点数 $is_student true; // 布尔值 $scores [85, 90, 78]; // 数组 // 使用变量 echo 姓名 . $name . br; echo 年龄 . $age . 岁br; // 修改变量的值 $age 26; // 年龄增加1岁 echo 明年我就 . $age . 岁了; ?口语化解释变量名前面的$符号就像给盒子贴标签号就是把东西放进盒子里。PHP很聪明它会自动判断你放的是什么类型的东西。2.2 数组能装很多东西的大盒子数组特别有用可以一次性管理多个数据?php // 创建数组的几种方式 $fruits array(苹果, 香蕉, 橙子); // 传统方式 $colors [红色, 蓝色, 绿色]; // 简洁方式推荐 // 关联数组带键名的数组 $student [ name 李四, age 20, major 计算机科学 ]; // 访问数组元素 echo 我最喜欢的水果是 . $fruits[0] . br; // 输出苹果 echo $student[name] . 的专业是 . $student[major]; // 遍历数组循环处理每个元素 echo h3所有水果/h3; foreach ($fruits as $fruit) { echo $fruit . ; } ?2.3 条件判断让程序会思考?php $score 85; // if-else 判断 if ($score 90) { echo 优秀; } elseif ($score 80) { echo 良好; // 这里会输出 } elseif ($score 60) { echo 及格; } else { echo 不及格; } echo br; // switch 语句适合多个固定值判断 $day Monday; switch ($day) { case Monday: echo 今天是周一要努力工作; break; case Friday: echo 周五啦周末愉快; break; default: echo 普通的一天; } ?三、Web开发实战让PHP动起来3.1 处理表单数据用户输入创建一个简单的登录表单login.html前端页面!DOCTYPE html html head title用户登录/title /head body h2用户登录/h2 form actionlogin.php methodPOST 用户名input typetext nameusernamebrbr 密码input typepassword namepasswordbrbr input typesubmit value登录 /form /body /htmllogin.php后端处理?php // 获取表单数据 $username $_POST[username]; // 从POST请求中获取用户名 $password $_POST[password]; // 获取密码 // 简单的验证实际开发中要更严格的验证 if ($username admin $password 123456) { echo 登录成功欢迎 . $username; // 设置Cookie记住用户 setcookie(user, $username, time() 3600); // 保存1小时 // 开始Session会话管理 session_start(); $_SESSION[login_time] date(Y-m-d H:i:s); } else { echo 用户名或密码错误; echo bra hreflogin.html返回登录/a; } // 显示接收到的所有POST数据调试用 echo hrh3接收到的数据/h3; echo 用户名 . htmlspecialchars($username) . br; echo 密码 . str_repeat(*, strlen($password)); ?3.2 连接数据库保存数据创建数据库连接?php // 数据库配置 $host localhost; // 数据库地址 $dbname mydatabase; // 数据库名 $username root; // 用户名 $password ; // 密码phpStudy默认空密码 try { // 使用PDO连接数据库更安全、推荐 $pdo new PDO(mysql:host$host;dbname$dbname, $username, $password); // 设置错误模式为异常 $pdo-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo 数据库连接成功br; // 创建用户表 $sql CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); $pdo-exec($sql); echo 用户表创建成功; } catch(PDOException $e) { echo 连接失败 . $e-getMessage(); } ?数据库增删改查CRUD示例?php // 假设已经建立了$pdo连接 // 1. 插入数据Create $sql INSERT INTO users (username, email) VALUES (?, ?); $stmt $pdo-prepare($sql); $stmt-execute([张三, zhangsanexample.com]); echo 插入成功br; // 2. 查询数据Read $sql SELECT * FROM users; $result $pdo-query($sql); echo h3用户列表/h3; while ($row $result-fetch()) { echo ID . $row[id] . | ; echo 用户名 . $row[username] . | ; echo 邮箱 . $row[email] . br; } // 3. 更新数据Update $sql UPDATE users SET email ? WHERE username ?; $stmt $pdo-prepare($sql); $stmt-execute([new_emailexample.com, 张三]); echo 更新成功br; // 4. 删除数据Delete $sql DELETE FROM users WHERE username ?; $stmt $pdo-prepare($sql); $stmt-execute([张三]); echo 删除成功; ?四、实用功能示例解决实际问题4.1 文件上传功能?php // upload_form.html 中的表单 // form actionupload.php methodpost enctypemultipart/form-data if ($_SERVER[REQUEST_METHOD] POST) { $target_dir uploads/; // 上传目录 $target_file $target_dir . basename($_FILES[file][name]); $uploadOk 1; // 检查文件类型 $imageFileType strtolower(pathinfo($target_file, PATHINFO_EXTENSION)); $allowed_types [jpg, png, gif, pdf]; if (!in_array($imageFileType, $allowed_types)) { echo 只允许上传 JPG, PNG, GIF, PDF 文件; $uploadOk 0; } // 检查文件大小限制2MB if ($_FILES[file][size] 2000000) { echo 文件太大不能超过2MB; $uploadOk 0; } // 如果检查都通过保存文件 if ($uploadOk 1) { if (move_uploaded_file($_FILES[file][tmp_name], $target_file)) { echo 文件上传成功br; echo 文件名 . htmlspecialchars(basename($_FILES[file][name])); } else { echo 上传失败; } } } ?4.2 发送电子邮件?php // 使用PHP内置的mail函数发送邮件 $to recipientexample.com; $subject 测试邮件; $message 这是一封测试邮件来自我的PHP程序; $headers From: senderexample.com\r ; $headers . Reply-To: senderexample.com\r ; $headers . Content-Type: text/html; charsetUTF-8\r ; if (mail($to, $subject, $message, $headers)) { echo 邮件发送成功; } else { echo 邮件发送失败; } // 注意mail()函数需要服务器配置SMTP对于更复杂的需求可以使用PHPMailer库 ?五、PHP 8.x 新特性让代码更简洁PHP 8 引入了很多实用的新功能?php // 1. 命名参数调用函数时指定参数名 function createUser($name, $age 18, $country 中国) { return 姓名$name年龄$age国家$country; } // 传统方式 echo createUser(张三, 18, 中国); // PHP 8 新方式更清晰 echo createUser(name: 张三, country: 美国, age: 25); // 2. 构造函数属性提升减少重复代码 class User { // PHP 8 之前 // private string $name; // private int $age; // public function __construct(string $name, int $age) { // $this-name $name; // $this-age $age; // } // PHP 8 新写法一行搞定 public function __construct( private string $name, private int $age ) {} } // 3. match 表达式比switch更强大 $status 404; $message match ($status) { 200 成功, 404 未找到, 500 服务器错误, default 未知状态 }; echo $message; // 输出未找到 ?六、学习路线与实战建议6.1 新手学习路线图# 学习路线时间规划 第1周基础语法 → 变量、数组、流程控制 第2周函数与表单 → 自定义函数、表单处理 第3周数据库操作 → MySQL连接、CRUD操作 第4周项目实战 → 留言板、博客系统 第5-6周框架入门 → Laravel或ThinkPHP基础 第7-8周完整项目 → 用户管理系统、电商网站6.2 避免常见错误?php // 错误示例 vs 正确示例 // 1. SQL注入风险错误 // $id $_GET[id]; // $sql SELECT * FROM users WHERE id $id; // 危险 // 正确做法使用预处理语句 $stmt $pdo-prepare(SELECT * FROM users WHERE id ?); $stmt-execute([$id]); // 2. 未验证用户输入错误 // echo $_GET[content]; // 可能包含恶意脚本 // 正确做法过滤和转义 echo htmlspecialchars($_GET[content], ENT_QUOTES, UTF-8); // 3. 错误处理不足错误 // $result file_get_contents(不存在的文件.txt); // 正确做法使用try-catch try { $result file_get_contents(file.txt); } catch (Exception $e) { echo 读取文件失败 . $e-getMessage(); } ?七、进阶学习资源当你掌握了基础后可以继续学习面向对象编程类、对象、继承、多态MVC架构模型-视图-控制器设计模式常用框架Laravel最流行的PHP框架ThinkPHP国内常用框架Symfony企业级框架API开发使用PHP开发RESTful API性能优化缓存、数据库优化、代码优化安全防护XSS防护、CSRF防护、SQL注入防护实战小项目简易留言板?php // config.php - 配置文件 define(DB_HOST, localhost); define(DB_NAME, guestbook); define(DB_USER, root); define(DB_PASS, ); // 创建留言表SQL // CREATE TABLE messages ( // id INT AUTO_INCREMENT PRIMARY KEY, // name VARCHAR(100) NOT NULL, // email VARCHAR(100), // content TEXT NOT NULL, // created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP // ); // index.php - 显示留言和表单 session_start(); require_once config.php; try { $pdo new PDO(mysql:host . DB_HOST . ;dbname . DB_NAME, DB_USER, DB_PASS); } catch(PDOException $e) { die(数据库连接失败 . $e-getMessage()); } // 处理表单提交 if ($_SERVER[REQUEST_METHOD] POST) { $name htmlspecialchars($_POST[name]); $email htmlspecialchars($_POST[email]); $content htmlspecialchars($_POST[content]); $stmt $pdo-prepare(INSERT INTO messages (name, email, content) VALUES (?, ?, ?)); $stmt-execute([$name, $email, $content]); $_SESSION[message] 留言发布成功; header(Location: . $_SERVER[PHP_SELF]); exit; } // 显示留言 $stmt $pdo-query(SELECT * FROM messages ORDER BY created_at DESC); $messages $stmt-fetchAll(); ? !DOCTYPE html html head title简易留言板/title /head body h1留言板/h1 !-- 留言表单 -- form methodPOST 姓名input typetext namename requiredbr 邮箱input typeemail nameemailbr 留言textarea namecontent required/textareabr button typesubmit发布留言/button /form hr !-- 显示留言列表 -- h2所有留言/h2 ?php foreach ($messages as $msg): ? div styleborder:1px solid #ccc; padding:10px; margin:10px; strong?php echo $msg[name]; ?/strong small?php echo $msg[email]; ?/small small?php echo $msg[created_at]; ?/small p?php echo nl2br($msg[content]); ?/p /div ?php endforeach; ? /body /html学习建议总结动手实践PHP是实践性很强的语言多写代码比只看教程有效理解原理不仅要会写还要理解为什么这样写善用工具使用VS Code或PhpStorm等专业编辑器安装PHP插件查阅文档遇到问题先查PHP官方文档加入社区在Stack Overflow、CSDN、GitHub上参与讨论和学习记住每个PHP高手都是从echo Hello World;开始的。坚持每天写代码两个月后你就能用参考来源PHP新手入门超详细教程小白一看就懂PHP新手入门详细教程从零到入门全程易懂PHP语言从入门到实战完整教程

相关文章:

PHP零起点入门:适合普通学习者的极简教程

PHP从零开始:手把手入门指南与实战教程 PHP是一门专门用于Web开发的服务器端脚本语言,最大特点是能嵌入HTML,上手简单且就业需求大。本文避开复杂术语,用“操作步骤实际代码”带你从0学会PHP,每个例子都能直接复制运行…...

Xinference-v1.17.1应用案例:快速部署LSTM,实现智能金融预测

Xinference-v1.17.1应用案例:快速部署LSTM,实现智能金融预测 1. 金融预测与Xinference的完美结合 在金融数据分析领域,时间序列预测一直是个重要课题。无论是股票价格预测、交易量分析还是风险评估,都需要对历史数据进行建模&am…...

Muse Spark 闭源转型背后的系统化演进:PAO 架构、KV Cache 压缩与聚合接入实践

摘要: Meta 推动 Muse Spark 走向闭源并非一时兴起,其底层所采用的并联智能体协调架构(PAO)标志着大模型由单体推理向系统级协同的跃迁。本文将围绕 Transformer 变体设计、节点调度策略、KV Cache 压缩算法及生产环境调用方案四个…...

Windows 11硬件限制完全绕过指南:3种方法让老旧电脑焕发新生

Windows 11硬件限制完全绕过指南:3种方法让老旧电脑焕发新生 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...

SAM2微调实战:从VOSDataset到BatchedVideoDatapoint,手把手拆解视频分割数据流

SAM2微调实战:从视频数据到模型输入的完整数据流解析 1. 理解视频分割任务的数据挑战 视频对象分割(Video Object Segmentation)任务的核心在于处理时序数据中的空间信息。与静态图像分割不同,视频数据引入了时间维度,…...

如何快速恢复损坏视频:开源修复工具UNTRUNC的完整指南

如何快速恢复损坏视频:开源修复工具UNTRUNC的完整指南 【免费下载链接】untrunc Restore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video. 项目地址: https://gitcode.com/gh_mirrors/unt/untrunc 你是否曾…...

LLM API延迟突增300ms?模型token吞吐骤降?——AI原生可观测性四象限诊断法,15分钟定位GPU显存泄漏+KV Cache膨胀根源

第一章:AI原生软件研发的可观测性实践 2026奇点智能技术大会(https://ml-summit.org) AI原生软件的研发范式正从根本上重塑可观测性需求——模型推理延迟、数据漂移、提示工程异常、向量嵌入分布偏移等新型信号,无法被传统APM或日志监控体系有效捕获。可…...

GD32 USB从机硬件设计避坑指南:F303/E503的1.5K电阻和F4xx的VBUS直连到底怎么选?

GD32 USB从机硬件设计避坑指南:F303/E503的1.5K电阻和F4xx的VBUS直连到底怎么选? 在嵌入式硬件设计中,USB接口的实现往往看似简单,实则暗藏玄机。尤其是面对GD32不同系列芯片时,设计工程师常常陷入"1.5K上拉电阻…...

Ryzen处理器终极调优指南:3步解锁AMD CPU隐藏性能

Ryzen处理器终极调优指南:3步解锁AMD CPU隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...

4D 毫米波雷达在自动驾驶中的数据处理挑战与优化策略

1. 4D毫米波雷达为何成为自动驾驶的"火眼金睛" 第一次拆解4D毫米波雷达时,我被它精密的MIMO天线阵列震撼到了——这个巴掌大的金属板上密布着12个发射器和16个接收器,就像给汽车装上了昆虫的复眼。与传统毫米波雷达相比,4D版本最大…...

3步搞定专业排版:《经济研究》LaTeX模板完整指南

3步搞定专业排版:《经济研究》LaTeX模板完整指南 【免费下载链接】Chinese-ERJ 《经济研究》杂志 LaTeX 论文模板 - LaTeX Template for Economic Research Journal 项目地址: https://gitcode.com/gh_mirrors/ch/Chinese-ERJ 你是否曾经为了论文格式调整而熬…...

数学建模小白避坑指南:线性规划建模时,90%的人都会忽略的3个隐藏约束

数学建模小白避坑指南:线性规划建模时,90%的人都会忽略的3个隐藏约束 第一次参加数学建模竞赛的同学,往往会在线性规划问题上栽跟头——明明按照教材上的"三要素"一步步操作,最后求解结果却和实际场景对不上号。去年校…...

CenterFusion实战:从毫米波雷达与视觉融合到3D目标检测

1. 为什么需要毫米波雷达与视觉融合 在自动驾驶领域,传感器就像车辆的"眼睛"。单一的视觉传感器在光线条件良好时表现不错,但遇到夜间、雨雪天气或强光照射等情况时,性能就会大幅下降。毫米波雷达则不受这些环境因素影响&#xff0…...

美国电车的神话已经破灭,玩人形机器人也救不了它,牛皮破成碎片了

美国电车一季度公布的数据显示,生产了40多万辆车,卖出的车才35万多辆,库存积压了5万辆电车,这与之前它的车按订单生产,一生产出来就被提走形成了鲜明对比,更为惊人的是它的创始人吹嘘的诸多牛皮正一一破灭。…...

移动应用安全新规下,APK加固如何满足等保2.0与个人信息保护法?

随着《网络安全法》、等保2.0标准以及《个人信息保护法》的全面实施,移动应用安全已经从单纯的技术问题,上升为法律层面的硬性要求。APP运营者而言,不满足合规要求,轻则应用下架,重则面临巨额罚款和法律责任。而在所有…...

wechat-need-web:解锁微信网页版访问的终极解决方案

wechat-need-web:解锁微信网页版访问的终极解决方案 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为无法使用微信网页版而烦恼吗&am…...

自动化测试在医疗AI中的实践:Baichuan-M2-32B的pytest框架集成

自动化测试在医疗AI中的实践:Baichuan-M2-32B的pytest框架集成 医疗AI模型在实际应用中,诊断的准确性、响应的及时性以及面对异常情况的处理能力,直接关系到其能否真正为医疗健康领域带来价值。想象一下,一个用于辅助诊断的模型&…...

CHORD-X多风格研报生成效果展:对比券商风、学术风与自媒体风格

CHORD-X多风格研报生成效果展:对比券商风、学术风与自媒体风格 最近在试用各种AI写作工具,发现一个挺有意思的现象:很多模型写出来的东西,风格都差不多,要么是那种很官方的口吻,要么就是一股AI味儿。直到我…...

Pixel Epic · Wisdom Terminal 构建AI Agent:自主任务规划与执行框架

Pixel Epic Wisdom Terminal 构建AI Agent:自主任务规划与执行框架 1. 为什么需要自主规划的AI Agent 想象一下,你有一个能听懂复杂指令、自动拆解任务、调用各种工具完成工作的数字助手。它不仅能回答简单问题,还能处理"帮我分析上季…...

如何通过手机号快速找回QQ号:开源工具的3分钟解决方案

如何通过手机号快速找回QQ号:开源工具的3分钟解决方案 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 在数字生活中,你是否曾因忘记QQ账号而焦急万分?手机更换、系统重装或长期未登录,…...

LeetCode 69. x 的平方根:两种解法详解

LeetCode 上的经典基础题——69. x 的平方根。这道题看似简单,却能很好地考察我们对基础算法的理解,尤其是循环和二分查找的应用。题目要求很明确:给定一个非负整数 x,计算它的算术平方根,返回整数部分(舍去…...

Wan2.2-I2V-A14B网络协议分析:图像生成请求的完整生命周期

Wan2.2-I2V-A14B网络协议分析:图像生成请求的完整生命周期 1. 引言:为什么需要了解网络协议 当你点击"生成"按钮时,Wan2.2-I2V-A14B模型背后发生了什么?作为开发者,理解图像生成请求在网络层面的完整生命周…...

Qwen3-0.6B-FP8快速上手:用Chainlit打造专属聊天机器人实战

Qwen3-0.6B-FP8快速上手:用Chainlit打造专属聊天机器人实战 1. 准备工作与环境检查 1.1 了解Qwen3-0.6B-FP8模型 Qwen3-0.6B-FP8是Qwen系列最新一代的语言模型,采用FP8精度优化,在保持高性能的同时显著降低计算资源需求。这个60亿参数的模…...

STM32上跑矩阵运算老是卡死?可能是你没避开CMSIS-DSP库的这些‘坑’

STM32上跑矩阵运算老是卡死?可能是你没避开CMSIS-DSP库的这些‘坑’ 当你第一次在STM32上尝试使用CMSIS-DSP库进行矩阵运算时,那种兴奋感很快就会被现实浇灭——程序莫名其妙地卡死、计算结果全错,或者性能远低于预期。这不是你的错&#xf…...

VibeVoice语音助手搭建教程:支持10分钟长文本,会议纪要秒变语音

VibeVoice语音助手搭建教程:支持10分钟长文本,会议纪要秒变语音 你有没有过这样的经历?深夜加班整理完一份长达十几页的会议纪要,领导突然发来消息:“小王,把会议重点录个语音版,明早发给团队。…...

解决AI人像风格不稳定:造相-Z-Image-Turbo亚洲美女LoRA实战体验

解决AI人像风格不稳定:造相-Z-Image-Turbo亚洲美女LoRA实战体验 1. 为什么需要LoRA技术? 在AI图像生成领域,风格一致性一直是困扰开发者和用户的难题。传统模型生成的人像往往存在以下问题: 风格漂移:同一组提示词在…...

OBS多平台直播插件:为什么选择obs-multi-rtmp进行同步推流?

OBS多平台直播插件:为什么选择obs-multi-rtmp进行同步推流? 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否曾经想过,如何将你的直播内容同时推…...

ViT图像分类-中文-日常物品实战教程:中文标签本地化翻译与多语言扩展方法

ViT图像分类-中文-日常物品实战教程:中文标签本地化翻译与多语言扩展方法 想用AI模型识别你手机里的照片,却苦于模型只认识英文标签?比如,你拍了一张“包子”的照片,模型却告诉你这是“steamed stuffed bun”。今天&a…...

Krita AI绘画插件终极指南:从零开始掌握AI图像生成艺术

Krita AI绘画插件终极指南:从零开始掌握AI图像生成艺术 【免费下载链接】krita-ai-diffusion Streamlined interface for generating images with AI in Krita. Inpaint and outpaint with optional text prompt, no tweaking required. 项目地址: https://gitcod…...

深入理解分布式唯一ID:从原理到实战,一篇讲透Snowflake

深入理解分布式唯一ID:从原理到实战,一篇讲透Snowflake 一、为什么我们需要“唯一ID”? 先从一个最简单的场景说起:你有一个订单系统,每天产生几百万条订单记录。如果只用数据库的自增主键,当系统拆分成多个…...