分类

最新评论

Kevin's Blog
.
不管你来或不来,我都在这里--- my country of freedom.
2024
如果人生是值得的,那就值得记录…

六月 廿二 甲辰【龙】年
辛未月 壬辰日 
Sat,27 Jul 2024 21:45:08
自由国度 平凡的足迹
Sat, 04 Dec 2021 5
const A='123A'; 定义常量方式1
define('B',"123B"); 定义常量方式2
defined('A');注意和define定义一样需要加上单引或双引号
get_defined_constants();以数组的形式获取以定义常量(不显示)
$str=<<<aa
..
aa;
字符串函数
strlen($str) 字符串长度
mb_strlen($str) 字文字符串长度
strstr($str,$substr) 区分大小写 同strchr 返回字符串第一次出现到结束的字符串,失败则返回false
stristr($str,$substr)  不区分大小写!同strichr 返回字符串最后一次出现到结束的字符串,失败则返回false
strchr($str,"")  同strstr
strrchr($str,'') 同stristr
strpos($str,"")  返回字符串首次出现在位置
strrpos($str,"") 返回字符串最后一次出现在位置
stripos($str,"") 区分大小写
strripos($str,"") 不区分大小写
substr($str,$n_start[,$n_length]) 字符串截取,返回从指定位置截取指定长度的子字符串,不指定长聊默认为到结束全部字符串
mb_substr($str,$n_start[,[$n_length]) 中文字符串截取
substr_count($str,$substr[$n_start,[$n_length]]) 字符串出现的次数(有指范围,则返回指定范围之内出现在次数)
str_replace($strsub,"",$str) 字符串替换
str_ireplace($strsub,"",$str) 中文字符串替换
trim($str[,""]) 去除两端指定字符(不指定默认为空白字符)
ltrim($str[,""])去除左端指定字符
rtrim($str[,""])去除右端指定字符
strtolower($str) 转小写
strtoupper($str) 转大写
ucfirst($str)首字母大写
lcfirst($str) 首字母小写
str_shuffle($str) 随打打乱字符串
str_split($a[,$n_length]) 以长度为标准打散字符串到一个数组
strrev($str) 返转字符串
str_repeat($str,$n) 重复字符串
explode('|',$str)  以指定字符串分界打散字符串到一个数组
implode('|',$arr) 返回以字符串连接的数组元素组成的符串
parse_url($url) 分解一个url结果如下
Array ( [scheme] => http [host] => www.sina.com.cn [path] => /abc/de/fg.php [query] => id=1 )
数据类型相关
is_string($x) 是否为字符串
is_numeric($x) 是否为数字
is_int($x) 是否为整数
is_array($x) 是否为数组
is_object($x) 变量是否为一个对像
is_null($x) 是否为空值
is_dir($str) 是否为目录
is_file($str) 是否为文件
gettype($m) 获取变量类型
settype($m,'int') 设置变量类型
isset($m) 判断一个变量是否存在
unset($m) 删除一个变量
empty($m) 变量是否为空值
intval($m) 转成整型
strval($m) 转成字符型
floatval($m) 转换成浮点数类型

文件目录
file_exists($filename) 判断文件或目录是否存在
file_get_contents($filenam) 读取文件全部内容
file($filename) 把文件每行作为一个元素读出到一个数组
file_put_contents($filename,$str[.FILE_APPEND]) 往一个文件中写入内容(重写,追加)
readfile($filename) 读取文件全部内容到缓冲区(即使没有开启ob_start()也能ob_get_contents获取)
unlink($filename)) 删除文件
copy($filename,$newfilename) 复制文件
rename($filename,$newfilename) 文件或目改名
filemtime($filename) 获取文件最后修改时间
filesize($filename) 获取文件大小
basename($filename)返回文件名(含主文件名和扩展名,不含路径,不检测实际文件)
pathinfo($filename) 返回文件扩展名[extension],文件名[basename],[filename]主文件名,[dirname]所在目录路径到数组(不检测实际文件)
dirname($filename) 获取文件路径(所在目录,不检测实际文件)
realpath($filename) 把一个相对路径转换成绝对路径(会检测实际文件,不存在的情况下,会返回false)
mkdir($filename)创建目录
rmdir($filename)删除目录
opendir($filename)打开一个目录资源
closedir($filesource)关闭目录资源
scandir($dirsoucre[,1])扫描列出一个目录(或日录资源)下的文件

