# phpstudy **Repository Path**: zhangluoyou/phpstudy ## Basic Information - **Project Name**: phpstudy - **Description**: 用来学习php的每一个步骤 一步一步学习php - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-09-25 - **Last Updated**: 2025-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README PHP语法 == JS语法 == 弱类型脚本语言 JS -> web 由浏览器解析和执行 php -> 服务器端 脚本语言 用服务器软件去解析 phpstudy -> apache mysql php 单引号 双引号 php文件 当中 是 可以嵌套 html代码 php -> apache解析 -> php的内容会翻译成 html + css 返回给用户 echo -> document.write 直接输出到页面上 var_dump -> console.log 打印数据 get -> 会吧数据 全部 放到 url地址上面的 不安全 暴露出来的 传输格式:http://www.demo.com/index.php?参数1=值1&参数2=值2 post -> 会把数据 -> 放到 http的请求头当中去 form-data 选项 软件 拦截 抓包 $_GET $_POST $_REQUEST 获取表单数据 $_FILES 接收文件 $_SERVER 服务器的信息 文件提交条件: 1.post表单 2.表单的媒体类型 enctype 致命的错误 终止程序的运行 非致命的错误 会报错 但是程序依旧往下执行 Parse error: syntax error, 语法解析错误 致命的错误 Notice: Undefined variable: 非致命的错误 数据类型: JS: 字符串、数值、布尔、数组、对象、Null、Undefined PHP: 字符串、数值、布尔、数组、对象、Null、资源型 运算符 JS 和 PHP 运算符是完全一样的 拼接:+ php拼接: . echo 字符串 数值 js array.forEach(callback) php foreach(循环变量 as $key=>$value) var $ php当中 函数不允许重载(重复定义) PHP 和 js 数组的区分 JS数组:[key=>value] 下标只能是 数字 arr.length PHP数组: 索引数组 数组当中所有的元素下标全是数字 ['a','b','c'] 关联数组(JS对象) 他里面数组元素下标不是数字,是字母的 关联数组 ['0' => 'hello', 'nickname' => '张三'] 小皮软件: apache配置文件:httpd.conf php:php.ini mysql: my.cnf 每次建立站点的时候, sites/index.html index.php localhost -> 文件目录 -> 1、localhost 默认站点 开启 目录索引 2、index.html .htaccess nginx.htaccess errors web端文件操作系统:用web网页去管理我们目录里面的文件 文件、文件夹 filesystem/ demo/ 这个目录就是我们需要读取和操作的目录 index.php 页面的程序 is_dir(完整路径) is_file() 创建文件夹:mkdir(文件夹名称, 0777, true); 编辑文件夹:rename(旧的名称, 新的名称); 删除文件夹:rmdir(删除的路径); 创建文件:file_put_contents("文件路径", "写入的内容"); // file_get_contents()从文件里面读取内容 编辑文件:rename(旧的名称, 新的名称); 删除文件:unlink(删除的路径) unset删除变量 文件上传 1、表单的设置 method="post" enctype="multipart/form-data" 2、$_FILES['input的名字'] name: 文件名字 type: 类型 error: 错误 0 没有错误 size:上传文件大小 字节单位 tmp_name: 服务器存放该文件的目录 php.ini php的配置 file_uploads = On 是否允许HTTP文件上传 upload_tmp_dir = 文件上传时存放文件的临时目录 upload_max_filesize = 32M 允许上传的文件的最大尺寸。 max_file_uploads = 20 上传个数的限制 post_max_size 控制POST方式提交数据php所能够接收的最大数据量; memory_limit 指定单个脚本程序可以使用的最大内存容量; max_execution_time 此指令确定php脚本可以执行的最长时间,以秒为单位,默认为30秒; 文件上传的新的两个函数 is_uploaded_file 判断文件是否是通过http post上传 move_uploaded_file 将文件进行移动 但是他也有判断文件是否合法的功能 1、复选框勾选批量删除文件夹和文件(递归) 2、文件夹统计大小(递归) 3、多文件上传 JS 和 PHP 相同的部分 1、元字符 * + ? [] ^ $ | {2,3} [0-9] 2、预定义字符 \d = [0-9] \D = [^0-9] \s \w 3、模式修正符 i 不区分大小写 m将匹配的内容看做为多行 s匹配换行符 x模式中的空白可以忽略不计 读取和写入内容 file_get_contents 读取文件的内容 读取网站链接的内容 file_put_contents 写入文件的内容 将小说的内容拿到 放到txt文件里面去 写入 file_put_contents 采集步骤: 1、要明确要获取的内容结果是什么(要知道,先采什么后采什么) 2、采集前确认好对方的网站的编码是什么,要统一 3、从页面中找出你要匹配的唯一仅有一个存在的html片段 4、你所匹配的内容中 不能提早出现结束标记,否则结果不完整 --------------------------------------------------------------------- 公司通讯录:要能够记录公司所有的员工信息,员工的所在部门和职位。个人信息要有昵称、年龄、手机号、地区、头像等信息 实体都有哪些: 部门 pre_department 主键 id int 不为空 自增 部门名称 name 职位 pre_job 主键 id 职位名称 name 员工 pre_person 主键 id 昵称 nickname 手机号 mobile 邮箱 email 头像 avatar 所在地区 address 入职时间 createtime 所属的部门ID 1(技术部) 关联字段(外键)department_id(depid) 所属的职位ID 2(后端) 关联字段(外键)job_id(jobid) 如何找实体 1、必须要真实存在 2、要具备多个属性(描述实体特征信息,信息一定要从需求里面找) 3、要具备多条数据(表里面可能会有多条数据) --------------------------------------------------------------------- 建立数据库的步骤: 1、挑实体(数据表)和属性(表里面的字段) 2、建立表与表之间的关系 --------------------------------------------------------------------- Mysql数据库(关系型数据库) mongodb(非关系型数据库) 数据库(编码) company(utf8) 数据表(表类型、表的关系、索引、事务、主外键) 数据记录(表里面的数据) 数据字段 数据类型/数据属性 --------------------------------------------------------------------- 索引:保证唯一性、加快数据的搜索速度 唯一索引(主键):唯一性 普通索引:提高搜索速度 全文索引:对内容词条进行索引 主键 与 外键 主键 == 外键 主键(主索引):保证唯一性 外键(普通字段):关联一个数据表的字段 外键字段 一定要与 主键字段的属性一致 索引 == 外键 命名 索引:key_表名_字段 外键:fk_表名_字段 如果想给某个字段添加外键 那么一定是先需要设置索引 --------------------------------------------------------------------- 数据表的关系: 1:1 1对1 例如:一个人对应一个座位 1个人对应一张票 1个人对应一个身份证 1:n 1对多 例如:一个教室对应多个学生 一个部门对应多个员工 n:m 多对多 例如:课程与学生 一个学生可以报多个课程 一个课程可以有多个学生 1对1:A表主键 == B表主键 id == id 1对多:将1里面的主键 放到多里面做外键 部门1和员工n: 1对多 1个部门有多个员工 员工和部门: 1对1 一个员工属于一个部门 职位和员工:1对多 1个职位有多个员工 员工和职位:1对1 1个员工所属一个职位 教室和学生:1对多 1个教室有多个学生 学生和教室:1对1 1个学生只能同时在一个教室里面 n:m 多对多 将两张表的主键挑出来 放到第三张表(关系表)里面做外键 --------------------------------------------------------------------- 工具: mysql.exe phpmyAdmin图形化web的数据库管理工具 navicat客户端软件:连接本地、线上 0、分析项目需求(客户提出来) 1、做出来响应式界面模板(前端) 2、设计数据库(后端) --------------------------------------------------------------------- 表类型:MyISAM/Innodb/MEMORY(内存表) 一旦关闭数据库 重启 里面的数据直接没了 Innodb: 4个特点 支持事务: 多个操作集中完成 如果其中有一个错误了就会进行自动回滚 外键约束 主键(123)==外键(123) 不可能出现4 行级锁定 id = 1 A在操作 B也在操作的话 那么他是操作不成功 崩溃恢复 重启之后会将崩溃的表自动恢复到崩溃的前一次 --------------------------------------------------------------------- 字段类型: 整型:tinyint smallint mediumint int bigint 浮点类型:float double decimal 字符串类型:CHAR VARCHAR TINYTEXT TEXT MEDIUMTEXT LONGTEXT CHAR 0-255字节 char(50) 20 50 定长 VARCHAR 0-255字节 char(50) 20 20 不固定 中文字:utf-8 一个中文字 占 3个 gbk 一个中文字 占2个 时间类型: date time datetime timestamp year --------------------------------------------------------------------- 字段属性: Not Null 不为空 PRIMARY KEY(PK) 主键 UNSIGNED 非负 无符号 AUTO_INCREMENT 自增 default 默认值 COMMENT 备注 CREATE TABLE `company`.`无标题` ( `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(255) NULL COMMENT '部门名称', PRIMARY KEY (`id`) ) ENGINE = InnoDB COMMENT = '部门表'; 部门表 innoDB id name 1 技术部 2 行政部 员工表 innoDB id name depid 1 张三 1 2 李四 1 3 小红 2 id(主键) == depid(外键) 如果大家要是选择往后端发展的话,那么会建数据库这个必须是一定得 --------------------------------------------------------------------- 1、将增删查改 封装成函数 2、将增删查改 封装成面向对象类 数据库类 --------------------------------------------------------------------- 1:正常 0:禁用 cookie(不安全会泄露) 基于web浏览器存放在(客户端)电脑上的一个txt文件 session(安全不会泄露) 基于cookie来存储的一种缓存方式 存放缓存是放在服务器上的 开启会话的同时会在本地客户端创建一个唯一的cookie 用来保证当前会话的有效期:PHPSESSID 前台的会员用户: 用户量大 100w cookie 设置cookie: setcookie 获取cookie: $_COOKIE 后台的管理员用户: 用户量少 20个 session 会话的 开启会话:session_start() 存放session: $_SESSION['存放session key'] = '存放的 session的值' 获取session: $_SESSION 删除session: unset($_SESSION['key']); 清空:session_unset() 有效的 销毁:session_destroy: 清空 + 关闭会话 我想知道 session 存放在服务器的哪个目录 看谁: $_FILES['photo']['tmp_name'] 文件上传所存放的临时目录 配置文件 php.ini 首页 上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页 尾页 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 当前第1页 根据 总页数 和 分页的值 去输出一个 分页的html结构 每页显示2条数据 LIMIT 开始查询的位置,查询几条 第1 0,2 第2 2,2 第3 4,2 $start = ($page - 1)*$limit;