php综合

Apache配置php
1.Httpd.conf将PHP加载进来
LoadModule   php5_module  “路径:PHP为apache提供的接口dll”

2.Apache需要分配工作给PHP模块: 通过文件名字的后缀名: .php
AddType  application/x-httpd-php.php

3.使用开发模式的配置文件: 复制一份,重命名为php.ini

4.可以使用phpinfo函数来查看配置文件是否加载.

5.在apache指定php.ini所在的路径即可.
PHPIniDir   “php.ini所在的文件夹”

6.PHP默认没有指定时区, 服务器在解析的时候不会有时区,走默认时区UTC: 需要改变时

区timezone. 在php的配置文件中: php.ini

*******************************************************************

php操作数据库
1.在php.ini的文件中开启扩展
;extension=php_mysql.dll    把分号去掉就是开启

2.指定php_mysql.dll的路径
extension_dir='绝对路径'

3.测试
查看函数phpinfo();

4.php操作mysql
a.连接mysql
mysql_connect('主机名','账号','密码');

b.发送sql指令
mysql_query('sql语句');        返回的是true或false,或者是资源结果集

c.解析结果集
mysql_fetch_row('获取结果集的变量')    返回的是一个索引数组

d.关闭连接
mysql_close(连接mysql的变量[a部分的])

*******************************************************************

虚拟主机

Httpd.conf是apache的主配置文件: 专门用来加载配置项. 一个项目中可能有多个虚拟主

机, 会将虚拟主机的配置额外的存放一个文件中,使用httpd.conf将配置文件引入即可.

Httpd_vhosts.conf

httpd.conf主配置必须引入虚拟主机配置文件
include conf/extra/httpd-vhosts.conf

增加权限处理
权限处理在apache中都是针对文件夹

<Directory 具体路径>
#权限处理顺序
Order Allow,Deny            #两个值可以互换
Allow from all                #允许所有的人访问(没有限制)
Deny from 192.168.25.*        #拒绝局域网25段
Allow from all                #没有效果: 在deny规则之后不允许再读
</Directory>
*******************************************************************

定义常量
使用define和const
define('常量名','值');
const 常量名=值;

常量访问
constant('常量名')    可以访问特殊字符常量

系统常量

$_SERVER    保存访问了服务器的地址
$_GET        接收浏览器以get方式提交的数据
$_POST        接收浏览器以post方式提交的数据
$_SESSION    会话技术的一种, session技术开启之后所有的数据都会保存到

$_SESSION中
$_COOKIE: 会话技术的一种, 浏览器携带了cookie数据给服务器之后,都会存放到

$_COOKIE中
$_FILES: 当有文件上传到服务器的时候,文件的临时信息全部保存到$_FILES中(一定是二

维数组)
$GLOBALS: 存放所有的全局变量
$_REQUEST: 存放浏览器提交的所有数据(不论get还是post): 不怎么安全(数据覆盖)
$_ENV: 环境变量数组(默认全部为空), 需要打开配置文件中的配置项
PHP_OS: PHP运行所在操作系统的内核信息
PHP_VERSION: 当前PHP的版本信息
PHP_INT_SIZE: PHP中int类型所占用的字节数
PHP_INT_MAX: PHP中整型所能表示的最大值

魔术常量
__FILE__    获取当前脚本的绝对路径(包括文件名)
__DIR__        获取当前脚本的绝对路径(不包括文件名)
__LINE__    获取当前行号
__FUNCTION__    只能在函数内部使用,获取函数的名字
__METHOD__    只能在方法内部使用,获取方法的名字

*******************************************************************

变量传值
$变量1=$变量2;        值传递
$变量1=&$变量2;        引用传递

可变变量
一个变量的值等于另一个变量的名
$变量1=值;
$变量2=‘变量1的名字’
访问方法$$变量2;
*******************************************************************

php的基本数据类型
基本类型有四小类:整型,浮点型,布尔型和字符串型
整型

浮点型
精度在计算机中分为两种: 单精度和双精度(但是在PHP中,虽然使用float,但是实际是

double:PHP中只有双精度)
单精度: 使用float表示, 在计算机中使用4个字节进行数据存储,精度范围是7位左右, 但