fopen($filename,r/x/w/a/r+/x+/a+/w+) 打开文件作为资源
"r" (只读方式打开,将文件指针指向文件头)
"r+" (读写方式打开,将文件指针指向文件头)
"w" (写入方式打开,清除文件内容,如果文件不存在则尝试创建之)
"w+" (读写方式打开,清除文件内容,如果文件不存在则尝试创建之)
"a" (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之)
"a+" (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容)
"x" (创建一个新的文件并以写入方式打开,如果文件已存在则返回 FALSE 和一个错误)
"x+" (创建一个新的文件并以读写方式打开,如果文件已存在则返回 FALSE 和一个错误)

fread($filesource[,$n]) 从文件资源中读取全部内容
fclose($filesource]) 关闭文件资源
fgets($filesource[,$n]) 从资源中读取文件一行指针往下移
fgetc($filesource) 从资源中读取文件一个字符指针往下移
feof($filesource) 判断资源文件指针是否到结尾
fwrite($filesource, $str) 字符串写入文件资源
ftell($filesource) 获取资源文件中当前指针位置
fseek($filesource,$n[,SEEK_SET|SEEK_CUR|SEEK_END]), 以参数 [头|当前|结尾] 为参考,移动指针到指定位置 
rewind($filesource) 将资源文件中的指针移动到开始即0位置
flock($filesource, LOCK_SH | LOCK_EX | LOCK_UN | LOCK_NB[,false|true|1]) 共享锁定|独占|释放|不堵塞 模式锁定打开的资源文件
move_uploaded_file($tmp_filename,$savefilename) 移动上传文件

数学
mt_rand($n_min,$n_max)  取指定数字之间的随机整数 可省两参数,同rand(),效率快4倍
abs() 取绝对值
ceil() 向上取整
floor() 向下取整
round() 四舍五入
max() 取最大值
min() 取最小值

数组函数
array_pop($arr) 取数组最后一个元素,并从数组中删除它,输出值 (弹出最后一个元素)
array_push($arr,$str[,str2[,str3]]) 往数组最后压入一个或多个元素
array_shift($arr) 取数组第一个元素,并从数组中删除它,输出值  (弹出第一个元素)
array_unshift($arr,$str[,str2[,str3]]) 往数组最前面压入一个或多个元素
array_merge($arr1top,$arr2end) 合并数组至另一个数组
array_key_exists($key,$arr) 键是否存在于数组
in_array($values,$arr) 值是否存在于数组
list($a,$b,$c)=$arr 把数组元素依次赋值给$a,$b,$c 一个数组的元素依次存放至一些变量
array_sum($arr) 求所有数组元素的和
array_product($arr) 求所有数组元素的积
count($arr) 统计数组元素个数
array_count_values() 每个无素(值)的重复次数
array_values() 取数组的所有值
array_keys() 取数组的所有键
array_unique($arr) 去除重复项(去掉后面的保留前面的)
array_flip() 交换数组的键和值
array_rand($arr) 随机取一个数组元素的键
array_reverse($arr)   返转数组(关联型,连键名一起反,索引则重置健名为0开始) 
array_filter($arr[,callbackfunction])
shuffle($arr) 随机打乱数组过虑数组
array_combine($arr1,$arr2),把一个数组的值,作为另一个数组的键名
array_merge_recursive()递规合并数组
unset($arr) 删除一个数组变量或元素
end() - 将内部指针指向数组中的最后一个元素,并输出值
next() - 将内部指针指向数组中的下一个元素,并输出值
prev() - 将内部指针指向数组中的上一个元素,并输出值
reset() - 将内部指针指向数组中的第一个元素,并输出值
each() - 返回当前元素的键名和键值,并将内部指针向前移动
current() 函数返回数组中的当前元素的值。
array_fill($i,$n,$values) 生成$n个值都为$values的以$i开始为索相下标的数组
array_fill_keys($arr,$values) 用数组的值作为键名,$values作为健值生成一个数组
array_intersect($arr1.$arr2,$arr3) 输出交集,值相同,在其它数组中都有出现过的元素集,只要其它数组中有一个不出现,则不算,保留第一个数组键名(第一个数组为标准)
array_intersect_assoc($arr1,$arr2)输出交集,比较键和值都相同
array_intersect_key($arr1,$arr2)输出交集,只比较键名
array_diff($arr1,$arr2..)比较值,返回差集,值不同的,在其它数组中都没有出现过的元素集,只要其它数组中有一个出现,则不算,出现一次不被计入(第一个数组为标准)
array_diff_assoc($arr1,$arr2..) 比较数组,返回差集(比较键名和键值)
array_diff_key($arr1,$arr2..) 比较数组,返回差集(比较键名)
array_walk($arr,"myfunction($values,$key)")依次向回调数传入每个健的健名和值,回调处理数组(一参为值二参为名),依次向回调数传入每个健的健名和值,键名不可改,键值可改。
uasort()
uksort()
usort()
sort()
rsort()

