1.DIRECTORY\_SEPARATOR
php目录分隔符:\
在windows我们习惯性的使用“\\”作为文件分隔符,但是在linux上系统不认识这个标识,于是就要引入这个php内置变量了:DIRECTORY_SEPARATOR
1.5**PHP_EOL**为换行符。
2.# PHP常量PHP_SAPI与函数php_sapi_name()简介,PHP运行环境检测
(1)PHP_SAPI 用来判断是使用命令行还是浏览器执行的,如果 PHP_SAPI==’cli’ 表示是在命令行下执行
php判断解析php服务是由那种服务器软件,是采用那种协议 直接输出即可
代码如下:
<?php
echo PHP_SAPI;
?>
我的测试环境是nginx+fastcgi 输出结果为:
cgi-fcgi
如果是apache 运行环境,输出结果为
apache2handler
如果是命令行的形式执行,结果为
cli
这就是PHP_SAPI
(2)php_sapi_name() 是用来检测PHP运行环境的函数
例如,CLI 的 PHP 下这个字符串会是 “cli”,Apache 下可能会有几个不同的值,取决于具体使用的 SAPI。
以下列出了可能的值:
aolserver、apache、 apache2filter、apache2handler、 caudium、cgi (直到 PHP 5.3), cgi-fcgi、cli、 continuity、embed、 isapi、litespeed、 milter、nsapi、 phttpd、pi3web、roxen、 thttpd、tux 和 webjames。
3.
die()停止程序运行,输出内容
exit是停止程序运行,不输出内容
return是返回值
return:执行到该处退出,如果是在函数中,表示退出函数,如果是在脚本中,表示脚本停止执行
die是遇到错误才停止
exit是直接停止,并且不运行后续代码,exit()可以显示内容,例如exit('dsdsdsdf')。
exit(0):正常运行程序并退出程序;
exit(1):非正常运行导致退出程序;
4
dirname() 函数返回路径中的目录部分
D:\\phpstudy\\PHPTutorial\\WWW\tp5\public
再一次:D:\\phpstudy\\PHPTutorial\\WWW\tp5
再一次:D:\\phpstudy\\PHPTutorial\\WWW
5.
realpath() 函数返回绝对路径。
该函数删除所有符号连接(比如 '/./', '/../' 以及多余的 '/'),返回绝对路径名。
6.spl_autoload_register()
```
<?
class test {
public static function loadprint( $class ) {
$file = $class . '.class.php';
if (is_file($file)) {
require_once($file);
}
}
}
spl_autoload_register( array('test','loadprint') );
//另一种写法:spl_autoload_register( "test::loadprint" );
$obj = new PRINTIT();
$obj->doPrint();?>
PRINTIT::doPrint()
同样会加载 PRINTIT.php文件
用法:
require_once('A.php');
\A::regist();
//注册自动加载
echo \User::test();//自动加载User.php文件
```
7.
'think\\Loader::autoload'
表示:'think\Loader::autoload'
\\转义字符,表示'\'
8.property_exists
主要作用是判断类或对象中的属性是否存在,存在是为true,不存在是false
bool interface_exists (string $interface_name [, bool $autoload = true ]) 判断接口是否存在
bool class_exists (string $class_name [, bool $autoload = true ]) 判断类是否存在
bool method_exists (mixed $object , string $method_name) 判断指定类或者对象中是否含有指定的成员函数
bool property_exists (mixed $class , string $property) 判断指定类或者对象中是否含有指定的成员变量。
function_exists()检测函数是否存在
is_callable )检测函数是否匿名函数
**function\_exists 比较简单点就是判断函数有没有被定义 而method\_exists 是判断类内的方法存不存在 is\_callable 检测参数是否为合法的可调用结构**
```
class Obj{
public $is_public;
protected $is_protected;
private $is_private;
public static $is_public_static;
const is_const=3;
}
$obj = new Obj();
var_dump(property_exists('Obj','is_public')); //true;
var_dump(property_exists($obj,'is_public')); //true;
var_dump(property_exists($obj,'is_protected')); //true;
var_dump(property_exists($obj,'is_private')); //true;
var_dump(property_exists($obj,'is_public1')); //false;
var_dump(property_exists($obj,'is_public_static')); //true;
var_dump(property_exists('Obj','is_const')); //false;
```
9.
```
[0=>'sasas'] 另一种写法:(array)'sasas'
```
10
```
var_dump(facade\App::class);
输出结果为:
"app\index\controller\facade\App"
‘app\index\controller\’为所在文件的命名空间
```
11.
strtr() 函数
```
把字符串中的字符 "ia" 替换为 "eo":
<?php
echo strtr("Hilla Warld","ia","eo");
?>
```
12.
```
$str='adafadsfadsff';
echo $str[0];
输出结果:a;
```
13.
microtime() 函数返回当前 Unix 时间戳的微秒数。
ucwords() 函数把字符串中每个单词的首字符转换为大写
ucfirst() 函数把字符串中的首字符转换为大写
lcfirst() - 把字符串中的首字符转换为小写
strtolower() 函数把字符串转换为小写
strtoupper() 函数把字符串转换为大写
strpos() 函数查找字符串在另一字符串中第一次出现的位置。
strrpos() 函数查找字符串在另一字符串中最后一次出现的位置。
查找 "php" 在字符串中最后一次出现的位置:
echo strrpos("You love php, I love php too!","php");
stristr() 函数搜索字符串在另一字符串中的第一次出现,并返回字符串的剩余部分
strstr() 函数搜索字符串在另一字符串中的第一次出现并,返回字符串的剩余部分,对大小写敏感
trim() 函数移除字符串两侧的空白字符或其他预定义字符。
ltrim() - 移除字符串左侧的空白字符或其他预定义字符
rtrim() - 移除字符串右侧的空白字符或其他预定义字符
realpath() 函数返回绝对路径,该函数删除所有符号连接(比如 '/./', '/../' 以及多余的 '/'),返回绝对路径名。若失败,则返回 false。比如说文件不存在的话。
scandir() 函数以数组形式返回指定目录中的文件和目录
strtr() 函数转换字符串中特定的字符。strtr("Hilla Warld","ia","eo");
str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)
str_replace("world","Shanghai","Hello world!");把字符串 "Hello world!" 中的字符 "world" 替换为 "Shanghai";
14
memory_get_usage()函数返回内存使用量,memory_get_peak_usage()函数返回内存使用峰值,getrusage()返回CUP使用情况。但有一点请注意,在这些函数需要在Linux上运行
15.
$declaredClass = get_declared_classes();
获取当前加载的所有类
$composerClass = array_pop($declaredClass);
删除数组中的最后一个元素,返回值是最后一个元素
16.
pathinfo(path,options)函数以数组的形式返回文件路径的信息。
* PATHINFO_DIRNAME - 只返回 dirname
* PATHINFO_BASENAME - 只返回 basename
* PATHINFO_EXTENSION - 只返回 extension
* PATHINFO_FILENAME-只返回 FILENAME
```
<?php
print_r(pathinfo("/testweb/test.txt"));
?>
~~~
Array
(
[dirname] => /testweb
[basename] => test.txt
[extension] => txt
[filename] => test
)
~~~
```
17.
key() 函数返回数组内部指针当前指向元素的键名
reset() 函数将内部指针指向数组中的第一个元素,并输出。
18.# call_user_func_array函数详解
call_user_func函数详解
把第一个参数作为回调函数(**callback**)调用,把参数数组作(**param_arr**)为回调函数的的参数传入
```
代码如下:
(1)普通使用:
function a($b, $c) {
echo $b;
echo $c;
}
call_user_func_array('a', array("111", "222"));
//输出 111 222
(2)调用类内部的方法:
Class ClassA {
function bc($b, $c) {
$bc = $b + $c;
echo $bc;
}
}
call_user_func_array(array('ClassA','bc'), array("111", "222"));
//输出 333
(3)支持引用传递:
function a(&$b) {
$b++;
}
$c = 1;
call_user_func_array('a', array(&$c));
echo $c; //输出 2
```
19.
**func\_get\_args():返回一个包含函数参数列表的数组。**
**func\_get\_arg():返回指定的参数值。**
**func\_num\_args():返回调用函数的传入参数个数,类型是整型**
```
public function test(){
$res= $this->hello(1,2,3,4);
var_dump($res);
}
public function hello($a,$b,$c,$d){
$num=func_num_args();
$num2=func_get_arg(2);
$num3=func_get_args();
return $num3;
}
打印结果分别是:4,3,array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }
```
20# __CLASS__、get_class()与get_called_class()都是获取当前类名,完整类名,包含命名空间
区别:
![](https://img.kancloud.cn/ca/15/ca15d20e46f40089260122011b6cf14b_672x458.png)
21
php 5.3 后新增了__call与__callStatic魔法方法。
__call当要调用的方法不存在或权限不足时,会自动调用__call 方法。
__callStatic当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。
```
public function __call($func, $arguments){
}
public function __callStatic($func, $arguments){
}
```
22.错误方面的函数
~~~
// 关闭错误报告
error_reporting(0);
// 报告 runtime 错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// 报告所有错误
error_reporting(E_ALL);
// 等同 error_reporting(E_ALL);
ini_set("error_reporting", E_ALL);
// 报告 E_NOTICE 之外的所有错误
error_reporting(E_ALL & ~E_NOTICE);
~~~
```
通过 set\_error\_handler() 函数设置用户自定义的错误处理程序,然后触发错误(通过 trigger\_error()):
set\_error\_handler("customError") 不仅可以接受**函数**,还可以接受**类的方法(公开的静态方法 及 公开的非静态方法 都可以)**,但需要以**数组形式**传递,数组的第一值为“类名”,第二个参数为“方法名”,
```
```
set\_exception\_handler() 函数设置用户定义的异常处理函数。
set_exception_handler([__CLASS__, 'appException']);
```
```
当PHP程序执行完成后,自动执行register\_shutdown\_function函数,该函数需要一个参数,用来指定由谁处理这些后续的工作。其中,**程序执行完成**,分为以下几种情况:
第一种:php代码执行过程中发生错误
第二种:php代码顺利执行成功
第三种:php代码运行超时
第四种:页面被用户强制停止
register_shutdown_function([__CLASS__, 'appShutdown']);
```
23. get_object_var($object)
返回类中所有的非静态方法和非静态属性
24.array_change_key_case() 函数将数组的所有的键都转换为大写字母或小写字母。
* CASE_LOWER - 默认值。将数组的键转换为小写字母。
* CASE_UPPER - 将数组的键转换为大写字母
25uniqid(prefix,more_entropy)
uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。
prefix 可选。为 ID 规定前缀。如果两个脚本恰好在相同的微秒生成 ID,该参数很有用。
more_entropy 可选。规定位于返回值末尾的更多的熵。
- linux
- lanmp
- lanmp
- apache
- Apache2.4.x与Apache2.2.x的一些区别
- 跨域请求 Apache 服务器配置
- apache服务器安装配置ssl数字证书,https访问
- put请求跨区
- apache允许跨域请求 & ajax 自定义header
- 自定义header
- 安装最新版openssl
- nginx
- 解决Nginx出现403 forbidden的方法
- nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)
- 如何用linux命令查看nginx是否在正常运行
- nginx反向代理
- nginx 编译安装
- nginx重定向
- 一个域名对应多个vue项目
- 关于http和https允许请求设置header问题
- nginx配置ssl证书
- 配置宝塔nginx支持tp5路由规则
- nginx获取自定义请求头header
- mysql
- 创建还量表
- 解决Navicat 出错:1130-host . is not allowed to connect to this MySql server,MySQL
- mysql慢查询
- explain
- 索引
- sphinx
- coreseek(sphinx)错误:WARNING: attribute 'id' not found - IGNORING原因及解决方法
- coreseek在windows安装问题和使用步骤
- coreseek常见错误
- coreseek php操作
- mysql5.6升级5.7.21
- sql操作
- mysql函数
- phpmyadmin上传文件大小限制
- mysql主从复制
- 单机主从配置
- 修改mysql端口后修改相应的phpmyadmin端口
- MERGE分表
- MySQL 5.7.22 多实例安装(二进制免编译安装模式)
- 解决phpmyadmin mysqli_real_connect(): (HY000/2002): No such file or directory错误
- Mysql服务器无法存emoji表情的解决方案
- /var/run/mysqld 目录每次重启后都需要手动去创建并赋权mysql用户才能起到mysql
- mysql排序
- mysql关键字冲突
- mysql备份
- mysql5.7密码修改
- 更改MySQL数据库目录位置
- mysql5.6安装
- 字符集与排序规则
- mysql 锁
- mysql事务性
- php
- centos7 升级 php 5.4 -> php5.6
- php扩展
- linux切换默认php版本(宝塔)
- vsftpd
- 关于vsftp出现Restarting vsftpd (via systemctl): Job for vsftpd.service failed because the control 的解决办法
- vdb
- fdisk
- parted
- 磁盘小知识
- CentOS7.x系统根目录分区扩容
- Linux 格式化分区 报错Could not stat --- No such file or directory 和 partprobe 命令
- 添加swap交换区
- root
- Centos创建和修改用户及密码命令
- linux 命令终端提示符显示-bash-4.2#解决方法
- firewall
- centOS7下安装GUI图形界面
- 在Linux主机上,安装上传下载工具包rz及sz
- ping: www.baidu.com: Name or service not known centos7
- linux中 you have newmail in /var/spool/mail/root
- CentOS7启动SSH服务报:Job for ssh.service failed because the control process exited with error code.......
- ifconfig,netstat 命令找不到解決办法
- CentOS7系统时间与真实时间相差8小时
- Centos7:利用crontab定时执行任务
- crontab命令
- /usr/bin/curl 执行外链
- speedtest-cli命令,网速测试
- yum 卸载命令
- 用户管理
- PATH环境变量
- rpm 命令
- 防火墙和网络的安装
- nohup
- vim命令
- 清理缓存命令
- 错误集
- tar解压包的时候出现错误 gzip: stdin: not in gzip format
- 在linux下创建自定义service服务
- 时钟同步
- 查找大文件
- redis
- yum安装
- redis主从复制
- php用法
- redis表的特性
- redis 锁
- redis事务
- redis主从配置+哨兵模式
- redis应用场景
- redis高并发集群下常见问题
- redis思维导图
- 脑图1
- 脑图2
- redis编码
- redis字符串编码
- hash编码
- list编码
- set编码
- zset编码
- 内存回收和内存共享
- redis小知识点
- ffmpeg
- yum安装ffmpeg
- ffmpeg-php类库安装及使用
- make安装
- WebRTC
- 房间服务器
- 信令服务器
- 打洞服务器
- PHP识别二维码(php-zbarcode)
- centos7.4安装Imagemagick
- 第二种方式
- linux小知识
- 查看日志命令
- linux CPU使用率过高或负载过高的处理
- swoole安装
- mq安装
- RabbitMQ安装
- php-amqplib使用--基本使用
- RabbitMQ使用技巧
- tp5
- problem
- thinkphp5的mkdir() Permission denied问题
- 5.5版本以上”No input file specified“问题解决
- 路由带参数的翻页,第二页无数据
- 报错A non well formed numeric value encountered(Thinkphp5时间戳自动转换问题)
- order排序没反应
- tp5分页--搜索
- tp5文件上传---宝塔
- 小知识
- return
- volist标签中使用eq标签 下拉列表选中selected
- TP5写入避免某字段重复的问题
- tp5 --url大小写
- tp5接收数组
- json存储与查询
- 接收参数为null
- php替换str_replace的使用方法,支持多个替换
- postman传数组参数
- Request 排除变量传参
- sql连表统计查询
- php循环
- 模型column方法
- 修改器与获取器
- mysql数据库group与order不能同时使用
- mysql三表查询
- json数据
- 获取数组第一个获第二个元素的键值
- mysql除以100计算
- mysql分组统计
- tp5.1 高级查询之 表里2字段比较大小
- whereOr()用法
- param数字参数,不能用==判断相等,需要用=来判断
- if判断
- tp5随机排序
- 短链接算法
- $_FILES["file"]二进制数据获取
- 跨域
- web.config
- iis: httpd相应标头
- thikphp模板中一维数组如何循环
- tp5 视频上传及自定义命名
- 搜索附近的人
- 小程序
- uploadFile:fail Error: unable to verify the first certificate
- 安卓手机打开小程序提示:request:fail ssl hand shake error
- tp5.1引入库文件
- composer
- tp5小知识
- TP5.1隐藏public和index.php
- tp5扩展
- 二维码
- phpexcel
- 谷歌验证码
- 谷歌验证码2
- mysql时间统计
- union合并查询并分页
- tp5底层框架学习
- php未知函数
- 类的知识点
- 三大设计模式
- 反射机制
- php常用内置类
- php小知识点
- 变量,函数名,参数前加&,什么意思
- PHP中 比较 0、false、null,'' "
- php小常识
- php缓存
- Trait特性
- php -- 取路径:getcwd()、DIR、FILE 的区别
- php关于类的常用概念
- php 类与对象全面了解
- php命名空间与引入
- php常见魔法常量
- php常见魔法函数
- PHP 超级全局变量
- tp5.1本身小知识
- 框架运行流程
- 框架教程总结
- 类的自动加载
- 配置文件
- ArrayAccess用法
- yaconf学习
- yaml学习
- config类重点
- php小知识2
- 多语言切换
- jwt(token)
- redis连接池
- 百度富文本
- 图片路径转换
- layui
- 复选框
- 获取视频第几帧作为封面图
- mysql查询
- FIND_IN_SET(str,strlist)
- PHP
- 函数取整
- array
- 日期
- header
- php获取一维,二维数组长度的方法
- php中数组和字符串的相互转换
- php对数组开头与末尾的元素进行插入与移除
- 队列
- PHP substr截取中文字符出现乱码的问题解疑
- foreach遍历数组并添加属性(下标)
- 数组排序
- PHP实现保留两位小数的三种方法
- 对象转数组
- php小知识
- 阻塞IO和非阻塞IO,异步与同步的区别
- 后台运行
- 超时
- php 高精度计算的问题
- move_uploaded_file
- PHP SplQueue 队列简介
- @,&&等php符号
- PHP命令行脚本接收传入参数的三种方式
- php执行linux命令
- 一些封装函数
- PHP获取文件大小
- PHP 生成随机字符串与唯一字符串
- PHP去除emoji表情
- ip
- php把时间计算成几分钟前,几小时前,几天前的函数
- https
- ssl证书
- 远程登入密码和端口修改
- apache配置https
- problems
- 响应状态status为canceled,解决办法
- PHP Restful PUT方法的参数提交及接收
- HTTP之预检,两种请求
- http增删改查理解
- js
- js数组与字符串的相互转换
- js移除Array中指定元素
- 使用sessionStorage、localStorage存储数组与对象
- 子页面调用父页面方法
- input文件上传
- 随机字符串
- 数组操作
- js 传递数组
- token接入验证
- 用文件来保存token
- 删除用户资料
- 微信function
- 接入验证及点击事件
- 基础token
- 获取用户资料
- curl
- 链接分享
- 网页授权登入
- 微信被动回复用户消息
- 生成微信二维码
- WxPay
- 单一文件,不能加额外参数
- tp5引用微信支付官方库文件
- 微信二维码支付
- 其他
- 手机端发送ajax请求,后台有可能会接收不到到请求(360浏览器和ie浏览器)
- 短信发送
- git
- postman无法正常返回结果Could not get any response
- web服务器配置
- 高并发方案
- nginx防盗链和限制请求速度
- 高并发概念与测试工具
- 定时秒杀方案
- web接口
- yzdd
- 接口1
- 接口2
- spx
- 接口说明
- 新闻表sbh_artnews字段说明
- 用户表sbh_homeuser
- 用户认证表sbh_usertrue
- txsh
- 接口_txsh_1
- chat消息格式
- 表字段
- txsh_第三方接口
- GatewayWorker
- 向对方发送消息,对方会掉线
- 负载均衡
- html
- html中引入调用另一个html的方法
- python
- linux安装--python3.6
- Centos7卸载Python2.7之后恢复yum
- pycharm汉化
- python错误集
- fatal error: Python.h: No such file or directory
- Python小知识
- python中两个重要的工具setuptools和pip的安装
- 基础知识点
- 学习笔记
- tornado基础流程
- 请求与响应
- 以太坊
- 以太坊账户管理
- 一些方法的更新弃用
- 小知识点
- web3.eth.accounts 和 web3.eth.personal 创建account的区别
- web3.py中sendTransaction和sendRawTransaction之间的区别
- 测试网和主网区别
- 以太坊gas、gaslimit、gasPrice、gasUsed详解
- web安全
- web渗透--全面介绍
- 大概介绍
- xss--介绍
- sql注入-介绍
- 文件上传下载-介绍
- 越权--介绍
- xxe--介绍
- 暴力破解
- xss漏洞安全编码系列详解
- 反射型
- DOM型
- 存储型
- 图片隐写
- sql注入详解
- 数据库和其他--介绍
- mysql爆破
- web安全--工具
- sqlmap
- 介绍与安装
- sqlmap攻击方式
- Sqlmap中的其他
- sqlmap--get攻击
- sqlmap--post攻击
- sqlmap--常用选项及命令
- sqlmap--详解
- sqlmap--查看
- web安全简单总结
- api功能扩展
- 阿里云短信
- 阿里云短信sdk新版用法
- 阿里云对象存储 OSS
- 七牛云上传
- qq邮箱发送短信验证码
- 通过ip获取归属地
- 支付插件
- zoujingli
- swoole
- swoole启动关闭方案
- swoole服务端主动推送消息
- 创建websocket--systemctl自定义启动服务
- 创建php脚本来启动关闭websocket服务
- swoole小知识
- 进程/线程结构图
- 区块链
- 区块链概念理解
- usdt小知识点1
- 区块链架构1.0、2.0与3.0梳理
- 理解usdt和代币,智能合约,基础货币
- 波场tron
- 账号创建
- 代币转账