这个代表全局变量,php有九大全局变量,分别是
Y;
<<<GET
$GLOBALS(这个特殊)
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
/********************** 开发流程 *****************************/
/*分模块开发
面向服务开发:
面向对象:
面向过程:
集群:多台服务器处理一个模块
分布式:
*/
#60
#优化MYSQL数据库
#1、数据库的设计(符合三范式、字段的长度和类型的设计) 固定长度的表会更快
#2、sql语句的优化{慢日志(explain查询sql比较慢的)} 少使用:inner join 、* 、link "%$data%" 尽可能的使用 NOT NULL
#3、数据划分(根据不同情况横纵向分表、分库、分区)
#4、索引的建立(根据不同的情况建立索引)http://www.jb51.net/article/42884.htm
#5、引擎的使用MyISAM、InnoDB (http://www.cnblogs.com/kevingrace/p/5685355.html)
#6、必要的时候使用缓存(cache , memcache , redis ,JB cache)
#7、搭建主从或主主 、数据读写分离 提交效率
#8、尽量少在sql 中写逻辑运算
#9、使用一个对象关系映射器(Object Relational Mapper)
#使用 ORM (Object Relational Mapper),你能够获得可靠的性能增涨
ORM-----????????????
@cpath@
#mysql 日志类型
#
#MySAIM 和 InnoDB 的区别
#1、Innodb 支持事务
#2、InnoDB 支持行锁 MySAIM 表锁
#3、InnDB 在数据更新方面的执行效率高
#4、MySAIM 支持全文索引
#
#
#
#
#mysql 读写分离http://blog.jobbole.com/94606/
#流量分析统计软件
#网页压缩功能
#61前台的优化
#
#1、减少:httpd
#2、使用浏览器缓存
#3、启用压缩
#4、css和js 的fangzhi
#5、减少cookie 的传输
#6、cdn 内容分布网络(架设在网络运营商的机房内{储存静态资源})
#102
#memcahce 和redis 的区别以及实际应用
#memcache 是将数据存储在内存中
#memcache 主要是以简单的key-value 的形式储存
#memcache 挂机后数据就没了
#memcache 使用多核而redis是单核
#memcache 通讯协议比较简单、使用高效的内存管理、互不通讯的服务器集群
#应用场景
#
#数据交互比较频繁
#高读写比(热新闻)
#秒杀
#不经常变化
#
# redis是将数据存入磁盘
# redis 不仅仅支持简单的key-value类型的数据 还可以存储set list hast 等结构的数据结构
# redis 可以持久缓存,数据备份 即master-slave模式的数据备份。
# redis 在储存比较小的数据时比memcache 性能更高,100k 以上memcache性能高于redis
#
#
#104php 的缓存技术
#1、数据缓存:
#2、页面缓存:
#3、时间触发缓存:
#4、内容触发缓存:
#5、内存缓存:
#6、php 缓冲器
#7、mysql 缓存
#8、基于反向代理的Web缓存
#9、apache 缓存模块
#10 Opcode 缓存
#
#
#
#html /htm /xml
#
#
#分表:分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些子表可以分布在同一块磁盘上,也可以在不同的机器上
#分区:分区和分表相似,都是按照规则分解表。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,可以是同一块磁盘也可以在不同的机器。分区后,表面上还是一张表,但数据散列到多个位置了。
#
#
#关系型数据库 和 非关系型数据库
#当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。
#非关系型数据库有 NoSql、Cloudant。
#
#
#
#单点登录
#[第一方式]设置cookie作用域
#配置 www.a.com 和www.b.a.com
#在www.a.com/index.php中设置
#ini_set('session.cookie_domain','www.a.com');
#ini_set('session.cookie_domain','.a.com');
#1、session_start();
#$_SESSION['username']=$username;//同一台服务器
#2、setcookie('username',$usernaem,time()+3600,'/','.a.com');
#
#在www.b.a.com/index.php中
#echo $_COOKIE['username'];
#
#[第二种方式]
#
#
#
#
#php 设置 错误 屏蔽
#error_reporting(E_ALL ^ E_DEPRECATED);//设置屏蔽mysql链接错误
#error_reporing(E_All ^ EOTICE)
#ini_set('display_errors','Off');
#
#
#
#SVN 集中式(分支/主干/标记)
#git 分布式
##linux git的使用 ssh root@ip-----
#cd gittest
#在linux上创建远程仓库
#git init --bare
#在windows上克隆远程仓库
#git clone root@101.210.34.128:/home/wwwroot/project/gittest
#新建文件 test.txt
#增加
#git add test.txt
#提交
#git commit -m '描述'
#推送到linux上
#git push
#再到linux上新建一个文件夹在里面
#git clone root@101.200.39.108:/home/wwwroot/project/gittest
#chmod -R 777 文件名
#获取新的文件
#git pull
#在linux 对上传的文件进行修改
#git add $file
#git commit -m '描述'
#git push
#git pull
# 如果有冲突先解决冲突
# git push origin master
#git pull origin yanlu
#今天获取git线上仓库代码报了这个错误:
#[root@iZ2zeci5lznff35dcosoddZ test]# git pull origin yanlu
#You have not concluded your merge (MERGE_HEAD exists).
#Please, commit your changes before you can merge.
#1.保留你本地的修改
#[root@iZ2zeci5lznff35dcosoddZ test]# git merge --abort
#[root@iZ2zeci5lznff35dcosoddZ test]# git reset --merge
#合并后记得一定要提交这个本地的合并
#然后在获取线上仓库分支
#git pull
#git commit -m '描述'
#git push
#git checkout -f yanlu //强制转换分支
#git merge origin yanlu //主干合拼分支
#git commit -m 'miao'
#git push
1、
#linux 下到git 仓库新建分支
#git branch lmd
#查看是否创建成功
#git show-ref
#查看git 的状态
#git status
#如果有数据名提交先提交,解决冲突
2、
#windows 下克隆分支 lmd
#新建文件 添加
#提交到lmd 分支下
#推送lmd
#
3、
#linux 上传的目录下
#切换分支
#git checkout lmd
#git pull
4、
#切换到主干
#git checkout master
#git merge lmd
#ll
#107 ab 测试 (apache 自带的压力测试工具) webBench
#
#H:\phpStudy2\Apache\bin>ab -n 1000 -c 100 http://www.php.com/phpinfo.php
# -n 请求数 -c 病发数
#
#结果参数解释:
#webbench
#ab
#/usr/local/bin/webbech -c 200 -t 10 http://101.200.39.108/project/index1.php
#
#108 composer 安装
#composer self-update //更新
#php C:\ProgramData\ComposerSetup\bin\composer.phar create-project yiisoft/yii2-app-advanced advanced 2.0.0-alpha//安装yii
#
#更改镜像:项目根目录composer.json
#{
# "repositories": [
# {"type": "composer", "url": "http://packagist.phpcomposer.com"},
# {"packagist": false}
# ]
#}
#
#
#
#
#103
#apache 和nginx 的区别和应用
#nginx
#1、轻量级的,同样起web服务,比apache占用更少的资源
#2、抗病发,nginx处理请求是异步非堵塞,而apache 则是堵塞型的在高并发下nginx 依然保持低资源、低消耗,高性能
#高度的模块化的设计,编写模块相对比较简单
#3、Nginx本身就是一个反向代理服务器
#4、Nginx支持7层负载均衡;其他的当然,Nginx可能会比 apache支持更高的并发
#5、Nginx 静态处理性能比 Apache 高 3倍以上
#1.写在apche的rewrite规则通常写在分布式配置文件.htaccess里面,那么apache在接受请求的时候就会在相应目录里面找这个文件,然后执行里面的指令。而在ng里面,似乎是出于效率的考虑,没有这种把配置文件分布在各处,临时加载的做法。
#2.apache里面的rewrite规则中正则()的有些用法,比如RewriteRule反向引用,是apache里面特有的。
#apache
#1、rewrite ,比nginx的rewrite 强大
#2、模块超多 ,组件多
#3、少bug,nginx 的bug 相对较多
#3、超稳定
/******************** linux 常用命令**********************************/
/*for($i=1;$i<10;$i++){
for($j=1;$j<=$i;$j++){
echo "$j*$i"."=".$i*$j." ";
}
echo "<br>";
}*/
/*function GBsubstr($string,$start,$length){
if (strlen($string)>$length) {
$str = null;
$len = $start + $length;
for ($i=$start ; $i <$len ; $i++ ) {
//print_r($i);
if (ord(substr($string,$i,1))>0xa0) {
//echo 123;die;
$str.=substr($string,$i,2);
}else{
$str.=substr($string,$i,$length);
}
return $str;
}
}else{
return $string;
}
}
$substr=GBsubstr('yanlu',0,4);
echo $substr;*/
#14
#对于 大流量 的网站,你采用什么样的方法解决访问量的问题
#1、确认服务器端的硬件是否足够支撑当前的流量
#2、数据库读写分离
#3、优化数据表
#4、禁止外部的盗链
#5、控制大文件的下载
#6、使用不同主机分流主要流量
#7、使用流量分析软件(IndexTools/clickfor)
// echo "客户端:".$_SERVER['REMOTE_ADDR'].'或'.getenv('REMOTE_ADDR');
// echo "服务器:".gethostbyname('www.baidu.com');
/*function email(){
}
*/
/*
function UrlEn($url){
$arr = parse_url($url);//解析 URL,返回其组成部分
$file = basename($arr['path']);//返回路径中的文件名部分
$ext = explode('.', $file);
return $ext[1];
}
function getEx($url){
//$arr = dirname($url);
$arr = basename($url);//fg.php1?id=1
$srtpos1 = strpos($arr,'.')+1;
$srtpos2 = strpos($arr,'?');
if (strstr($url,'?')) {
$ex = substr($arr,$srtpos1,$srtpos2-$srtpos1-1);
return $ex;
}else{
}
}
$url ='http://www.sina.com.cn/abc/de/fg.php1/id=1 ';
//print_r( UrlEn($url));
print_r(getEx($url));
*/
#67 session 的工作原理
#
#用户通过浏览器发送请求---》服务器开启session-->这时候响应头有一个Set-Cookie---》当下次再发送请求时带上cookie值--》通过请求头保存session_id 完成一个会话控制
#
#
#session 共享:
#1、db[会造成数据库压力]、
#2、memcache/redis[一般选择|抗病发能力强|读写数度快]
#3、cookie[关闭浏览器就没了
#4、nfs【】)文件共享/文件同步rsync [每台服务上都生成session文件 浪费资源]
#5、ip哈希 [ 例:学校用ip公网 所有人都用一个ip | vpn也用一个ip 早服务器压力 ]
__construct()
构造函数 : 实例化对象时被调用,
当__construct和以类名为函数名的构造函数同时存在时,__construct将被调用,另一个不被调用。
2。__destruct()
析构函数 : 当删除一个对象或对象操作终止时被调用(程序结束后对象就摧毁)。
永远都是最后执行的。
3。__call()
对象调用某个方法,
若方法存在,则直接调用;
若不存在,则会去调用__call函数。
4。__get()
读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。
5。__set()
设置一个对象的属性时,
若属性存在,则直接赋值;
若不存在,则会调用__set函数。
6。__toString()
打印一个对象的时被调用。如echo $obj;或print $obj;
7。__clone()
克隆对象时被调用。如:$t=new Test();$t1=clone $t;
8。__sleep()
serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
9。__wakeup()
unserialize时被调用,做些对象的初始化工作。
10。__isset()
检测一个对象的属性是否存在时被调用。如:isset($c->name)。
11。__unset()
unset一个对象的属性时被调用。如:unset($c->name)。
12。__set_state()
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
13。__autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。
#105
#采集 get_file_contents fopen curl snoop 的区别以及实际应用场景http://blog.sina.com.cn/s/blog_9c581bd30101gssd.
#
#snoppy :是用 fsockopen 自开发的一个类,效率比较高且不需要服务器特定配置支持,在普通虚拟主机中即可使用,但是经常出问题
#Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单。
#file_get_contents 是 fsockopen 功能的简单打包,效率稍低些,但是抓取成功率很高
#
#curl功能最强大,几乎可以模拟浏览器的各个方面,几乎可以以假乱真。效率也很高,支持多线程,不过需要开启下 curl 扩展。
#cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。PHP也支持cURL库,我们常常用来远程页面抓取和采集。
#.XML和JSON优缺点
#(1).XML的优缺点
#<1>.XML的优点
# A.格式统一,符合标准;
# B.容易与其他系统进行远程交互,数据共享比较方便。
#<2>.XML的缺点
# A.XML文件庞大,文件格式复杂,传输占带宽;
# B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
# C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
# D.服务器端和客户端解析XML花费较多的资源和时间。
#<1>.JSON的优点:
# A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
# B.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
# C.支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;
# D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;
# E.因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
#<2>.JSON的缺点
# A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;
# B.JSON格式目前在Web Service中推广还属于初级阶段。
#
#
#106
#在linux上部署项目和windows上有什么区别?
#1、WINDOWS下路径和文件名不区分大小写 Linux下区分
#2、Linux是不执行.exe文件
#3、Linux下能运行的路径Windows就不行,Linux下能对系统资源做最完全的控制,Windows下除了admin,还有最高权限,用户是得不到的,有些资源你也拿不到
#107实现页面纯静态
#php 的ob实现页面静态化,静态化的机制:通过程序读写数据库的内容,生成html 文件,访问者直接访问html 文件
#php 生成静态页面的函数:fopen ,fread,fwrite
#负载均衡
#首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;
#其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高
# 算法 -- 分发请求
# 1.轮询
# 2.加权轮询 [ 根据服务器的配置 ]
# 3.随机
# 4.最少链接数
# 5.ip 哈希| 原地址散列
#
#
#
#
#
#反向代理 [负载均衡的一种方式](Reverse Proxy)方式是:
#指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
#
#
#吞吐量:指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量)
#
#
#主从复制:
#1、是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是实时的业务数据库
#2、从数据库的作用和使用场合一般有几个:一是作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作
#3、二是可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能;
#
# 分布式
# 将不同的业务分布到不同的服务器上
#
# 集群
# 将 n 台服务器集中到一起处理
#
#
[mysqld]
port=3307
basedir=E:\mysql
datadir=E:\mysql\data
log_bin= mysql-bin
server_id=2
auto-increment-increment=2
auto-increment-offset=2
binlog_checksum=none
[mysqld]
port=3307
basedir=E:\mysql
datadir=E:\mysql\data
log_bin= mysql-bin
server_id=2
auto-increment-increment=2
auto-increment-offset=2
binlog_checksum=none
#106
#php api 接口 { 1防刷新 2认证 3防改 4签名 }
#1、写接口文档//说明,url,请求方式,地址,返回值,请求实例,更新日志
#2、定义数据结构
#3、开始封装写类(数据加密)基本sign,key,appid,业务suername,pwd】拼接数组:去空排序拼接条件md5
#4、接口测试postman swagger phpstom
#
# 接口调用
#get_contents_fils, curl, snoop, ajax, fopen
#
#
#
#
/***********************框架开发*******************************/
#109 laravel
#Fatal error: Class 'Illuminate\Foundation\Application' not found
#
#验证码的制作:http:
#
#
#
/**
* yii 开发
*
*/
# 开启错误提示 index.php defined('YII_DEBUG') or define('YII_DEBUG', true);
#view 层调用公共模板
# <?=$this->render('../public/nav.php')?>
#yii cookie
$cookies = Yii::$app->response->cookies;
$cookies->add(new \yii\web\Cookie([
'name' => 'language',
'value' => 'zh-CN',
]));
$language = $cookies->getValue('language', 'en');
#yii 验证码
#http:
/**************************** php 项目开发模块 *************************************/
现支付宝的通知有两类。
【异步】A服务器通知,对应的参数为notify_url,支付宝通知使用POST方式
【同步】B页面跳转通知,对应的参数为return_url,支付宝通知使用GET方式 (通知地址不需要像以前一样去账户内设置,而是由客户在支付的时候通过参数传递给我地址。
例如 notify_url=http://www.xxx.com/notify_alipay.jsp 注意:www.XXX.com是您网站的域名,也可以用ip地址代替。对于服务器通知,ip地址一定是公网的,私有地址(例如10.2.1.1或者 192.168.1.1)支付宝无法通知到客户端)
以下内容来自支付宝官方网站,不过由于地址改变了,导致原帖无法访问,通过快照查找到其内容,特分享一下.
1. 确认您使用的接口是用notify_url还是return_url。
2. notify_url为服务器通知,支付宝可以保证99.9999%的通知到达率,前提是您的网络通畅。
3. return_url为网页重定向通知,是由客户的浏览器触发的一个通知,若客户去网银支付,也会受银行接口影响,由于各种影响因素特别多,所以该种类型的通知支付宝不保证其到达率。
买家付款成功后,会跳到 return_url所在的页面,这个页面可以展示给客户看,这个页面只有付款成功才会跳转,并且只跳转一次..
notify_url: 服务器后台通知,这个页面是支付宝服务器端自动调用这个页面的链接地址,这个页面根据支付宝反馈过来的信息修改网站的定单状态,更新完成后需要返回一个success给支付宝.,不能含有任何其它的字符包括html语言.
流程:买家付完款(trade_status=WAIT_SELLER_SEND_GOODS)--->支付宝通知 notify_url--->如果反馈给支付宝的是success(表示成功,这个状态下不再反馈,如果不是继续通知,一般第一次发送和第二次发送的时间间隔是3分钟)
//#支付宝 支付流程
卖家账号 】
合作者id
秘钥
订单号
支付金额
回调地址[同步,异步]
签名
支付状态
买家信息
GET返回参数--->【
H
H[返回数据]
H
H
H
GET请求参数-->【 卖家账号
合作者id
秘钥
订单号
支付金额
回调地址 [同步,异步]
签名[
过滤字符串
排序数组
&拼接代签名串
拼接key 新的字符串
md5(加密字符串)
]
】
//#支付宝即时到账 和非即时到账
即时到账交易:操作成功后资金是立即打给对方账户的,实时到账,没有确认收货的环节,需谨慎操作;
担保交易:买家先付款到支付宝,满意后在规定时间内确认收货或超出时间后由支付宝打款给卖家
/****************************大型网站的演化*************************/