时间日期
strtotime("2018-05-20 09:02:10")
strtotime("+10 year +2 month +1 week -2 day +2 hour -2 Minute  +5 second");
strtotime("2018-05-20 09:02:10 [+10 year]")
date("y-m-d h:i:s"[,time()])
gmdate("y-m-d H:i:s",time()+3600*8) 格式化输出格林威治时间GMT
time();
microtime([true]);
时间格式中的英文星期几D  4位年Y 2位年y 英文月M 数字月m 日d 时H 分i 秒s


缓冲区相关
ob_start() 开启缓冲
ob_clean() 清除缓冲区内容
ob_get_contents() 返回缓冲区内容
ob_get_length() 返回缓冲区内容的长度
ob_end_flush() 关闭缓冲区并输出
ob_end_clean() 关闭缓冲区不输出内容
ob_implicit_flush() 设置缓冲区为立即输出
ob_flush(); 输出缓冲区内容
flush();立即刷新输出等待输出(离开OB缓冲)的内容(不同版本配置,待输出内容需要积累到一定量);

转码相关
json_encode($data)
json_decode($data[,false|true])
serialize($arr&$object)
unserialize($arr)
base64_encode($str)
base64_decode($str)
iconv($code1,$code2,$str)
nl2br($str);

会话相关 session_start()
存 $_SEESION['key']=$str;
取 $str=$_SESSION['key'];
删 unset($_SESSION['key']);
退 session_unset()
$_COOKIE
存 setcookie($key,$values[,time()+$n_time[,/[,'baidu.com']]]);
取 $str=$_COOKIE[$key];
删 setcookie($key,'',time()-3600);//设置前不能向浏览器输出,当前页面无效,另一个页面在过期前有效

类函数相关
static 静态
public 公有
protected 保护
private 私有
final 不可覆盖
return 函数返回值
function 函数定义
interface 接口类
abstract 抽像类
Trait 可继承一个类后,可用use再继承的类修饰 同属性方法覆盖优先级 本类>trait类>父类
extends 继承父类
implement 实现接口

正则
preg_match ( $pattern, $subject, [ array &$matchs ] )
preg_match_all ( $pattern, $subject, array &$matches[,PREG_PATTERN_ORDER | PREG_SET_ORDER | PREG_OFFSET_CAPTURE]);默认第一参,第二参会使matches数组格式不同,第三参数会把出现的位置给找出来
preg_replace ( $pattern, $replacement, $subject )
preg_filter ( $pattern, $replacement, $subject )
preg_grep ( $pattern, array $input )
preg_split ( $pattern, $subject )
preg_quote($str)

\n 匹配一个换行符。
\r 匹配一个回车符。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。注意 Unicode 正则表达式会匹配全角空格符。
\S 匹配任何非空白字符。
\b 匹配一个单词边界,即字与空格间的位置。
\B 非单词边界匹配。
\W 匹配任意不是字母,数字,下划线 的字符  等价于 '[^A-Za-z0-9_]'。
\w 任意一个单词字符等价于'[A-Za-z0-9_]'
\d 匹配数字
\D 匹配任意非数字的字符

