1.1
端口号占用情况查询
运行->cmd->netstat -ano
提示:不是内部或外部命令,也不是可运行的程序或批处理文件
cd c:\WINDOWS\system32
然后再输入neistat -ano
端口号:每个端口号对应一个功能
80端口由WEB使用;
21端口ftp(网站做好后上传到服务器)使用;
25端口邮件服务器使用。
1.2.BS与CS架构
BS架构(B:brower 浏览器 S:server 服务器)
通过浏览器访问服务器
eg:163 搜狐
CS架构(C:client S:server)
通过客户端访问服务器
eg:qq mysql数据库
1.3.前台与后台
后台页面操纵前台,后台操作者使用对数据进行增删改,前台浏览者所看的界面。eg:个人信息页面,更改信息的页面是后台,别人看到的页面是前台。
1.4.Apache的安装
语言的运行需要环境
Apache为php的运行提供了环境。
2.1 php
2.1.1
' '单引号不解释变量,不转义\n,\t等
" "双引号可用来解释变量
/转义 可用来转义/ '等浏览器无法识别的特殊字符
2.1.2
变量与字符串的一起使用时通过'.'来拼接起来
当变量与字符串在双引号内同时使用时用{}将变量包住从而调用该变量
在双引号中插入变量时在后面加入空格或者,
2.1.3
echo gettype()来获得变量的类型;var_dump();输出值还有类型
转义函数 函数类型+val eg:intval floatval
将Null转换为字符串 结果为空
判断数据类型的函数:is_ + 数据类型。eg:is_array is_string
2.1.4
define 对变量进行赋值且无法被改变
define('ABC' , 'abc');
echo ABC;
//常量为大写
在define的赋值中true代表1,false代表0
判断一个标量是否被定义过通过:
defined(ABC);
判断系统常量:
echo _FILE_;
//获取当前文件的名字
判断代码在第几行:
echo __LINE__;
获取php版本:
echo PHP_VERSION;;
获取函数名:
echo __FFUNCTIONG__;
获取当前成员方法名:
echo __MHTHOD__;
获取当前命名空间的名字:
echo __NAMESPACE__;
获取当前TEAIT名字(多继承):
echo __TRAIT__;
获取当前类名:
echo __CLASS__;
抽取随机数:
echo mt_rand(1,6);
//抽取1-6的随机数;
2.1.5 函数
函数以function开头
限制返回值在函数后加 :类型
function sum($num1,$num2):float,string等
{
return $num1+$num2;
}
通过'...'来传输变量
function test(...$arr)
{
var_dump($arr);
}
test('abc',1,2,3,'bb');
//将以数组的形式传输
匿名函数
$test=function(){
echo '匿名函数';
}
$test;
2.2.1文件的引入
1.通过include去引入
include('2.php');
2.require同样可以引用
require('2.php')
include与require的区别:当文件报错时include可继续执行,require无法继续执行。
3.include_once仅执行一次
4.require_once仅执行一次
eg:无法使用多次include或者require
而include_once等可以
2.3.1数组的特殊赋值
1.索引数组
$arr=['3'=>'a','b','c','d'];
//这样是从3开始往后存
2.关联数组
$arr=[
'java'=>'a',
'html'=>'b',
];
3.二,三维数组
$arr=[
'php'=>[
'html',
'js',
'css' => [
'qaq' //三维数组
]
]; //二维数组
'java' , //一维数组
'ccc'
];
4.增加
$arr=['a','b','c','d'];
$arr[4]='这是新添加的';
5.删除
通过unset函数
$arr=['a','b','c','d'];
unset($arr[2]);
6.修改
$arr=['a','b','c','d'];
$arr[2]='q';
7.foreach语法格式
foreach($arr as $key(下标) =>$value(值)){
echo $arr[$key].'<br />';
echo $key.'------'.$value.'<br />';
}
8.list函数定义变量并赋值
$arr=['a','b','c','d'];
list($a,$b,$c,$d)=$arr;
echo $a,$b,$c,$d;
9.each函数将数组中的值变为一个索引的一个关联的
$arr=['a','b','c','d'];
var_dump(each($arr));
2.3.2超全局数组
- $_GET
- $_POST
- $_REQUEST
- $_SERVER
- $_SESSION
- $_COOKIE
2.4错误处理
1.错误显示 在php配置文件中找到php.ini
查找display_errors
将on改为off错误提示即关闭
2.错误日志
error_log找到路径
2.5时间函数
1.时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数
时间戳的输出 echo time();
2.date()函数 (配合时间戳使用)
$time = time();
echo date('Y-m-d H:i:s' , $time);
该函数与北京时间相差八小时
法一:通过date_default_timezone_set()解决
eg:
date_default_timezone_set('PRC')
$time = time();
echo date('Y-m-d H:i:s' , $time);
法二:php.ini中搜索date.timezone
初始显示为UTC时间与北京相差八小时所以PRC为中国时区
将php.ini中的UTC改为PRC
2.5数据库
输入 mysql -uroot -p打开数据库 输入密码后进入
查看一些命令 h帮助命令 查看各种命令
2.5.1创建数据库
输入 show databases; 显示所有已存在数据库
输入 show create table user;创建库的语句
输入 create database bbs;(bbs即为库名)
2.5.2删除数据库
输入 drop database bbs;
2.5.3表的创建
1.首先使用库 use + 库命
2.create table user(id int(类型),username varchar(40)(长度),password varchar(32));
user 为表名
3.插入表的字段
插入第一个:alter table user add pass varchar(32) first;
插入name后面:alter table user add pass varchar(32) after name;
4.插入数据
法一:insert into 表名 values(数据内容,1,2... )
法二:insert into 表名(将表中属性输入以,隔开) values(待输入数据)
法三:insert into 表名(将表中属性输入以,隔开) values(待输入数据1),values(待输入数据2)
注:名字等字符串需要用' '
法二用的较多,前后必须一一对应
法三用于输入多条数据
2.5.4表的删除
drop tables user;
表中某字段的删除
alter table user drop pass;
数据的删除
delete from 表名 where username(属性) = '测试';
2.5.5表的显示
show tables; 查看表
show create table user;创建表的语句
desc user;查看表的结构
select databases;当前表所在的库
select * from 表名;查看表的所有数据
select 属性1,属性2... from 表名;查看表中的某个属性
select distinct 属性1,属性2... from 表名;去处重复值后显示
select * from 表名 where 属性=或>或<其数据;将某一数据的所有相关信息显示
select * from 表名 where age属性 !=/=/>/</between 30 and 40;一属性 某范围内的数据输出
select * from 表名 where age属性 in(16,17,18);输出值为16 17 18 的相关值
select * from 表名 where 属性 like '%某个字%';模糊查询
select * from 表名 order by age asc;升序查询
select * from 表名 order by desc;降序查询
select * from 表名 limit 5,5;从第五条开始取留五条
select * from 表名 group by address;分组查询
select count(*) from 表名;
两个表的关联查询
1.内联查询
select username表一属性 ,gname表二属性 from shop_user表一 inner join shop_goods表二 on shop_user表一.gid表一属性 = shop_goods表二.gid表二属性
通过找到表一与表二相同的值将表一表二中代表该值的商品名与用户名输出
2.左/右链接查询
select shop_user.username from shop_user right/left join shop_goods on shop_user.gid = shop_goods.gid;
2.5.6表的修改
alter table user rename user_table;
表中字段的修改
alter table user change password pass varchar(45);
将password 改为pass
数据的修改
update 表名 set 需要修改的属性1='改后的数据1',需要修改的属性2='改后的数据2'.... where id=1;
将32改为45
2.6 mysql数据类型
1.整形
tinyint 1字节 -128~127
smallint 2字节 -32768~32767
int 4字节
mediumint 3字节
bigint 8字节
2浮点型
float(m,d) 4字节 单精度浮点,m总个数,d小数位
double(m,d) 8字节 双精度~
decimal(m,d) decimal是存储为字符串的浮点数
3字符类型
char o~255字节 定长字符串 可以用作密码
md5()用来加密为32位
varchar 0~655355字节 变长字符串 用户名
4时间类型
date 4字节 日期,格式:2014-09-18
5auto_increment
自动增加,只用于整形,可以设置初始值,默认为1
常与后面primary key一起使用
创建表时实在整形字段后加上:auto_increment=起始值 primary key
修改起始值:alter table user auto_increment=起始值
2.6.1 添加索引
1.主键索引
alter table 表名 add primary key ( 表中字段名 );
2.唯一索引
alter table 表名 add unique ( 表中字段名 );
3.普通索引
alter table 表名 add index_name ( 表中字段名 );
4.全文索引
alter table 表名 add fulltext(表中字段名);
5.多列索引
alter table 表名 add index index_name(表中字段名);
6.查看已添加的索引
show index from 表名;
3.1 php链接数据库
1.连接数据库
$link=mysqli_connect('localhost(主机名)','root'(用户名),'密码');
2.判断是否连接成功
if(!$link){exit('数据库连接失败');
}
else{echo 'success';}
3.设置字符集
mysqli_set_charset($link , 'utf8');
4.选择数据库
my
、、
sqli_select_db($link , '库名');
5.准备sql语句
$sql = "select * from 表名";
6.发送sql语句
$res=mysqli_query($link,$sql);
mysqli_query对数据库进行一次查询
7.处理结果集
仅返回一条关联数组
$result=mysqli_fetch_assoc($res);
循环:
while($rows=mysqli_fetch_assoc($obj)){
var_dump($rows);
}
/*$re = mysql_query($sql,$coon);
while($row = mysql_fetch_assoc($re))
{
$list[ ] = $row;
}
mysql_fecth_assoc这个函数是把$re得到的值(数据库表里面的一行取出,指针偏移到下一个值,等待赋值,同时这一行数据也按照键值对应关系,形成[关联数组]赋给$row,然后while为ture,然后$row再把值赋给数组$list,紧接着刚才指针指向的数据把第二行取出..........最后$list得到的是一个二维数组,然后再用php和html的混编,把数据打印出来*/
返回一条索引数组
$result= mysqli_fetch_rows($obj);
返回既有索引又有关联的数组
$result= mysqli_fetch_array($obj);
返回所有数据的数量
$result= mysqli_num_rows($obj);
返回修改删除添加时受影响的总条数
$result= mysqli_affected_rows($link);
返回插入最后一条数据的id值
$result= mysqli_insert_id($link);
8.关闭数据库(释放资源)
mysqli _ close($link);
1.分页功能select * from table limit m,n
其中m是指记录开始的index,[从0开始],表示第一条记录
n是指从第m+1条开始,取n条。
select * from tablename limit 2,4
即取出第3条至第6条,4条记录
2.求出总条数
$sql = "select count (*) as count from bbs_user";
$result =mysqli_query($link,$sql);
$pageRes=mysqli_fetch_assoc($result);
$count=$pageRes('count');
$num=5;
3.根据每页显示数求出总条数
count/offset=(num;
3.1会话控制
3.1.1 cookie
存在客户端
setcookie('name' , 值 , time()+60(在60内生效,如登录账号是在60秒内免再次输入密码) ,'/');
注销
setcookie('name' , 值 , time()-1 ,'/');
3.1.2 session
存在服务器端
1.存值
session_start();//开启session
_SESSION['password'] = '123';
session_destroy; 释放
2.取值
session_start();
echo SESSION['username'] = 'zhangsan';
SESSION['username']);
session_destroy;
4.1 GD库
水印 验证码等
在php.ini中打开GD库 搜索gd2
1.创建画布
搜索 imagecreatetruecolor
image = imagecolorallocate
3.用GD库给函数画画
imageline();
4.告诉浏览器你的mime类型
header("Content-type:image/png");
5.输出浏览器或者可以存放到你的本地
imagepng(image);
4.2制作验证码
通过多个函数
1.设置 宽 高 字母 数字 干扰线 干扰点 背景色 字体色
a.准备画布
同上
b.生成颜色
c.需要的字符
d.写字
e.干扰线
f. 准备输出的类型
g.准备输出的图片
h.销毁
5.1文件
readfile('文件名');将读取的内容直接输出到浏览器
file('文件名');返回数组(根据换行生成索引数组)
file_put_contents('文件名','这是我新写入的内容');写入数据,覆盖型写入,若没有当前文件将新建
file_get_contents('文件名');获取文件内容,返回字符串
fseek($fp , 0);将指针移到文件头
pathinfo('文件名')
basename('文件名')获取文件名
dirname('文件名')获取当前目录
http_build_query();
parse_url();解析url
chmod();改变权限,最大权限:0777
mkdir('创建的文件名');创建文件夹
若需多个创建则应加上最大权限以及true
rmdir('要删除的文件名');
unlink('要删除的文件名');
copy('a.txt' , 'b.txt');拷贝文件
rename('a.txt' , 'b.txt');重命名文件
1.打开文件
$fp = fopen('文件名','r');
r以读的方式打开,r+以读写的方式打开(覆盖写入),w文件不存在会创建但无法读取,w+可读取(累加写入)
fp , fp , fp);
递归删除目录:
<?php
function rm($path)
{
//打开目录
$dir = opendir($path);
//需跳过两个特殊的目录结构
readdir($dir);
readdir($dir);
//循环删除
while($newFile = readdir($dir)
{
$newPath = $path . '/' . $newFile;
//判断是文件夹还是文件
if(is_file($newFile))
{
unlink($newPath);
}else{
rm($newPath);
}
}
closedir($dir);
rmdir($path);
}
5.1.2文件上传
6.1正则
1.定界符
<?php
$str = 'abcde';
$pattern = '/a/';
preg_match( $pattern , $str , $matche);//按照$pattern在$str中匹配 若匹配正确则返回1 返回给$matche,且仅输出第一个数
?>
在a两边的特殊符号 即可作为定界符
2.原子
正则表达式单位最小的东西,a -z ,A-Z ,0-9
\d 表示0-9之间的数字
\D 表示非0-9之间的数字都可以匹配
\w 匹配0-9 a-z A-Z
\W 匹配与w相反
\s 匹配空格 回车 tab
\S 与s相反
[a-z] 原子表表示想取的范围
^非
. 可以匹配/n以外的所有原子
/a*/ 若有则返回该原子 无则返回、空
/a+/ 将所有该原子匹配出来
/a?/ 匹配一次
/a{0,2}/匹配的个数
/^a/以a开始
/a$/以a结束
模式修正符
/ABC/i 不区分大小写
/abc/m 识别换行
/h+/U 仅匹配一个h
[PHP $_SERVER详解]
$_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言
$_SERVER['REMOTE_ADDR'] //当前用户 IP 。
$_SERVER['REMOTE_HOST'] //当前用户主机名
$_SERVER['REQUEST_URI'] //URL
$_SERVER['REMOTE_PORT'] //端口。
$_SERVER['SERVER_NAME'] //服务器主机的名称。
$_SERVER['PHP_SELF']//正在执行脚本的文件名
$_SERVER['argv'] //传递给该脚本的参数。
$_SERVER['argc'] //传递给程序的命令行参数的个数。
$_SERVER['GATEWAY_INTERFACE']//CGI 规范的版本。
$_SERVER['SERVER_SOFTWARE'] //服务器标识的字串
$_SERVER['SERVER_PROTOCOL'] //请求页面时通信协议的名称和版本
$_SERVER['REQUEST_METHOD']//访问页面时的请求方法
$_SERVER['QUERY_STRING'] //查询(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录
$_SERVER['HTTP_ACCEPT'] //当前请求的 Accept: 头部的内容。
$_SERVER['HTTP_ACCEPT_CHARSET'] //当前请求的 Accept-Charset: 头部的内容。
$_SERVER['HTTP_ACCEPT_ENCODING'] //当前请求的 Accept-Encoding: 头部的内容
$_SERVER['HTTP_CONNECTION'] //当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER['HTTP_HOST'] //当前请求的 Host: 头部的内容。
$_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] //当前请求的 User_Agent: 头部的内容。
$_SERVER['HTTPS']//如果通过https访问,则被设为一个非空的值(on),否则返回off
$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。
$_SERVER['SERVER_ADMIN'] #管理员信息
$_SERVER['SERVER_PORT'] #服务器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串。
$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER['PHP_AUTH_USER'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER['PHP_AUTH_PW'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER['AUTH_TYPE'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型