PHP基础笔记

[PHP常用的代码]

date_default_timezone_set(PRC); //时区设置
header("Content-type: text/html; charset=utf-8");
error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING);
ini_set ('memory_limit', '1280M');
 
[HTML常用代码]
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta charset="UTF-8">
<meta http-equiv ="refresh" content ="60"> #定时刷新页面
body{-webkit-user-select:none;} #CSS控制页面文字不能复制
 
PHP的垃圾回收机制(GC机制):PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数这种单纯的垃圾回收机制。每个对象都内含一个引用计数器,每个reference链接到对象,计数器加1,当reference离开生存空间或者被设为null,计数器减1,当某个引用计数器的对象为0时,PHP知道你将不再需要使用这个对象,释放其所占有的内存空间。
 
1.PHP 语法错误 和 语义错误 的区别:
语法错误 通过IDE都可以提示看到:如缺少分号,未声明的变量,不匹配的括号或大括号,和未终止字符串;
语义错误 一般是逻辑上的错误,例如:除以0。
2.函数名不区分大小写,变量区分大小写。
3.检测变量类型:is_bool(),is_string(),is_float(),is_array(),is_object()。
4.检测是否存在:file_exists(),class_exists(),property_exists()
5.将stdclass object转换为数组:get_object_vars($test);
7.require/include遇到即包含文件,require_once/include_once只包含一次。
require/require_once遇到错误会终止,一般放在程序的最前面;
include/include_once遇到错误会继续执行,一般放在流程控制语句中。
8.session_start()函数前面如果需要有输出:ob_start();session_start();$_SESSION[user]=1;ob_end_flush();
9.使用empty(),对于""、0、"0"、NULL、FALSE、array() 都认为是空的。
10.parse_url : 解析URL,返回其组成部分
11.http_build_query() : 生成 url_encode 之后的请求字符串
12.usleep 微秒,sleep 秒:sleep(2) = 2秒。
13.获取图片尺寸:getimagesize("1.jpg");
14.页面js调试:console.info(“输出info”); console.warn(“输出警告”); console.error(“输出错误”);
15.PHP中的错误级别:Deprecated/Notice/Warning/Fatal error/Parse error(最高级别的错误,语法解析错误);
16.屏蔽错误输出:error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING);
17.代码调试:debug_backtrace(); 实参个数:func_num_args(); 返回某一个实参:func_get_args();
18.将数组结果以字符串的形式输出(可以直接将数组的结果以字符串的形式写入日志):
echo print_r($arr,1); 或者 echo var_export($arr,1);
 
1.七种布尔false:0,0.0,'','0',false,array(),NULL。注意,字符串的'false'的布尔值是 true
2.遍历数组的三种方式和区别:
(1)for循环:只能遍历数字索引。
(2)foreach循环:可以遍历数字索引和关联索引,并且会对数组进行reset()操作
(3)while、list()、each()组合循环:可以遍历数字索引和关联索引,但是不会对数组进行reset()操作
3.continue 2 表示跳出外面第2层循环,其他数字同理。
4.全局变量:把外部的全局变量用于函数内部,在内部的变量使用global $a,或者$GLOBALS['a']
5.静态变量:仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不会消失(不会释放内存),使用 static $a
说明:仅初始化一次;初始化时需要赋值;每次执行函数该值会保留; static修饰的变量是局部的,仅在函数内部有效;
可以记录函数的调用次数,从而可以在某些条件下终止递归。
 
isset和empty
isset用来判断变量是否存在;empty用来判断变量是否有值。
$a不存在和$a = null 两种情况在isset看来为true,其余为false(包括$a = ‘’;)
$a = null, 0, false, ‘ ’, 或不存在时在empty看来为true,其余为false。
 
PHP操作MySQL:
mysqli_connect();
mysqli_query();
mysqli_close();
mysqli_fetch_array();
mysqli_fetch_assoc();
mysqli_fetch_object();
mysqli_num_rows()
 
[提高PHP性能的方法]
  • 把类定义成static
  • echo比print快
  • 使用函数代替正则
  • 不要滥用@操作符
  • 循环内部不要声明变量
  • echo用逗号连接字符串效率高
  • 多维数组尽量不要循环嵌套赋值
  • 用全等号代替双等,减少类型转换
  • 不需要的数组或数据及时unset掉
  • 尽量少用全局变量和对象属性($this->num++)
  • 使用ip2long()和long2ip()把IP地址转成整型
  • require比require_once()快,并且尽量不要使用相对路径
  • 字符串用单引号而不是双引号,因为双引号里面会判断是否有变量
  • 打开apache的mod_deflate模块可以提高网页浏览速度
 