$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
1改变优先级 
2变成原子 (即独立部分)
3子模式 (在表达式中\1,\2)
4反向引用 在preg_replace中用$1,$2或\1,\2表示 第一个() 第二个() 
****?:在()中加上如(?:xxx),表式取消该括号的子模式,****${1}在替换函数,中使用,表式子模式1 同正则中的 \1
****以下4种kk要在对应位置存在才行,不然会乱套
(?<=xx|bb) kk 前面有 XX或bb 不现结果,不在子模式 xx,bb像只能用固长{n}不能用+*,,BUG?测试如此,碰上再说吧
(?!xx|bb) KK 前面没有 XX或bb 不现结果,不在子模式 xx,bb像只能用固长{n}不能用?+*{n,},BUG?测试如此,碰上再说吧
KK(?=xx|bb) 后面有 XX或bb 不现结果,不在子模式 xx,bb好像能用变长,
KK(?!xx|bb) 后面没有XX或bb 不现结果,不在子模式 xx,bb好像能用变长,
(?:xx|bb) 随便能用, ()中表内容出现匹配结果, 不在子模式


. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
[ ] 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,在方括号中,"[^abc]"  表示匹配除了a、b、c以外的任意字符,即非a,非b,非c (不是非"abc",非"abc"要用(?!abc)来搞), 此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。

| 指明两项之间的一个选择。要匹配 |,请使用 \|。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

/i 忽略大小写。 
/x 表示忽略空格。
/s 表示点号可以匹配换行符
/m 执行多行匹配。当使用^和$模式时视为多行,^也能匹配第二行开头,在其他的模式中,加不加入m都可以进行多行匹配(其实说多行的字符串也是一个普通字符串),默认是一行的,第二行不能进行^匹配
/U 取消贪婪模式,最短匹配。
/e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行,优先外面匹配函数执行,再执行函数里面的内容;
/A 强制从目标字符串开头匹配,基本同^ 不是开始不匹配
/D 如果使用$限制结尾字符,则不允许结尾有换行,在用$时是可以有换行结尾的


其它函数关键字
eval()
time_sleep_until(timestamp)//使用脚本暂停,直到timestamp(时间戳)指定时间再进行从现在起 10 秒后唤醒
time_sleep_until(time()+10);
sleep(n)//休眠n秒再运行sleep(10)暂停 10 秒
PHP_EOL
true
false
continue
break
exit
print_r($str)
var_dump($str)
var_export($str) 以php代码风格输出变量值 同var_dump()但 不显示相关数据类型提示
die
include
require
require_once
http_build_query($date)函数 把一组(数组)请求的数据转为地址形式的字符串 array('a'=>1,'b'=>2) a=1&b=2
parse_str($uri,$params); //把url形式如a=1&b=2的参数转存到一个数组 array('a'=>1,'b'=>2)
file_get_contents("php://input")
namespace Pay\Controller; 命名空间
use Think\Log; 使用命名空间


$str=<<<aa(两个aa中间都要换行)aa; 大文本定义
set_time_limit(0);设置脚本超时时间,-1为不限
ignore_user_abort_test(true);后台运行
<format action='' method='POST' enctype=multipart/form-data> 表单提交上传文件编码

date_default_timezone_set('PRC') 设置时区为中国时间
header("location:helloworld.php")
header("Refresh:3;url=helloworld.php")
header('HTTP/1.1 200 OK')
header('HTTP/1.1 301 Moved Permanently');
header('HTTP/1.1 303 See Other');
header('HTTP/1.1 304 Not Modified');
header('HTTP/1.1 404 Not Found');
header('HTTP/1.1 502 Bad Gateway');
header('status:404 Not Found')
header('Last-Modified: '.gmdate("D, d M Y H:i:s", time()).' GMT');  //告诉浏览器最后一次修改时间 
header('Content-language: en');  //文档语言  
header( 'Content-Type:text/html;charset=utf-8 ');  //设置文档编码这utf-8
header('Content-Type: application/rss+xml; charset=ISO-8859-1');  文档内容为rss 编码为ISO-8859-1

