PHP语言
php语言开发
hxthon
博观而约取 厚积而薄发
展开
-
Composer中~和^的含义
关于这两个字符的含义,网上已经很多的文章进行过介绍了。但是,我觉得介绍的都比较官方你。你用力去理解的话,也是可以理解的。本篇文章不是对哪些介绍的再次赘述。只是提供一个比较简单直接的方法,帮助你去区分。一、背景知识一个扩展包的通常是这样的。\www\wwwroot\web>php artisan --versionLaravel Framework 6.20.27这里的laravel的版本是6.20.27。6 表示主版本号20 表示次版本号27 表示修订号二、^和~的功能^原创 2021-05-31 14:15:29 · 1503 阅读 · 1 评论 -
PHP如何以Int的形式存储IP地址
以下是我的编写的IP转int的单例模式。要求:PHP版本^7.1可以直接使用低版本的应用,删除参数类型和返回值类型,也可以直接使用。源码如下:<?phpnamespace App\Utils;class IntIpUtils{ private static $instance; private function __construct() { } /** * @return IntIpUtils 返回当前的实例 */原创 2021-04-07 10:35:06 · 528 阅读 · 1 评论 -
PHP实现一个自动依赖解析原型[代码]
依赖解析器<?phprequire 'lib.php';class App{ // 创建自动解析函数 function build($class){ $reflect = new ReflectionClass($class); if(!$reflect->isInstantiable()){ throw new Exception('cannot be instantiated'); } $constructor = $reflect->getCo原创 2020-09-04 16:49:12 · 466 阅读 · 2 评论 -
PHP静态属性中的子类改变父类、子类改变子类的问题。
这里我定义了一个如下的类<?phpclass Foo{ protected static $instance; public static function setlnstance($ins){ static::$instance = $ins; } public static function getlnstance(){ return static::$instance; }}class Bar extends Foo{}这里static::的作用类似于s原创 2020-09-02 19:15:08 · 432 阅读 · 4 评论 -
PHP通过static关键词实现静态调用绑定
代码如下所示class A{ public static function who(){ echo __CLASS__; } public static function test(){ self::who(); }}class B extends A{ public static function who(){ echo __CLASS__; }}echo B::test(); //输出 A当我们打印B::test()的时候。此时输出的是A,其实我们想要的是原创 2020-09-02 16:16:47 · 271 阅读 · 1 评论 -
PHP的自动加载autoload和spl_autoload_register
一、自动加载的实现__autoloadPHP早期支持的版本。具体细节参加官方文档。如果你需要实现自动加载后,可以通过定义这个函数来启用。就是在你的PHP脚本中定义这样的一个函数,把加载逻辑都写在里面。比如这样:function autoload($className){ $name = strtolower($className); $path= "./includes/{$name}.php"; if(file_exists($path)){ require_once($path原创 2020-09-02 15:18:25 · 342 阅读 · 2 评论 -
php中继承父类的子类如何使用父类的方法实例化自己
这其实就是self和static的区别结论: 使用static即可。如下$model = new static();这是继承common的类namespace App\Models;class Order extends Common{ //}以下根据不同的common类修改,展示效果。self实例以下以laravel的模型继承来展示实例,common类的内容如下:<?phpnamespace App\Models;class Common extends Ou原创 2020-06-06 15:35:12 · 449 阅读 · 0 评论 -
小小经验分享-PHP
php 参数必须是某个对象的实例原创 2020-05-28 15:01:39 · 190 阅读 · 0 评论 -
php内置方法解析xml数据以及提取CDATA文档
说明我的xml数据是一个文件,就是导出的cnblogs的博客文件。下面使用php内置的三种方式,解析它,并没有使用安装包。因为我是用的laravel框架的调试的,所以里面,会充斥着laravel语法。获取方式类的形式$content = Storage::get('cnblogs/CNBlogs_BlogBackup_131_201904_202004.xml');$dom = new...原创 2020-04-27 21:33:07 · 428 阅读 · 0 评论 -
新版PHP7安装redis扩展并在laravel中运用
前言网上有关安装这个redis扩展文档有很多。多数都是相互借鉴的,里面还提到一定要把redis扩展放在php_igbinary.dll之后才行,否则就没有效果。这些都是老版本php的方法知道。新版的php7已经智能了很多了,不用这些了,而且,我下载的php7里面根本就没有php_igbinary.dll这扩展。根本就行不通。这里着重介绍下php-7.3.6-nts-x64扩展该如何安装。下...原创 2020-04-20 18:47:22 · 847 阅读 · 4 评论 -
php中对object对象使用foreach循环操作
抛出疑问php的对象是可以使用诸如foreach进行循环的。对象的循环,其实就是对像的开放属性进行的循环。但是在某些框架中,比如laravel中的对象循环,我们发现它并不是对属性进行遍历。普通对象:class abc{ public $a = 'a'; public $b = 'b'; protected $c = 'c'; private $d = 'd...原创 2020-04-15 11:18:40 · 1291 阅读 · 0 评论 -
php后端返回pdf流文件 前端接收和保存
文章:后端提供了php脚本文件,返回一个pdf流文件。前端前端去访问这个文件,可以直接读取流,并下载。windows系统和MAC系统都是正常可以下载原创 2020-04-09 09:04:48 · 2106 阅读 · 2 评论 -
正则反向肯定预查和正向肯定预查事例
使用它们获取title标签里面的内容并替换$content = '<title>测测你让你又爱又恨的是?</title ';$preg['#(?<=<title>)(.*)(?=</title)#'] = '{{$title}}';foreach($preg as $i=>$item){ $content = preg_replace(...原创 2020-04-08 17:34:29 · 353 阅读 · 0 评论 -
向下保留两位小数以及精度计算
php向下保留两位小数有以下几个办法这里先介绍下传统的php的保留两位小数,我们以$num = 1.269为例子。我们是想得到1.26这样的数字。然后再说明我写这篇文档的必要性一、传统的保留两位小数第一种,使用round()函数echo round($num,2); //1.27round会默认使用四舍五入的,与我们的需求不符第二种,利用sprintf格式化字符串...原创 2020-04-08 17:32:52 · 2185 阅读 · 0 评论 -
网站的压力测试
有两种方式,第一个是使用知名工具Webbench来测试,第二个是使用apache自带的ab.exe工具来使用。其中linux版本建议使用webbench,windows建议使用ab.exe。一、webbench的基本介绍。Webbench是知名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发。Webbench能测试处在相同硬件上,...原创 2020-04-08 17:32:13 · 3466 阅读 · 0 评论 -
什么是抽象类,为什么要写抽象类
抽象类与接口紧密相关,它们不能实例化,并且常常部分实现或根本不实现。抽象类和接口之间的一个主要差别是:类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承。从抽象类派生的类仍可实现接口。可以在创建组件时使用抽象类,因为它们使您得以在某些方法中指定不变级功能,但直到需要该类的特定实现之后才实现其他方法。抽象类也制定版本,因为如果在派生类中需要附加功能,则可以将其添加到基类而不中断代码。对...原创 2020-04-08 17:31:28 · 1534 阅读 · 0 评论 -
三分钟了解PHP的进程和线程
前言:php开发需要了解进程和线程,因为也会遇到多线程的开发。那什么是进程和线程呢?一起来唠唠吧。内容概要:什么是进程什么是线程进程和线程的关系php编程常见的进程和线程一、什么是进程进程是程序执行是的一个实例,进程能够分配给cpu和内存等资源。进程一般包括指令集和系统资源,其中指令集就是你的代码,系统资源就是指cpu、内存以及I/O等。二、什么是线程线程是进程的一个执...原创 2020-04-08 17:29:55 · 575 阅读 · 0 评论 -
浏览器模仿微信-如此的简单
一、先了解安卓微信和Ios微信的UA(User agent:用户代理)安卓微信UA:mozilla/5.0 (linux; u; android 4.1.2; zh-cn; mi-one plus build/jzo54k) applewebkit/534.30 (khtml, like gecko) version/4.0 mobile safari/534.30 micromesseng...原创 2020-04-08 17:28:57 · 4521 阅读 · 0 评论 -
ubuntu系统下php出现no version information available (required-by-php)的解决方案
php: /usr/local/openssl/lib/libssl.so.1.0.0: no version information available (required by php)php: /usr/local/openssl/lib/libssl.so.1.0.0: no version information available (required by php)php: /us...原创 2020-04-08 17:28:13 · 860 阅读 · 0 评论 -
解决apache重启失败的问题
错误1报错如下:C:\Apache2.2\bin>httpd -k restartWarning: DocumentRoot [E:/Wxapp] does not exist解决办法:打开httpd-vhosts.conf,然后检查是否有虚拟域名存在指向目录不存的问题例如我这里的错误原因是删除这个就行了。错误2报错如下:httpd: Could not reliab...原创 2020-04-08 17:27:30 · 1508 阅读 · 0 评论 -
PHP作为服务器jq使用ajax跨域请求
ajax实现跨域请求有两种方式:方法一:jsonp的方式jsonp方式的关键点在客户请求以jsonp作为数据类型,服务器端接收jsonp的回调函数,并通过回调函数进行数据的传输。具体代码如下:客户端:$.ajax({type:"GET",url:"http://192.168.20.88:80/class/index.php",dataType:"jsonp",jsonp:"cal...原创 2020-04-08 17:26:52 · 171 阅读 · 0 评论 -
当域名被微信封了怎么办?
当把网站嵌入到微信公众号时,也存在一个风险:微信封域名,这样所有微信端的页面打开就会提示:已停止访问该网页,如下图所示:最有效的解封方式在违规的页面处理完毕后,运营或产品同学赶紧给moment@tencent.com 发一封解封申请邮件。**邮件标题:**公司名/个人姓名+事项说明(如域名解封申请)**邮件内容:**提供域名,说明被封的原因(恶意攻击占多数吧),附上自己网站的链接...原创 2020-04-08 17:26:26 · 2054 阅读 · 3 评论 -
测试memcached是否连接成功
创建一个Memcached对象$m = new Memcached();传入一台或多台服务器//传入一台服务器$m->addServer('127.0.0.1','11211');//传入多台服务器$servers = array( array('127.0.0.1','11211'), array('127.0.0.2','11211'));$m-...原创 2020-04-08 17:25:44 · 812 阅读 · 0 评论 -
Thinkphp中如何使用Redis
首先确保安装并开启了redis扩展其次,在需要执行的文件上做如下的操作use Think\Cache\Driver\Redis;使用如下函数就可以测试并使用radis操作了。$redis = new \Redis();$redis->connect('127.0.0.1', 6379);print_r($redis->ping());die;...原创 2020-04-08 17:25:13 · 434 阅读 · 0 评论 -
ThinkPHP中where条件中的or和and如何同时使用
如何使用thinkphp的把下面的条件连接起来('a'=1 and 'b'=2) or ('c'=3 and 'd'=4) and 'e'=5$where_1['a'] = 1;$where_1['b'] = 2;$where_2['c'] = 3;$where_2['d'] = 4;$where_main['_complex'] = array( $where_1, ...原创 2020-04-08 17:24:39 · 1557 阅读 · 0 评论 -
php语言下的redis常用操作
set,get,del的操作 /* 单个值的操作 */ // 列举所有的队列 $redis->keys('*'); // 删除某一个队列 $redis->del('houxin'); // 返回一个队列的值 $redis->get('mylist'); /* 同时操作多个值 */ $array_mset ...原创 2020-04-08 17:24:10 · 149 阅读 · 0 评论 -
php中的乐观锁和悲观锁
数据的锁定分为两种,第一种叫作悲观锁,第二种叫作乐观锁。1.悲观锁,就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住。【数据锁定:数据将暂时不会得到修改】2.乐观锁,认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让用户返回错误的信息。让用户决定如何去做。以下是实例什...原创 2020-04-08 17:23:34 · 1927 阅读 · 0 评论 -
PHP-文件夹操作「复制、删除、查看大小」递归实现
PHP虽然提供了 filesize、copy、unlink 等文件操作的函数,但是没有提供 dirsize、copydir、rmdirs 等文件夹操作的函数(rmdir也只能删除空目录)。所以只能手动编写这些函数,主要的技巧是通过递归将问题逐层分解,直到分解成可以直接解决的最小子问题。查看文件夹大小由于文件夹是没有大小的,平常所说的文件夹尺寸准确的说应该是文件夹中所有文件的总大小。所以只需要将...原创 2020-04-08 17:22:37 · 103 阅读 · 0 评论 -
php日志的简单使用方法
error_log($data, 3, 'errors.log');一下做简单的讲解<?php if(!Ora_Logon($username, $password)){ error_log("消息文本", 0); //将错误消息写入到操作系统日志中 } if(!($foo=allocate_new...原创 2020-04-08 17:22:02 · 175 阅读 · 0 评论 -
php检查redis是否连接成功
//实例化redis$redis = new Redis();//连接$redis->connect('127.0.0.1', 6379);//检测是否连接成功echo "Server is running: " . $redis->ping();// 输出结果 Server is running: +PONG// 表示已经安装完成...原创 2020-04-08 17:20:58 · 4454 阅读 · 0 评论 -
php高并发下减库存的操作
对于减库存的几种操作方法优化方案1:将库存字段number字段设为unsigned,当库存为0时,因为字段不能为负数,将会返回false优化方案2:使用mysql的事务,锁住操作的行//模拟下单操作//库存是否大于0mysql_query("BEGIN"); //开始事务$sql="select number from ih_store where goods_id='$goo...原创 2020-04-08 17:19:54 · 948 阅读 · 0 评论 -
PHP代码的多继承-PHP代码复用新的姿势-trait
1、php中的trait是啥?看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,其作用有两个:表明类可以做什么;提供模块化实现。Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。2、PHP版本要求:php5.4开始引入trait,其目的就是在于减少代码的重复,增加代码的复用性。3、trait的使用场景:试想...原创 2020-04-08 17:19:22 · 158 阅读 · 0 评论 -
php抽象类的基础介绍
抽象类PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法...原创 2020-04-08 17:18:30 · 63 阅读 · 0 评论 -
mysql获取地理定位的信息
/** * 获取平台的所有地址信息 * mysql获取地理定位的信息, * @return [type] [description] */ public function getNearbyAddressList() { // 获取位置的经度 $lng = I('lng', ''); // 获取...原创 2020-04-08 17:16:37 · 281 阅读 · 0 评论 -
mysql根据经纬度获取附近的商家
下面是google给的解决方案(基于公里km)。SELECT geo_id, `name`,( 6371 * acos ( cos ( radians(33.958887) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(118.302416) ) ...原创 2020-04-08 17:15:38 · 207 阅读 · 0 评论 -
linux系统搭建websocket注意事项
这里讲述自己的两个不同的服务器搭建的过程服务器1西部数码服务器:ubuntu-14.04。外网ip:211.129.205.111 内网ip:192.168.205.41把代码上传到指定的网站。运行服务器文件,正常运行和监听。一切顺利。服务器2阿里云服务器:centos 7。外网ip:121.68.26.22 内网ip:172.28.219.158在把代码上传到指定的网站后,...原创 2020-04-08 17:15:06 · 1128 阅读 · 0 评论 -
linux端口查看以及端口解除占用
有时候,我们虽然关闭了执行程序,但是端口还是在占用,下面以888为例,列出查看端口的占用的方法和解除端口占用的情况。解决方法:查找被占用的端口netstat -tlnActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address ...原创 2020-04-08 17:14:42 · 386 阅读 · 0 评论