[优化网站响应时间]
  • 减少HTTP请求。例如:合并JS和CSS文件,利用浏览器的Cache功能避免下载相同的文件
  • 不长修改的动态内容静态化
  • 优化数据库
  • 使用负载均衡,例如HTTP重定向、反向代理服务器
  • 使用缓存,例如memcached和redis
 
[常用的字符串函数]
* 转换字母大小写:strtolower()全部小写、strtoupper()全部大写、ucwords()首字符转换为大写
* 计算长度:strlen($str); substr_count($str,子字符串);str_word_count($str);//共有多少个单词
* 查找子字符串第一次出现后的所有内容:strstr($str,子字符串); 忽略大小写用stristr();
* 查找子字符串第一次出现的位置数值:strpos($str,子字符串); 忽略大小写用stripos();
* 复制字符串:str_repeat($str,复制多少次);
* 反转字符串:strrev($str);
* 替换字符串:str_replace($old,$new,$str); substr_replace($str,替换的字串,开始替换的位置 [,替换多少个字符]);
* 分割英文字符串为等长度元素的数组:str_split($str[,分割后的数组的每个元素的长度 默认1]);
* 分割中文字符串为等长度元素的数组:preg_split('/(?<!^)(?!$)/u', $str);
* 比较字符串大小:strcmp($str1,$str2); strncmp($str1,$str2,比较多少个字符);
 
[常用的数组函数]
数组排序
sort()低到高,rsort()高到低。
保持键值对应关系使用 asort()和arsort()。
对键排序ksort()和krsort()。随机排序 shuffle()。
数组key相关
array_keys() 返回数组中所有的键名
array_values() 返回数组中所有的值,key从0开始。
array_key_exist() 判断一个数组中是否包含指定的键名
数组value相关
array_push($arr,‘newValue’); 在数组结尾插入一个或多个元素
array_unshift() 在数组开头插入一个或多个元素。
array_shift() 删除数组中的第一个元素,并返回被删除元素的值。
array_rand(array,number); 从数组中随机选出一个或多个元素,并返回。
range(min,max [,step默认是1]); 快速创建具有连续数值的数组
array_pop():获取数组中最后一个元素。
array_unique():删除数组中的重复元素。
array_slice(array,offset,length) 在数组中根据条件取出一段值,并返回。
get_object_vars($obj); 将stdclass object对象转换为数组
合并和拆分
array_merge($arr1, $arr2,...) 和 array_combine(); 合并多个数组
array_chunk(数组,结果数组的元素个数 [,bool键名是否保持]); 将一个数组分割成多个数组
回调函数
array_filter() 用回调函数过滤数组中的单元
array_walk() 数组中的每个成员应用用户函数
array_map() 将回调函数作用到给定数组的单元上
计算和判断
count() 函数,后面加上COUNT_RECURSIVE或者true,可以统计多维数组的所有节点的个数。
in_array() 判断某元素是否在数组中。
array_sum($arr); 计算数组元素的和
array_count_values() 统计数组中所有值出现的次数。
array_intersect(array1,array2,[array3...]); 计算数组的交集。
array_diff(); 计算数组的差集
array_reverse($arr); 翻转数组
array_flip($arr); 对调数组的键和值
 
[PHP的运行原理]
CGI:PHP解析器与webserver的一个协议桥梁。
FastCGI:每次处理完请求后不会kill掉进程,会保留进程。属于CGI的改良版本。
PHP-FPM:PHP FastCGI Process Manager,PHP FastCGI的进程管理器。
 
 
[PHP常见配置项]
register_globals:注入变量,打开后各种变量都会被注入,不安全,建议关闭。
allow_url_fopen:是否允许打开远程文件
allow_url_include:是否允许远程包含文件
date.timezone:设置时区
display_errors:是否显示错误
error_reporting:错误级别设置
safe_mode:安全模式
upload_max_filesize:上传最大文件的大小
max_file_uploads:上传的最大文件数量
post_max_size:提交的POST数据的最大大小
 
Session 共享(单点登录)
利用Redis实现简单的Session共享:
用户第一次进入商城首页,给一个CSESSIONID,(不用JSESSIONID的原因),用户添加商品,各种需要记录的操作,都与这个CSESSIONID关联起来;
当使用登录操作时候,将这个用户的信息,如用户名等存入到redis中,通过K_V,将CSESSIONID加一个标志作为key,将用户信息作为value;
当用户点击页面被转发到其他服务器时候,在需要验证是否同一个用户时,就可以从redis中取出value,进行验证用户信息,实现共享。
原文地址:https://www.cnblogs.com/rxbook/p/10912942.html