header('Content-type: text/css');  css文件
header('Content-type: text/xml');  XML文
header('Content-type: text/plain');  txt文件
header('Content-type: text/javascript');  js文件

header('Content-type: image/jpeg');  图片文件
header('Content-type: image/x-icon');  图片文件
header('Content-type: image/png');  图片文件
header('Content-type: image/gif');  图片文件

header('Content-type: application/json');  json文件
header('Content-type: application/pdf');  pdf文件
header('Content-type: application/zip');  zip文件
header('Content-Type: audio/mid'); // mid音频文件
header('Content-Type: audio/mp3'); //mp3 音频文件  
header('Content-type: video/mge');//.mpa .mpg .mpeg .mpv 文件
header('Content-Type: application/x-shockwave-flash'); //flash文件 swf
header('Content-Type: video/mpeg4'); // mp4视频文件 
header('Content-Type: video/avi'); // avi视频文件
header('Content-Type: application/rss+xml')//rss文件
header('Content-type: application/atom+xml');  github编辑器文件
header('Content-Type: application/octet-stream'); //.*文件

缓存1个月
header("Cache-Control: public");//默认公共设置进行缓存
header("Pragma: cache");//本页需要缓存
header("Expires: ".gmdate("D, d M Y H:i:s", time() + 30*60*60*24)." GMT");//内容过期时间

不要缓存
header("Cache-Control: no-cache");//强制不缓存
header("Pragma: no-cache,must-revalidate");//禁止本页被缓存
header("Expires:" . gmdate("D, d M Y H:i:s", time()) . " GMT");//内容过期时间

设置为一个下载类型  
header('Content-Type: application/octet-stream');  //设置类型为所有文件
header('Content-Disposition: attachment; filename="example.zip"');  //关键,以附件形式打开或保存,并设置下载显示的名字,注意格式
header('Content-Transfer-Encoding: binary');  //设置传输编码为 二进制
header('Content-Length: 1234'); //设置文件大小可省
readfile('example.zip'); //输出服务器文件

设置为一个图片为下载类型
header('Content-type: image/jpeg');//输出的类型
header('Content-Disposition: attachment; filename="downloaded.jpg"'); //下载显示的名字,注意格式
readfile('my.jpg');输出服务器文件
// 并将这个文件以前面header发送信息设定的类型输出,从而会弹出一个下载框
 就是把服务器上的my.jpg下载下来,下载显示和保存的名字默认是downloaded.jpg


结构
for(){}
while(){}
if(){}
$ex?$ex:$ex;
foreach($arr as $key=>$values){}
switch($ex){
case 1:
...;
case 2:
...;
default:
...;
}

魔术常量
__DIR__
__FILE__
__LINE__
__FUNTION__
__CLASS__
__METHOD__
__NAMESPACE__
__TRAIT__


超全局数组
$GLOBALS
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
$_SERVER

$_SERVER['HTTP_HOST']  请求头信息中的Host内容,获取当前域名
$_SERVER["REMOTE_ADDR"]  浏览网页的用户ip。
$_SERVER["REQUEST_SCHEME"]  服务器通信协议,是http或https。
$_SERVER["REQUEST_METHOD"]  请求提交数据的方式。
$_SERVER["QUERY_STRING"]  服务器请求时?后面的参数(url地址的不含?号的后面部分)。
$_SERVER['PHP_SELF'] 当前正在执行脚本的文件名 得到:/php/index.php/test/foo (url地址的根目含/开始到?前面或结束的部分)
$_SERVER["REQUEST_URI"]  当前脚本路径,根目录之后的部分。得到:/php/index.php/test/foo?username=hbolive
$_SERVER["SCRIPT_NAME"]  当前脚本的路径。这在页面需要指向自己时非常有用。 得到:/php/index.php

魔术方法
__construct()
__destruct()
__call()
__callStatic()
__get()
__set()
__isset()
__unset()
__sleep()
__wakeup()
__toString()
__invoke()
__set_state()
__clone()
__autoload()
__debugInfo()


