PHP
php技术栈
weixin_45593546
PHP后端 + Web前端
展开
-
在ThinkPHP5中简单实现多数据库连接,并进行跨数据连接查询操作
多数据库连接方法 1:在需要连接其他数据库的地方,使用Db::connect()方法动态连接,方法参数为数据库配置的数组或字符串,例如:// 字符串参数:Db::connect('mysql://root:1234@127.0.0.1:3306/thinkphp#utf8');// 数组参数:Db::connect([ // 数据库类型 'type' => 'mysql', // 数据库连接DSN配置 'dsn' => '',原创 2021-07-06 17:55:54 · 1066 阅读 · 0 评论 -
收集汇总一些PHP编程小技巧
收集汇总一些PHP编程小技巧用单引号代替双引号来包含字符串,这样做会更快一些,因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。$row[’id’] 的速度是$row[id]的7倍。echo 比 print 快。使用逗号隔开字符串输出,字符串连接符(.)可以将单一的字符串传递给echo语句进行输出,与之相比,逗号可以实现echo语句中字符串的分别输出,这对PHP来说是一个性能改善。在执行for原创 2021-07-06 11:54:38 · 74 阅读 · 0 评论 -
PHP中关于行结束符(CR、LF)的 PSR-2 规范
所有 PHP 文件 必须 使用 Unix LF (linefeed) 作为行的结束符。CR(Carriage Return)表示回车LF(Line Feed)表示换行EOL(End of Line) : 这个符号是CR和LF的组合,表示到下一行并把焦点移到第一列。Dos和Windows采用回车+换行(CR+LF)表示下一行而UNIX/Linux采用换行符(LF)表示下一行苹果机(MAC OS系统)则采用回车符(CR)表示下一行Windows下编写的Shell脚本,直接放到linux/un原创 2021-07-06 10:04:59 · 631 阅读 · 0 评论 -
PHP 合并数组
使用 array_merge 可以合并数组,其实 + 号也可以,虽然都是合并数组,这两个方法各有区别。使用 array_merge 合并非关联数组时,不会过滤重复项目, + 会(更像是替换)>>> $a = [1,2,3]=> [ 1, 2, 3, ]>>> $b = [2,3,4]=> [ 2, 3, 4, ]>>> array_merge($a,$b)原创 2021-07-05 11:10:13 · 57 阅读 · 0 评论 -
PHP 比较数组
可以直接使用 == 比较两个数组有相同的键值对,如果这不是一个关联数组,那么就要保证值的顺序相对应>>> $b = [1,2,3,4]=> [ 1, 2, 3, 4, ]>>> $a = [1,2,3,4]=> [ 1, 2, 3, 4, ]>>> $a == $b=> true// 注意,他不会比较类型。>>&g原创 2021-07-02 18:18:13 · 239 阅读 · 2 评论 -
数字与字符串进行比较
自 PHP 8.0 开始。数字与非数字形式的字符串之间的非严格比较现在将首先将数字转为字符串,然后比较这两个字符串。数字与数字形式的字符串之间的比较仍然像之前那样进行。请注意,这意味着 0 == “not-a-number” 现在将被认为是 false 。参考:https://www.php.net/manual/zh/migration80.incompatible.php#migration80.incompatible.core...原创 2021-07-02 18:15:50 · 1112 阅读 · 0 评论 -
递增递减不能作用于 bool 值
递增、递减不能使用在 false 上面,但是 += 和 -= 可以<?php$a = false;++$a;var_dump($a);// false$a++;var_dump($a);// false--$a;var_dump($a);// false$a--;var_dump($a);// false$a-= 1;var_dump($a);// -1$a+= 1;// 因为前面改变了,变成了 -1,所以下面是 0 ,请不要在这里疑惑var_d原创 2021-07-02 18:12:37 · 85 阅读 · 0 评论 -
使用反射调用 protected 或者 private 的类方法
如果想避免一个方法被外部可见或者子类可见,可以采用 protected 或者 private 关键字来修改这些类,但是我们有时候又想在外部调用这些方法,应该怎么办呢?只能改成 public 吗?如果这是我们自己的代码,当然可以这样做,但是如果是引入的外部代码的话,可能就不太好直接修改了。现在,我们可以在外部使用 反射 来调用这些方法,现在我们来定义一个 Lisa 类<?phpclass Lisa{ public function name() { retur原创 2021-07-02 18:04:54 · 1851 阅读 · 0 评论 -
isset 和 unset 同时支持多个参数
多数人知道 unset 支持多个参数,但是 isset 也是支持的。var_dump(isset($a, $b, $c));unset($a, $b, $c);在 isset 多个变量时,必须要所有变量都不为 null时,才会返回 true,当遇到一个不存在时,将会立即返回。参考:https://www.php.net/isset...原创 2021-07-02 18:00:22 · 290 阅读 · 0 评论 -
比较两个 md5 值
下面的比较将会返回 true,这是为什么呢?$a = md5('240610708');// 0e462097431906509019562988736854$b = md5('QNKCDZO'); // 0e830400451993494058024219903391var_dump($a == $b); // true因为两个 md5 值都有开始’0e’,所以PHP类型理解这些字符串是科学符号。根据定义,0 的任何次方都是 0,所以在这里会成立,所以当你确定一个变量的类型时,你最好使用 =原创 2021-07-02 17:54:19 · 1018 阅读 · 0 评论 -
在赋值运算中 && 和 and 的运算符优先级问题
运行下面的代码,第一个 $bool 将打印为 false ,预期如此,但是第二个 $bool 将打印 true 。这是因为 = 的优先级高于 and 运算符,所以,第二个 bool将会被当成(bool 将会被当成 (bool将会被当成(bool = true) and false 执行。<?php$bool = true && false;// falsevar_dump($bool);$bool = true and false;// truevar_dump(原创 2021-07-02 17:49:47 · 489 阅读 · 0 评论 -
HTTPOXY 漏洞
长久一来我们习惯了使用一个名为"http_proxy"的环境变量来设置我们的请求代理。http_proxy=127.0.0.1:9999 wget http://www.laruence.com/在CGI(RFC 3875)的模式的时候, 会把请求中的Header, 加上HTTP_ 前缀, 注册为环境变量, 所以如果在Header中发送一个Proxy:xxxxxx, 那么 PHP 就会把他注册为HTTP_PROXY环境变量, 于是getenv(“HTTP_PROXY”)就变成可被控制的了. 那么如果所原创 2021-07-02 17:44:32 · 211 阅读 · 0 评论 -
使用 http_build_query
NULL 的值将会被会略<?php$arr = array('test' => null, 'test2' => 1);// test2=1echo http_build_query($arr);来源: https://www.php.net/manual/zh/function.http-build-query.php#60523True 和 False 将会被转换成数字<?php$a = [teste1= true,teste2=false];// test原创 2021-07-02 17:37:36 · 159 阅读 · 0 评论 -
PHP字符串连接操作符与数字
运行下面代码,尤其是第三行,如果 . 左右存在空格,那么即使是一个数字,也将会作用成字符串连接。echo "thr"."ee"; //prints the string "three"echo "twe" . "lve"; //prints the string "twelve"echo 1 . 2; //prints the string "12"echo 1.2; //prints the numb原创 2021-07-02 17:27:50 · 424 阅读 · 0 评论 -
php简单实现栈结构的示例
前言定义:栈又称为栈或者堆叠,是计算机科学中的一种特殊的串列形式的抽象数据类型。特殊之处在于只允许在链表或者数组的一端(堆栈顶端指针,又称 “top”)加入数据push(压栈)和输出数据pop(弹栈)。特点:a.先进后出(后进先出),也就是说,我们只能在栈顶端push(压栈)加入数据,也只能在栈顶端pop(弹栈)删除数据;b.栈除了top(栈顶)和base(栈底)之外,其他的每个元素都有一个前驱和后继;示例class HeapStack{ private $stackArr =原创 2021-07-01 13:20:20 · 144 阅读 · 0 评论 -
验证身份证号码是否正确的示例
要求实现中国公民(15位或者18位)身份证号码的相关验证,功能:身份证号有效性验证分析详细身份证信息生成一个虚拟的省份证号码。分析公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。地址码(前六位数)表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。出生日期码(第七位至十四位)表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之原创 2021-06-29 11:56:25 · 656 阅读 · 0 评论 -
Laravel 6 定义自定义函数(公共方法)的简单示例
创建文件 app/Common/Functions.php<?phpfunction test(){ echo "测试";}在composer.json的autoload自动加载配置中添加"autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/fa原创 2021-06-25 15:26:42 · 266 阅读 · 2 评论 -
SSL certificate problem: unable to get local issuer certificate
GuzzleHttp\Exception\RequestExceptioncURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://api.mch.weixin.qq.com/secapi/pay/refund解决方案:1)下载cacert.pemhttps://原创 2021-06-25 13:23:26 · 77 阅读 · 0 评论 -
PHP的sleep函数
情况一:有这样一行代码:for($i=0;$i<5;$i++){ sleep(2); echo "6".PHP_EOL;}使用命令行中的执行效果是每隔2秒输出一个6:66666情况二:在PHP框架中定义这样一段代码:function test(){ for($i=0;$i<5;$i++){ sleep(2); echo '6'.PHP_EOL; }}启动服务,访问路由 htt原创 2021-06-25 10:30:27 · 234 阅读 · 0 评论 -
使用 Laravel 5.5 简单实现一个API
laravel5.5 已经引入了独立的无状态路由文件 routes/api.php 作为 api 的开发,我们可以将接口需要的路由定义在该文件中定义路由并测试Route::post('/test',function(){return 111;});这里我们要注意 5.5 版,api.php 文件中的路由已经自动为我们加上了 “api” 的前缀。引入自定义中间件...原创 2021-06-24 16:32:04 · 228 阅读 · 2 评论 -
PHP用empty()方法判断变量是否为空
empty() 函数用于检查一个变量是否为空。empty() 判断一个变量是否被认为是空的。empty() 5.5 版本之后支持表达式了,而不仅仅是变量。当一个变量并不存在,或者它的值等同于 FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告,哪怕变量并不存在,这意味着 empty() 本质上与!isset($var) || $var == false等价。语法bool empty ( mixed $var )参数说明:$var:待检查的变量。返回值原创 2021-06-21 15:18:25 · 743 阅读 · 0 评论 -
在Laravel中清除缓存
1、清除应用程序缓存运行以下命令以清除Laravel应用程序的应用程序缓存$ php artisan cache:clear2、清除路由缓存要清除Laravel应用程序的路由缓存,请从shell执行以下命令。$ php artisan route:cache3、清除配置缓存您可以使用config:cache清除Laravel应用程序的配置缓存。$ php artisan config:cache4、清除已编译的视图文件此外,还可能需要清除Laravel应用程序的已编译视图文件。要清原创 2021-06-21 14:48:42 · 353 阅读 · 0 评论 -
Laravel symlink() has been disabled for security reasons
前言运行命令 php artisan storage:link报错提示信息: ErrorException : symlink() has been disabled for security reasons at /vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:252 248| */ 249| public function link($target, $link)原创 2021-06-19 16:39:59 · 747 阅读 · 3 评论 -
对PHP中phar包的学习
前言composer,是下载了一个composer.phar,然后放到/usr/local/bin目录下,就可以全局使用composer了。php5.3之后支持了类似Java的jar包,名为phar。用来将多个PHP文件打包为一个文件。可以和tar zip相互转化。创建首先要改php.ini里的readonly关闭,默认是不能写phar包的$phar = new Phar('swoole.phar');//参数是压缩包的名称//指定压缩的目录,第2个参数通过正则指定压缩文件的扩展名$pha原创 2021-06-17 13:56:34 · 98 阅读 · 0 评论 -
Laravel 应用性能调优笔记汇总
常用的调优技巧1,根据需要加载中间件Laravel 内置了很多的中间件,每一个请求都会加载相关的中间件,在 app/Http/Kernel.php 中注释掉不需要的中间件(如 session 支持)可以极大的提升性能。2,使用即时编译器(JIT)如 HHVM 和 OPcache 可以让程序在不用做任何修改的情况下,直接提高最少 50% 的性能。3,使用 PHP 7.x与之前的版本相比,PHP 7.x 在性能上有了极大的提升,如果你愿意的话,甚至还可以使用 PHP 8.x 版本。4,关闭应用de原创 2021-06-13 12:43:10 · 154 阅读 · 2 评论 -
Laravel 创建模型 出现 SQLSTATE[HY000] [2002]
报错信息 Doctrine\DBAL\Driver\PDO\Exception : SQLSTATE[HY000] [2002] Ŀܾ��ӡ at vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDO\Exception.php:18 14| final class Exception extends PDOException 15| { 16| public static function new(\PDOE原创 2021-06-10 13:27:15 · 588 阅读 · 1 评论 -
部分有关整数和浮点数的正则表达式
原创 2021-06-05 23:37:40 · 246 阅读 · 0 评论 -
php 获取数组中出现次数最多的值与该值出现的次数
<?php $arr=[2,3,2,5,6,7,8,7,7];$countArr=array_count_values($arr);/*array ( 2 => 2, 3 => 1, 5 => 1, 6 => 1, 7 => 3, 8 => 1,) */arsort($countArr);// var_export($countArr);/*array ( 7 => 3, 2 => 2, 3原创 2021-06-01 14:02:57 · 391 阅读 · 2 评论 -
分享一些国内可用的 Composer 全量镜像
分享一些国内可用的 Composer 全量镜像Packagist / JP镜像地址:https://packagist.jp官方地址:https://packagist.jp阿里云 Composer 全量镜像镜像地址:https://developer.aliyun.com/composer官方地址:https://developer.aliyun.com/composer腾讯云 Composer 全量镜像镜像地址:https://mirrors.cloud.tencent.com/comp原创 2021-03-09 12:28:47 · 557 阅读 · 1 评论 -
使用composer安装依赖时的基本约束
基本约束精确版本我们可以告诉 Composer 安装的具体版本,例如:1.0.2,指定 1.0.2 版本。范围通过使用比较操作符来指定包的范围。这些操作符包括:>,>=,<,<=,!=。你可以定义多个范围,使用空格或者逗号 , 表示逻辑上的与,使用双竖线 || 表示逻辑上的或。其中与的优先级会大于或。 实例:=1.0=1.0 <2.0=1.0 <1.1 || >=1.2我们也可以通过使用连字符 - 来指定版本范围。连字符的左边表明了 >原创 2021-01-11 15:11:16 · 104 阅读 · 0 评论