
php笔记
文章平均质量分 81
普通网友
这个作者很懒,什么都没留下…
展开
-
php内核学习笔记(一,运行方式)
一、用户代码的执行当用户代码输入给PHP内核去执行的时候,PHP内核会对PHP代码进行词法分析和语法分析,词法分析是把PHP代码分割成一个个的“单元”(TOKEN),语法分析则将这些“单元”转化为Zend Engine可执行的操作。然后PHP内部的Zend Engine对这些操作进行顺次的执行。Zend Engine是PHP内核的核心部分,负责最终操作的执行和结果的返回,可以理解成为PHP内核中的“发动机”。于是PHP代码的执行过程可以简单描述为下图:二、SAPI接口Server App原创 2022-05-14 17:27:05 · 608 阅读 · 0 评论 -
FastCGI协议
FastCGI 简介FastCGI是Web服务器和处理程序之间通信的一种协议,是CGI的一种改进方案,FastCGI像是一个常驻(long-lived)型的CGI,它可以一直执行,在请求到达时不会花费时间去fork一个进程来处理(这是CGI最为人诟病的fork-and-execute模式)。正是因为他只是一个通信协议,它还支持分布式的运算,所以 FastCGI 程序可以在网站服务器以外的主机上执行,并且可以接受来自其它网站服务器的请求。FastCGI 是与语言无关的、可伸缩架构的 CGI 开放扩展,转载 2022-05-14 17:11:22 · 1551 阅读 · 0 评论 -
php代码复用 trait 的一些要点
php不能多继承,只能多层继承,但是php5.4版本后为了解耦,也提供了另一种代码复用方法trait。trait的一些关键点需要注意1,trait怎么使用trait的使用方法就是用trait构建一个类trait firstClass { function test(){ echo 'first'; }}class sonClass extends fatherClass { use firstClass;}$obj = new sonCl原创 2021-08-06 10:54:11 · 273 阅读 · 0 评论 -
laravel 7 报错 file_put_contents() failed to open stream: Permission denied for Session folder
这个问题是因为权限导致的,laravel因为本身太重了,导致需要搞文件缓存,这时候写入缓存的file_put_contents函数发现在storage文件夹下没有权限,那给他权限,并清除缓存chmod -R gu+w storagechmod -R guo+w storagephp artisan cache:clearg是组权限,u是当前用户权限,o是其他用户权限,+w是增加写权限...原创 2020-11-29 15:06:34 · 656 阅读 · 0 评论 -
laravel 7 报错 The stream or file “/var/www/storage/logs/laravel.log“ could not be opened in append
laravel项目部署到linux的时候出现The stream or file "/home/www/storage/logs/laravel.log" could not be opened in append mode: failed to open stream: Permission denied网上的各种教程都是要修改文件夹权限,实际上文件夹权限早就是777了,这时候还有一些centos系统会装SElinux的东西,这是个安全组件,具体就不多说了,现在临时关闭一下SELINUX.原创 2020-11-29 14:55:31 · 9607 阅读 · 2 评论 -
git 使用代理访问github与删除代理
查看本地的代理端口设置代理,注意,https的端口,前面加上httpsgit config --global http.proxy http://127.0.0.1:10809git config --global https.proxy https://127.0.0.1:10809mypc@DESKTOP-51C5OC3 MINGW64 /c/work/mooc (master)$ git config --global http.proxy http://127....原创 2020-11-29 11:29:35 · 1046 阅读 · 0 评论 -
php面试常规问题主键索引和唯一索引有什么区别
主键一定是唯一性索引,唯一性索引并不一定主键。主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。主键创建后一定包含一个唯一性索 引,唯一性索引并不一定就是主键。唯一性索引列允许空值,而主键列不允许为空值。主键列在创建 时,已经默认为空值 + 唯一索引了。主键可以被其他表引用为外键,而唯一索引不能。一个表最多只能 创建一个主键,但可以创建多个唯一索引。主键更适合那些不容易更改的唯一标识,如自动递增列、身 份证号等。在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。原创 2020-11-26 23:03:07 · 6695 阅读 · 0 评论 -
php判断来源是否是蜘蛛
/** * 判断是否是蜘蛛 */function fromRobot($except = '') { $ua = strtolower ( $_SERVER ['HTTP_USER_AGENT'] ); $botchar = "/(baidu|google|spider|soso|yahoo|sohu-search|yodao|robozilla|AhrefsBot)/i"; $except ? $botchar = str_replace ( $except . '|', '',.原创 2020-11-25 20:12:51 · 865 阅读 · 0 评论 -
mysql的innodb快速count技巧
mysql的innodb因为使用的是聚簇索引,导致count的时候按照索引count,会把聚簇索引里面的数据一起扫描了,导致count起来非常慢,30w的数据,做一次count(*)竟然高达30多秒。经过网上查询看到一个大佬的测试https://imysql.cn/2008_06_24_speedup_innodb_count发现一个技巧,可以额外创建一个字段,字段和主键ID数据一致,然后对该字段建索引,然后再使用count,这样速度就飞起了...原创 2020-11-21 17:39:47 · 848 阅读 · 0 评论 -
virtualbox centos7 安装增强功能时报错【未能加载虚拟光盘】非图形界面下的解决方案
报错如图在安装增强功能的时候,无论如何都一直报未能加载虚拟光盘,在网上找了好多教程,都是有图形界面的,恰恰我这个没有图形界面,然后再sf论坛上找到一个差不多的,但是他说的也很含糊,倒是指明一个方向第一,把这个iso文件装载到windows里面第二步,挂载lsscsi 命令查看下linux可以看到 /dev/sr0 出现了证明光驱已经出现了在media目录下建立一个新的目录用于挂载你的iso文件,这个目录可以随便命名,我就取个名字叫cdpath建立文件夹...原创 2020-10-27 22:36:35 · 4038 阅读 · 4 评论 -
centos7 下nginx报403错误的处理记录,如何修改selinux使其正常
nginx刚装好,因为配置文件里面设置的网站根目录是自己在/home下的www目录,所以访问的时候直接报403猜测一:权限问题,整个文件夹改成了755,然后又改成777,还是不行猜测二:nginx的运行用户组权限不够ps -aux | grep nginx发现用户是nginx,然后去配置文件(nginx的配置文件)修改,把用户改成了root,重启nginx,发现还是403那就应该不是nginx的配置问题猜测三:SELinux问题,这个问题就是linux的一个安全...原创 2020-10-27 15:51:02 · 3828 阅读 · 0 评论 -
nginx指定配置文件启动
第一步:先关闭nginx, kill掉所有的nginx进程pkill -9 nginx# 运行命令参看nginx服务是否关闭netstat -tnulp | grep nginx # 参看端口是否关闭systemctl status nginx # 查看服务是否关闭第二步:指定nginx的启动配置文件,要写完整路径nginx -c -t /etc/nginx/nginx.conf # 配置文件路径# -c </path/to/config> 为 Nginx 指.原创 2020-10-26 18:38:11 · 21424 阅读 · 2 评论 -
【转载】Centos7.7 yum安装LNMP nginx1.18.0+php7.4.6
安装nginx 设置nginx安装源 可根据官网给出的进行设置点我跳转到官网设置这里将官网给出的centos的配置复制如下[nginx-stable]name=nginx stable repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfi.转载 2020-10-26 18:12:58 · 470 阅读 · 1 评论 -
Redis学习笔记
redis的优点redis是完全免费的,开源的,基于BSD协议的,高性能key-value的nosql数据库简单的key-value存储,性能极高Redis拥有更多的数据结构类型,支持丰富的数据库操作Redis支持数据持久化和数据恢复Reids所有操作都是原子性的服务器支持AUTH密码,就是可以设置登陆密码,区别于memcached安装Reids懒得介绍了,网上一找一大把Redis+php运行结构Redis命令命令说明Cli命令例SET设置一个 key原创 2020-10-22 14:34:29 · 120 阅读 · 1 评论 -
php thinkphp5.1 简单模拟redis秒杀实现
提前准备:准备一:redis在tp框架里是做一个cache用的,所以在tp框架里只用了简单的key-value,没有封装一些稍微高级的方法,所以先要自己封装一个redis方法,你也可以直接改cache目录下的Redis类,写个简单的方法,把redis实例暴露出去,用原生的redis方法来解决问题。本案例因为秒杀里只用到了hash类型方法和list类型方法,所以简单的封装下。①,在config里添加一些配置进入/application/config/cache.php 添加简单的配置,因为之前做的原创 2020-10-03 14:52:26 · 702 阅读 · 0 评论 -
php 父类访问子类属性的方法 后期静态绑定的使用
有这么一个需求,class B继承了 class A,但是在class A里面要使用class B的属性https://www.php.net/manual/zh/language.oop5.late-static-bindings.php原创 2020-09-28 00:15:38 · 289 阅读 · 0 评论 -
php 使用 bigpipe技术 简单笔记
1.配置nginx关闭proxy_buffering 为 off,关闭 gzip压缩, 设置 fastcgi_keep_conn 为 on2,设置php.inioutput_buffering = off3.用ob_flush来处理缓存测试:<?php echo 1; sleep(2); echo 2: sleep(2); echo 3; sleep(2); echo 4;这种情况下执行,要经过6秒...原创 2020-09-15 23:11:35 · 167 阅读 · 0 评论 -
[php面试题]PHP 在坐标系上给定四个坐标点,判断它们能不能组成一个矩形,是正方形还是长方形
思路:就是坐标系上找4个点,然后判断这些点和点之间能组合出多少长度的线,然后根据勾股定理看看是否能组成直角// 判断坐标系上的任意4个点是否可以组成一个矩形// 1,2个点一组,穷举所有组合方式// 2,计算每个组合方式2点之间的距离// 3,对产生的所有距离长度去重,计算数量,数量为3是长方形(假设),数量是2是正方形(假设)// 4,判断剩余的距离能否组成一个直角,利用勾股定理判断,如果不能组成直角三角形,可能是菱形、梯形、不规则四边形error_reportin..原创 2020-09-04 17:25:41 · 894 阅读 · 0 评论 -
PHP+MySQL百万数据插入对比:正常插入、事务、拼接sql
PHP+MySQL百万数据插入第一种方法:使用insert into 插入,代码如下:最后显示为:23:25:05 01:32:05 也就是花了2个小时多! 这是时间撸几把 都行。。。第二种方法:使用事务提交,批量插入数据库(每隔10W条提交下)最后显示消耗的时间为:22:56:13 23:04:00 ,一共8分13秒 ,代码如下:时间是一下缩短不少但还是有点长。第三种方法:使用优化SQL语句:将SQL语句进行拼接,使用 insert into table () values转载 2020-08-12 22:41:33 · 359 阅读 · 0 评论 -
centos7 编译安装php7.4.7
1,先删除所有的phpyum remove php入股之前已经编译安装了其他版本的phprm -rf /usr/local/php /bin/php /usr/local/sbin/php-fpm /usr/local/bin/php /usr/local/bin/pear /usr/local/bin/peardev /usr/local/bin/pecl /usr/local/bin/phar /usr/local/bin/phar.phar /usr/local/bin/php-cg.原创 2020-06-28 19:24:24 · 3878 阅读 · 1 评论 -
php-fpm报错Unable to create the PID file (/usr/local/php/var/run/php-fpm.pid).: Read-only file system
ERROR:Unable to create the PID file (/usr/local/php/var/run/php-fpm.pid).: Read-only file systemERROR: FPM initialization failed这个错误是因为没有权限创建php-fpm.pid文件,导致启动不起来深层原因现在也搞不懂,倒是在外网找到一个方法在编译安装php的时候,有个过程,就是把php-fpm写入系统服务里面cd /usr/lib/systemd/syste.原创 2020-06-26 13:22:43 · 2982 阅读 · 0 评论 -
centos下php7安装GD库,各种问题各种报错,遇到各种坑,还好最后安装上了
发现一个让人无语的事,php7.4编译安装后,gd库扩展没有安装(不知道为啥,可能是编译的时候7.4已经把编译参数 --with-gd 改成了--enable-gd,大概率我没改?)运行rpm -qa | grep gd发现没有gd.so郁闷运行yum list | grep php-gd尴尬,yum只有一个非常老的gd,而且不是php7 用的,我以为是国内yum源不行,换了国外的源,还是没有,结果google的时候发现,外国人也遇到了这个问题https://www.di...原创 2020-06-24 20:58:08 · 5122 阅读 · 9 评论 -
php二维数组排序
今天看了一个大神的帖子,觉得不错,转一下原文链接:https://www.cnblogs.com/wenzheshen/p/9455554.html二维数组按照其中的一列进行排序假设一个数组$arr是一个成绩表,按照语文成绩排序$arr = array( 'xiaoming' => array('yuwen'=>89,'shuxue'=>79), ...转载 2019-09-20 15:28:15 · 145 阅读 · 0 评论 -
arsort ,asort,ksort,krsort等排序,无法数组同值稳定排序
原因:PHP底层是用快排实现的。无法保证元素的顺序。所以要使用natsort();搬运一个w3c的例子$temp_files = array("temp15.txt","temp10.txt","temp1.txt","temp22.txt","temp2.txt");sort($temp_files);echo "标准排序:";print_r($temp_files);...原创 2019-03-23 15:26:50 · 460 阅读 · 1 评论 -
windows下apache+php环境运行laravel 页面报was not found on this server. 页面找不到
页面一直报was not found on this server.但是根目录没问题,写路由各种无法通过。Route::get('/yyy', function () { echo '123';});想了想应该是apache的配置出问题了,差了下果然,重写功能没开需要做:1,httpd.conf文件的LoadModule rewrite_module modules...原创 2019-03-17 23:57:12 · 1490 阅读 · 0 评论 -
apache在windows10下报错You don't have permission to access /client.php on this server.
今天在电脑上安装了apache24 和 php7.3 ,竟然报了You don't have permission to access /client.php on this server.错误,没权限……我查了好多资料,各种改vhosts配置都不行,最后发现在httpd.conf有一行配置有问题<Directory /> AllowOverride none ...原创 2019-03-10 00:06:27 · 1104 阅读 · 0 评论 -
php 使用imagick旋转图片
首先安装imagick,这段就不累述了,你都要旋转图了说明早就安装好了imagick在php里面已经有封装好的函数了Imagick::rotateImageImagick::rotateImage ( mixed $background , float $degrees ) : bool$background是旋转后,比如一个正方形旋转后是个菱形,有大量的空白背景,这个backg...原创 2019-01-16 11:29:43 · 1313 阅读 · 0 评论 -
php下ipv6转纯数字和反转
ip2long或者long2ip对ipv6暂不支持,需要手动写一个// ip转数字function ip2long_v6($ip) { $ip_n = inet_pton($ip); $bin = ''; for ($bit = strlen($ip_n) - 1; $bit >= 0; $bit--) { $bin = sprintf('%0...翻译 2019-01-14 13:33:23 · 1059 阅读 · 0 评论 -
如何将JS中的json对象转换成PHP可以识别的json对象
遇到个获取汇率的需求找到和讯网的一个页面,http://forex.hexun.com/rmbhl/,看到页面上有个接口可以拿数据拿到后发现是个js的json对象$data = "PereMoreData([{currency:'阿尔及利亚第纳尔',refePrice:'5.805',code:'NGN '},{currency:'阿根廷比索',refePrice:'18.221',...转载 2019-01-02 16:22:14 · 2455 阅读 · 0 评论