if中有值为true 为0 空 时则为false 数组为空时,也是false
赋值$str=$ex 的结果为$str 可以作为条件判断
能用' '就不用""

=============================================================
__construct(),类的构造函数
__destruct(),类的析构函数
__call(),在对象中调用一个不可访问方法时调用 自动传入两个参数第一个为调用名称,第二个为参数
__callStatic(),用静态方式中调用一个不可访问方法时调用
__toString(),类被当成字符串时的回应方法
__autoload(),尝试加载未定义的类
__clone(),当对象被克隆时调用
__get(),获得一个类的成员变量时调用
__set(),设置一个类的成员变量时调用
__isset(),当对不可访问属性调用isset()或empty()时调用
__unset(),当对不可访问属性调用unset()时被调用。
__sleep(),执行serialize()时,先会调用这个函数
__wakeup(),执行unserialize()时,先会调用这个函数
__invoke(),调用函数的方式调用一个对象时的回应方法
__set_state(),调用var_export()导出类时,此静态方法会被调用。
__debugInfo(),打印所需调试信息

r 打开文件为只读。文件指针在文件的开头开始。
w 打开文件为只写。删除文件的内容或创建一个新的文件,如果它不存在。文件指针在文件的开头开始。
a 打开文件为只写。文件中的现有数据会被保留。文件指针在文件结尾开始。创建新的文件,如果文件不存在。
x 创建新文件为只写。返回 FALSE 和错误,如果文件已存在。
r+ 打开文件为读/写、文件指针在文件开头开始。
w+ 打开文件为读/写。删除文件内容或创建新文件,如果它不存在。文件指针在文件开头开始。
a+ 打开文件为读/写。文件中已有的数据会被保留。文件指针在文件结尾开始。创建新文件,如果它不存在。
x+ 创建新文件为读/写。返回 FALSE 和错误,如果文件已存在。



其它应用经验
对二维数组的指定元素排序

$data = array(
  '10'=>array(
    'id' => 10,
    'first_name' => '6',
    'last_name' => 'c',
  ),
  '20'=>array(
    'id' => 20,
    'first_name' => '3',
    'last_name' => 'a',
  ),
  '30'=>array(
    'id' => 30,
    'first_name' => '4',
    'last_name' => 'b',
  )
);
 
$last_names = array_column($data,'last_name');
array_multisort($last_names,SORT_DESC,$data);

print_r($data);

$last_names = array_column($data,'last_name');
array_multisort($last_names,SORT_DESC,$data);



php网络应用
================请求远程相关=======================
curl请求流程:4部分
//1初始化curl
$ch=curl_init();
//2设置选项
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1)
//3执行curl请求
$output = curl_exec($ch);
//判断请求成功
if ($output===false){
失败执行
}else{
成功执行
}

$curl_info=curl_getinfo($ch)//获取curl请求的相关信息
curl_close($ch);//4结整释放curl句柄


//使用CURL发送GET请求
function doCurlGetRequest($url,$data,$timeout = 5){
 if($curl == "" || $timeout <= 0){
 return false;
 }
 $url = $url.'?'.http_bulid_query($data);
 $con = curl_init((string)$url);
 curl_setopt($con, CURLOPT_HEADER, false);
 curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
 curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout);
 return curl_exec($con);
}


使用CURL发送POST请求
function doCurlPostRequest($url,$requestString,$timeout = 5){
 if($url == '' || $requestString == '' || $timeout <=0){
return false;
 }
 $con = curl_init((string)$url);
 curl_setopt($con, CURLOPT_HEADER, false);
 curl_setopt($con, CURLOPT_POSTFIELDS, $requestString);
 curl_setopt($con, CURLOPT_POST,true);
 curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
 curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout);
 return curl_exec($con); 
}


curl_setopt选项
curl_setopt($ch,CUROPT_URL,$url) //请求的地址
curl_setopt($ch,CUROPT_HEADR,0)//不返回http头部信息
curl_setopt($ch,CUROPT_RETURNTRANSFER,1)//直接返回的是html数据。而不是true,
 curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout);//超时时间