是能够表示的数值区间是10^32左右
双精度: 使用double表示,在计算机中使用8个字节进行数据存储,精度范围是15位左右,能

表示的数值区间是10^308

布尔类型
布尔:bool或者boolean,结果只有true和false

字符串类型
给变量的值带上单引号或双引号都是字符串类型

单引号与双引号的区别
各自的转义符号不一样: 特殊符号无法直接显示,需要转义字符反斜杠: \
单引号: \\, \’
双引号:\\, \”, \$, \r, \n, \t

复合数据类型【数组和对象】
*******************************************************************


算术运算符
算术运算: 基本运算符: +, - , * , / , %
注意: /和%运算, 除数(分母)不能为0

错误抑制符
错误抑制符: 抑制错误,不让错误表现出来.
错误抑制符号: @,在可能出现错误的语句之前使用@符号即可.
错误抑制符不能抑制fetal error(致命错误)

赋值运算符
赋值运算: 将右边的结果保存到左边的变量中.
赋值运算符: =, +=, -=, *=, /=, %=, .=
=: 将右边的结果直接赋值给左边
*=: 复合赋值, 先将左边的变量里面保存的值取出来与右边的结果进行相应的运算(+/

-/*/ / /%/.),最后将结果重新赋值给左边的变量.

比较运算符
比较运算: 进行数据的对比, 不需要用户额外的处理,系统会自动的转换成同种类型进行

比较. 比较的结果只有两种: true和false

比较运算符: ==, >,>=,<,<=,!=,===,!==
==: 比较两个数据的值是否相等
===: 全等,要求比较的数据本身类型完全相同

逻辑运算符
逻辑运算: 是一种针对结果的运算(针对布尔进行运算)
逻辑运算符: 逻辑与(&&),逻辑或(||)和逻辑非(!)
逻辑与: 左边的结果与右边的结果同时成立(都为true),结果才为真,否则都为假

三目运算符
三目:也称之为三元, 在一次运算中会出现三个表达式:但是只会执行两个
三目运算: 是一种简化的if判断

返回结果 表达式1 ? 表达式2 : 表达式3;
如果表达式1成立,执行表达式2;否则执行表达式3: 表达式1一定执行,表达式2和表达式3

选择性执行其中一个.

连接运算符
连接运算: 是php中为字符串的合并提供的一种运算方式.
连接运算符: ‘.’

系统只要一碰到‘.’ ,不管前后是什么数据,都会变成字符串来操作

自操作: 自己操作自己
自操作运算符有两种: ++和--
++: 自己加1
--: 自己减1

位运算符
位运算: 直接深入到二进制运算, 位上只有两个值0和1(不强制要求所有人掌握)
位运算符: 按位与(&),按位或(|),按位异或(^),按位取反(~),按位右移(>>),按位左移

(<<)
位运算: 要求将所有的数据先转成二进制才进行运算(辗转相除法,指数法)

*******************************************************************

分支结构
if分支
if(条件表达式){
    //条件成立时执行的语句
}elseif(条件表达式){
    //在上个条件不成立的前提下这个条件表达式成立则执行的语句
}else{
    //上面条件都不成立是执行的语句
}

switch分支
switch分支也是针对某个条件进行判断: 针对固定值进行(不会使用比较),只有想等比较
switch(条件变量){
    case 值1:<=如果值等于这个值就匹配
        //匹配是执行的代码
        break;//结束下面的代码,如果不结束后面的不用判断直接执行
    case 值2:<=如果值等于这个值就匹配
        //匹配时执行的代码
        break;//结束下面的代码,如果不结束后面的不用判断直接执行
    default://以上都不满足是匹配
        //要执行的代码
        break;【可加可不加因为后面没了】
}

*******************************************************************

foreach循环
foreach是用来遍历数组的
foreach(数组名 as 【用来保存下标的变量名】=>用来保存值的变量名){
    //循环体里要执行的代码
}

for循环
for($i=1;$i<10;$i++){<=这样用
    //循环体里要执行的代码
}

while循环
$i=1;
while($i<10){
    //循环体里要执行的代码
$i++;
}

*******************************************************************

function 函数名(形参1,&形参2(引用传值),形参3=10(默认值 如果没有传值进来则使

用默认值)){
    //函数体里要执行的代码
}
调用函数
函数名(实参1,实参2,【实参3】,实参4(不会报错,不过实参4不会被接收))
实参不能比没有默认值的形参少

跨‘域’访问
$i=10;
function 函数名(){
    echo $GLOBALS['i'];
}

*******************************************************************

静态变量
定义静态变量
static 变量名=值;

匿名函数
匿名函数: 没有名字的函数.

通过变量来保存函数的内存地址
$变量名 = function(参数列表){
//函数体
//返回值
};
*******************************************************************

数据类型验证
is_bool:判断是不是布尔类型
is_float:判断是不是浮点型
is_integer:判断是不是整型
is_object判断是不是对象
is_array:判断是不是一个数组
is_string:判断是不是字符串
is_resource:判断是不是一个资源
is_scalar:判断是不是变量数据类型(四种基本类型)
is_null:判断是不是空
is_numeric判断是不是数值

gettype(变量名)    //获取数据的类型,
settype(变量名,要转换的类型)    //设置类型,强制转换数据本身

自动转换
碰到条件判断: 系统会自动转换成布尔结果
碰到.运算符: 系统会自动将数据转换成字符串
碰到算术运算符: 系统会自动将数据转换成数值

强制转换
(int)变量名    //强制转换成整型
(integer)变量名    //强制转换成整型
(bool)变量名    //强制转换成布尔
(boolean)变量名 //强制转换成布尔
(float)变量名     //强制转换成浮点
(string)变量名    //强制转换成字符串
(array)变量名    //强制转换成数组
(object)变量名    //强制转换成对象

*******************************************************************

文件引入
include和include_once,require和require_once
include ‘文件路径’;    //四个都一样
*******************************************************************

系统函数
字符串函数
strlen        //获取字符串长度
substr(要截取的字符串,起始下标,【截取长度(省略截取到最后)】)        //字符

串截取
Strtolower()     全部小写
Strtoupper()     全部大写
Ucfirst()     首字母大写
strrev()    字符串反转最前变最后,第二变倒数第二....
Strchr()     字符串截取,不同于substr的是直接截取到最后(从左边开始)
strrchr()    从右边开始
trim(变量名,【'指定字符'】)        默认取出两边的空格也可以去掉两边指定的

字符串
str_repeat('要重复输出的数据',3(次数))    //重复输出指定字符
*******************************************************************

时间日期函数
time()获取一个当前时间的时间戳,从格林治时间开始
date()将一个时间戳转换成指定格式的时间
Strtotime(): 将一个时间字符串(可以是英文描述)转换成时间戳
Microtime(): 获取一个微秒时间
*******************************************************************

数学函数
abs()        //绝对值
floor()        //向下取整
Ceil()         //向上取整, 获取一个比当前数值大的最小整数
Round()     //四舍五入
Rand()         //获取一个指定区间的随机整数
mt_rand()    //获取一个指定区间的随机整数

*******************************************************************

数组
定义数组
$arr=array(【 下标1 => 】值1,【下标2 => 】值2);
$arr[]=值;
访问数组
变量名[下标];

数组函数
end:将指针移到最后一个元素,并返回最后一个元素的值
reset:将指针移到首位
Prev: 指针上移,并返回上一个元素的值
Next: 指针下移,并返回下一个元素的值
Key: 获取当前指针所在位置的元素下标, 如果不存在返回null
Current: 获取当前指针所在位置的元素值,如果不存在返回false
array_keys:获取一个数组中所有的元素下标
array_values:获取一个数组中所有的元素值

array_shift()从数组的头部(左边)取出元素
array_unshift()从数组的头部添加元素
array_push()从数组的尾部(右边)添加元素
array_pop()从数组的尾部弹出元素
数组字符串转换
explode('指定字符',变量名)    //将字符串以指定支付拆分成数组
implode('指定字符',数组名)    //将数组以指定字符隔开形成一个字符串
*******************************************************************

验证码制作
range()    产生一个指定范围内的数组,按照ascll编码表
例:range(‘a’,‘z’)
合并对应的数据源: array_merge: 合并数组,而且会重新更新下标
Array_rand数组获取到的数据会自动排序: 升序排序: 应该讲数组里面的顺序给打乱:

shuffle(): 打乱数组中元素的顺序

*******************************************************************
复选框传值
复选框: checkbox
服务器因为同名问题覆盖原始数据,而浏览器不区分是否同名: PHP有一个特点: PHP只要

见到[]就会当做数组处理: 如果中括号内部没有内容,系统自动添加索引下标使其变得不

一样: 给checkbox的name属性增加[]

*******************************************************************

文件上传条件
1.服务器允许用户上传文件apache不能处理文件:php才能处理(在php.ini文件中

file_uploads=on(开启)/off(关闭))
2.文件上传到服务器之后保存到什么位置(在php.ini文件中upload_tmp_dir=‘临时保存

路径’)
3.浏览器需要上传条件
a)浏览器需要表单:from,只能post提交
b)表单中必须使用文件上传表单域<input type='file'/>
c)文件是二进制数据: 但是表单默认只能提交字符流数据: 如果要实现提交,需要告诉浏

览器: 当前内容中有二进制数据, 需要在表单中增加一个文件上传的属性: enctype=”

multipart/form-data”

*******************************************************************

PHP接收文件
如果文件上传的表单域存在: 但是没有给form增加enctype属性: 文件不可能上传, 但是

表单可以上传: 上传的数据很明显会被$_POST接收.
PHP中接收文件上传信息: 由$_FILES超全局预定义变量实现
之所以看不到文件: PHP没有处理,就会被系统回收: 系统在PHP脚本执行结束,php没有处

理,操作系统自动回收: 如何让脚本执行周期变长?
Sleep(10): 休息10秒
移动文件
PHP提供了一个系统函数能够移动文件(专门移动上传的文件)
Move_uploaded_file(临时文件路径, 目标路径);    //两个路径都带文件名(copy())

*******************************************************************

文件操作
路径操作
对路径(文件夹)进行增删改查(CRUD)
C: create 新增
R: read/retrive 读取
U: update 更新
D: delete 删除

读取路径
1.获取路径资源:resource opendir(路径)    //相对和绝对都可以
2.获取资源中的数据:string readdir(路径资源):资源操作是指针操作,读取一个只后

就会下移,如果读到最后,返回false
3.遍历读取整个文件夹:readdir+循环
4.重置指针:rewinddir(路径资源)
5.关闭资源:closedir(路径资源)

路径相关函数
file_exists:判断一个文件是否存在
is_dir:判断路径是否有效
if_file:判断文件是否有效
mkdir:mk:make,创建路径(文件夹)
rmdirremove,删除路径
Getcwd: cwd: current work directory 当前工作目录: 获取当前工作目录(运行脚本所

在的路径)
chdir改变当前工作路径

文件夹读取
array scandir(有效路径)    //返回一个数组

文件操作(高级版)
文件读操作
file_get_contents('文件路径')
\r:回车,回到当前行首
\n:新行,到下一行

文件写操作
file_put_contents(目标文件,要写入的内容【,写入方式】)//没有目标文件可以新创

一个文件保存
写入方式
FILE_USE_INCLUDE_PATH:覆盖(默认)
FILE_APPEND:追加

文件操作(低级版)
读操作
1.打开文件资源:
fopen(文件路径,‘操作模式’)
操作模式
'r'只读,指向文件头
'r+'读写,指向文件头
'w'清空在写入,没有则创建
'w+'清空再写入,没有则创建
'a'写,指向文件尾
'a+'读写,指向文件尾
2.读取数据
fgetc(文件路径)        //c代表character,一次读取一个字节
fgets(文件路径,‘指定字符个数’)        //s代表string,一次读取指定长

度的字符串或者一行(最多读取一行)
3.关闭资源
fclose(资源变量)

写操作
使用读写方式打开资源: w+
写操作: fputs/fwrite(资源,要写的数据);
读取数据
当前模式是读写模式: 一上来就清空了所有数据, 然后重写: 写一个指针下移一个: 当写

完之后指针在文件的最末尾: 永远读到false: 需要重置指针: fseek(资源,指针位置);

文件操作相关函数

copy(‘被复制文件’,‘复制到的文件’)    //复制文件
unlink(‘文件’)        //删除文件
rename(文件旧名,文件新名)    //重命名
filemtime('文件')        //获取文件最后修改时间
filesize('文件')        //获取文件大小


*******************************************************************

PHP下载

PHP要实现下载需要解决一个问题: 浏览器不要解析
Header(‘Content-type:application/octet-stream’);    //header之前不要输出内


将文件读取内存,输出给浏览器: echo
解决文件名字问题: 服务器要告诉浏览器,建议用什么名字保存文件.
Header(‘Content-disposition:attachment;filename=建议的名字’);

*******************************************************************

数据库操作
创建数据库
create database 数据库名字【库选项】
库选项: 用来约束数据库, 分为两个选项
字符集设定: charset/character set 具体字符集(数据存储的编码格式): 常用字符集:

GBK和UTF8
校对集设定: collate 具体校对集(数据比较的规则)

查看数据库
show databases    //查看所有数据库

更新数据库
alter database 数据库名字 【库选项】
Charset/ character set 【=】 字符集

删除数据库
drop database 数据库名字

进入数据库
use 数据库名字

表操作
创建数据表
create table 表名(
字段名字 数据类型,
字段名字 数据类型    -- 最后一行不需要逗号
)【表选项】;

查看数据表
show tables     //查看所有数据表
show create table 表名        //查看表创建语句

查看表结构:查看表中的字段信息
Desc/describe/show columns from 表名;

修改数据表
修改表名:rename table 旧表名to新表名
Alter table 表名 表选项 值;

修改字段
alter table 表名 add 字段名 数据类型 【列属性】【位置】
first:最前
after 字段名 在哪个之后

重命名字段
alter table 表名 change 旧字段 新字段名 数据类型 【属性】【位置】

删除字段
alter table 表名 drop 字段名;

删除数据表
drop table 表名1,表名2.....

新增数据
方案1:insert into 表名 values(值列表),(值列表)
方案2:insert into 表名(字段列表) values(值列表)

查看数据
select */字段列表 from 表名【where条件】

更新数据
update 表名 set 字段 = 值 【where条件】 【limit 更新数量】

删除数据
delete from 表名 【where条件】【limit 删除数量】


设置当前窗口字符集
set names 字符集

列属性
列属性: 真正约束字段的是数据类型, 但是数据类型的约束很单一. 需要有一些额外的约

束, 来更加保证数据的合法性.

列属性有很多:
NULL          可以为空
NOT NULL    不能为空
default        用于默认值
Primary key    主键
unique key    唯一键
auto_increment    自增长
comment        别名

蠕虫复制
表创建高级操作: 从已有表创建新表(复制表结构)
Create table 表名 like 数据库.表名;

蠕虫复制: 先查出数据, 然后将查出的数据新增一遍
Insert into 表名[(字段列表)] select 字段列表/* from 数据表名;

空属性
两个值: NULL(默认的)和NOT NULL(不为空)
查询数据
基本语法
Select 字段列表/* from 表名 [where条件];

完整语法
Select [select选项] 字段列表[字段别名]/* from 数据源 [where条件子句] [group by

子句] [having子句] [order by子句] [limit 子句];

Group by子句
Group by:分组的意思, 根据某个字段进行分组(相同的放一组,不同的分到不同的组)

Having子句
Having子句: 与where子句一样: 进行条件判断的.

Order by子句
Order by: 排序, 根据某个字段进行升序或者降序排序, 依赖校对集.

使用基本语法
Order by 字段名 [asc|desc]; -- asc是升序(默认的),desc是降序

内连接
基本语法
左表 [inner] join 右表 on 左表.字段 = 右表.字段; on表示连接条件: 条件字段就是

代表相同的业务含义

外连接
外连接: outer join, 以某张表为主,取出里面的所有记录, 然后每条与另外一张表进行

连接: 不管能不能匹配上条件,最终都会保留: 能比配,正确保留; 不能匹配,其他表的字

段都置空NULL.

外连接分为两种: 是以某张表为主: 有主表
Left join: 左外连接(左连接), 以左表为主表
Right join: 右外连接(右连接), 以右表为主表

基本语法: 左表 left/right join 右表 on 左表.字段 = 右表.字段;

php操作mysql
1.连接认证
mysql_connect('主机名包含端口','用户名','密码')

2.php接收结果
mysql_query(sql语句)    //返回的是结果集

3.php没有办法直接使用结果集
mysql_fetch_array(结果集【,设置索引/关联】):默认获取混合数组,一组关联一组索


索引数组:MYSQL_NUM
关联数组:MYSQL_ASSOC

mysql_fetch_assoc(结果集)    //直接获取关联数组
mysql_fetch_row(结果集)        //直接获取索引数组
4.重置指针
mysql_data_seek(结果集资源,0)
 
写操作
mysql_errno()获取错误编号

mysql_affected_rows()获取上次操作的受影响的行数(新增也有)


addslashes(数据变量)   //防SQL注入

数组字符串转换函数
Explode: 爆炸, 将字符串按照某个指定的规则,进行分开, 变成一个数组
Implode: 聚合, 将数组的元素按照某个指定的规则进行拼接,变成字符串
basename(具体url)    //只获取文件名



魔术方法
__construct()    //当对象被创建出来(new)之后, 对象会立即自动调用的方法
__destruct()    //当对象被销毁之前, 对象会自动调用的方法
__tostring()    //当对象被当做字符串处理的时候,会自动触发的方法.
__clone()    //当对象被克隆出来之后, 新的对象会自动调用的方法.
__set()        //设置属性,当对象去设置一个不存在的或者权限不够的属性的时候会

自动触发的魔术方法
__get()        //获取属性,当对象去访问一个不存在的或者权限不够的属性的时候会

自动触发的魔术方法
__isset()    //判断属性是否存在:当外部使用isset函数或者empty函数去判断一个

不存在或者说权限不够的属性的时候会自动触发的魔术方法
__unset: 销毁对象中的属性: 当对象调用unset函数来删除不存在的或者权限不够的属性

的时候会触发


魔术函数
__autoload($a)    //自动包含文件




图片函数
imagecreatetruecolor(宽,高) //制作画布
imagecolorallocate(图片资源,红,绿,蓝)RGB格式   //设置颜色
imagestring(图片资源,字体大小(1-5),起始x轴,起始y轴,'内容',颜色)//插入数据
imagefill(图片资源,起始x轴,起始y轴,颜色)//设置画布背景颜色
imagettftext(图片资源,字体大小,扭曲度,起始x轴,起始y轴,颜色,字体文件,数据)//插

入中文
imagecreatefromjpeg(图片路径)//获取原图片资源
getimagesize(图片路径)//获取图片的基本信息
imagecopyresampled(缩略图资源,原图资源,缩略图起始位置x,y,原图起始位置x,y,缩略

图宽,高,原图宽,高)    //生成缩略图
Imagecopymerge(原图资源,水印资源,原图X,原图Y,水印X,水印Y,水印宽,水印高,透明度)

生成水印图


会话技术
setcookie(名字,值【生命周期,作用范围】)    //设置cookie

session_start()        //激活session机制
session_destroy()    //session清除
session_name()        //获取session名字
session_id()        //获取sessionid

session_set_save_handler(打开,关闭,读取,写入,销毁,回收)    //Session系统给外部用

户(程序员)提供了一个操作接口: 允许修改内部的机制: 需要用户在外部定义6个函数,然

后通过该接口植入到session机制内部: 当session运行的时候,就会在必要的时候,启用外

部的函数来实现某些特定的功能.

mysql扩展
replace into 表名【(字段列表)】 values(值列表);     //当唯一键冲突时用来插入的语



*********************************************************
PHP的JSON

在PHP中,提供了两个函数实现对JSON的生成与解析。
1)json_encode(数组或对象) :把一个数组或对象生成JSON数据
2)json_decode(JSON格式的数据,$flag) :把一个JSON格式的数据反转义为数组或对象
参数说明:
JSON格式的数据:在PHP中,JSON就是一个字符串,只是格式与JSON一致。
$flag:如果为true,转化生成数组。反之,生成对象,默认返回对象。
我们在定义数组转化生成JSON对象时:
必须是一个关联数组:生成{}形式的JSON数据,如果时一个索引型数据,其通过

json_encode就会转化生成一个[]形式的数组字符串。

*******************************************************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值