curl_getinfo()返回的是一个关联数组,包含以下数据:
url:网络地址。
content_type:内容编码。
http_code:HTTP状态码。
header_size:header的大小。
request_size:请求的大小。
filetime:文件创建的时间。
ssl_verify_result:SSL验证结果。
redirect_count:跳转计数。
total_time:总耗时。
namelookup_time:DNS查询耗时。
connect_time:等待连接耗时。
pretransfer_time:传输前准备耗时。
size_uplpad:上传数据的大小。
size_download:下载数据的大小。
speed_download:下载速度。
speed_upload:上传速度。
download_content_length:下载内容的长度。
upload_content_length:上传内容的长度。
starttransfer_time:开始传输的时间表。
redirect_time:重定向耗时。






<?php
//使用file_get_content,请求接收 XML报文
  
if( $_SERVER['REQUEST_METHOD'] === 'POST' ){
    // 接收
    $content = file_get_contents('php://input');
    $xml = simplexml_load_string($content);
    echo "来自XML接收方的响应\n";
    print_r( get_object_vars($xml) );
    exit;
}
  
// 发送行为
$xml = <<<xml
<?xml version="1.0"?>
<FOX>
<hello>world</hello>
</FOX>
xml;
  
$setting = array(
    'http' => array(
    'method' => 'POST',
    'user_agent' => '<Client Application Name>',
    'header' => "Content-type: application/x-www-form-urlencoded",
    'content' => $xml
    )
);
$context = stream_context_create($setting);
$url = 'http://localhost/'. $_SERVER['REQUEST_URI'];
$response = file_get_contents($url, null, $context);
echo $response;

stream_context_create()函数 用来模拟post/get请求
是用来创建打开文件的上下文件选项的,比如用POST访问,使用代理,发送header等。就是创建一个流,
可用于文件系统(file system)。可用于fopen(),file_get_contents()等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程。
对于像 file_get_contents、file_put_contents、readfile直接使用文件名操作而没有文件句柄的函数来说更有用。
stream_context_create增加header头只是一部份功能,还可以定义代理、超时等。这使得访问web的功能不弱于curl.
 stream_context_create 还能通过增加 timeout 选项解决file_get_contents超时处理:如
$opts = array(
    'http'=>array(
    'method'=>"GET",
    'timeout'=>60,
  )
);
//创建数据流上下文
$context = stream_context_create($opts);
$html =file_get_contents('http://www.baidu.com', false, $context);











PHP数据库操作=========
连接数据库
查询
执行
crud
pdo
预处理
关联
事务

面向对像设计模式=======
单件模式
工厂模式
观察者模式
策略模式

MYSQL==========
资源文件导入 
net start mysql 启动mysql服务
PDO连接模式:
try {
            $pdo = new PDO("mysql:host=dataBaseHost;dbname=dataBaseName", dataBaseUser, dataBasePass);
            return $pdo;
        }catch(PDOException $e) {
           echo "数据库连接失败:".$e->getMessage();
           return false;
}

表是否存在:
$table = 'cy_news';
//判断表是否存在
$result = $pdo->query("SHOW TABLES LIKE '". $table."'");
$row = $result->fetchAll();
if('1' == count($row)){
  echo "Table exists";
} else {
  echo "Table does not exist";
}

获取所有字段
try {
  $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');
  $stmt = $dbh->query("select * from tbl_name");
  for($i=0; $i<$stmt->columnCount(); $i++) {
    echo $stmt->getColumnMeta($i)['name'], PHP_EOL;//php5.4适使用,之前的版本需拆成两句
  }
} catch (PDOException $e) {
  die("Error!: " . $e->getMessage());
}

$row = pdo->query('select * from tbname');
$row->fetch(PDO::FETCH_ASSOC);转成数组 无数据则为false

Redis============

linunx=========

旺值月建+10
旺临月建 +8
旺值日建+10
旺临日建 +8

月相 +6
月休 0
月囚 0
月死 -6

日相 +6
日休 0
日囚 0
日死 -6

月进气+1
月退气+2



共有0条留言

154368