
PHP实践问题集锦
文章平均质量分 69
PHP的开发过程中遇到的问题多且复杂,本专栏经过长期积累,总结了大量实际工作中遇到的问题。专栏问题收集包括PHP基础、Yii、Yii2、整合第三方支付、第三方登录等实际项目开发中遇到的难点。
优惠券已抵扣
余额抵扣
还需支付
¥99.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
小雨青年
2025年和我一起做属于自己的独立开发项目!CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。
展开
-
【WordPress】解决阿里云虚拟主机上WordPress配置支持Https
一、环境描述服务器环境:阿里云-> 虚拟主机软件版本:WordPress 5.8.2PHP版本:7.4二、问题描述虚拟主机在配置强制https跳转之后,网站首页已经强制https,但是资源文件还是访问https,造成网站不可用。三、解决方案修改项目文件/wp-config.php文件,在文件最前面添加如下内容。$_SERVER['HTTPS'] = 'on';define('FORCE_SSL_LOGIN', true);define('FORCE_SSL_ADMIN',原创 2021-12-27 20:53:44 · 822 阅读 · 0 评论 -
【PHP】kartik\datetime\DateTimePicker日期选择插件设置最大选择时间
最大时间设置endDateDate. Default: End of timeThe latest date that may be selected; all later dates will be disabled.实际代码[ 'options' => ['placeholder' => ''], 'pluginOptions' => [ 'autoclose' => true, 'todayHighlight' =原创 2021-05-10 10:58:38 · 814 阅读 · 0 评论 -
【PHP】1分钟解决PHP时间戳到Mysql数据库问题
前言如标题所示,这篇主要讨论的问题是PHP按时间戳存时间持久化到MySql最多能到多长日期,超出范围怎么办?问题分析PHP存储Int类型最大是多少?整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。64 位平台下的最大值通常是大约 9E18,除了 Windows 下 PHP 7 以前的版本,总是 32 位的。 PHP 不支持无符号的 integer。Integer 值的字长可以用常量 PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以原创 2021-04-25 14:27:58 · 728 阅读 · 0 评论 -
【php】获取汉字词语转拼音pinyin
用途主要用于存储建立简单的搜索表,在页面上根据中文英文首字母排序,比如城市,省份,或者通讯录内。代码 function pinyin($_String, $_Code='utf-8') { $_DataKey ="a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha". "|chai|cha原创 2020-10-26 17:48:27 · 612 阅读 · 0 评论 -
【token】JWT详解 3 Laravel JWT自定义错误返回
原因因为jwt如果token验证失败,会返回验证失败,但是因为格式没有被通过配置控制,所以在前后端交互上很麻烦自定义中间件创建中间件文件文件的位置在app/Http/Middleware,内容如下<?phpnamespace App\Http\Middleware;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpExcep原创 2020-10-24 23:58:53 · 1614 阅读 · 0 评论 -
【token】JWT详解 2 Laravel 安装使用JWT
安装Laravel使用的jwt组件推荐使用tymon/jwt-authcomposercomposer require tymon/jwt-auth部署修改config/app.php,添加内容'providers' => [ Tymon\JWTAuth\Providers\LaravelServiceProvider::class,]在根目录执行php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\L原创 2020-10-24 23:58:17 · 1276 阅读 · 0 评论 -
【Yii2】页面缓存PageCache源码解析以及使用详解
PageCachePageCache的使用是通过在控制器的过滤器,针对限定的action使用组件public function behaviors(){ return [ [ 'class' => 'yii\filters\PageCache', 'only' => ['index'], 'duration' => 60, 'variations' => [原创 2020-10-21 10:24:05 · 666 阅读 · 0 评论 -
【Yii2】Yii2自定义注册组件工具类以及实现原理源码分析(上)
前言在Yii2中,应用组件(Application Components)是一个比较重要的概念,框架内很多的功能,比如urlManagerdbuser都是通过组件实现的。组件是如何被调用的配置文件组件的配置位置在 app(应用文件夹)/config/main.php其中的 components就是组件的配置位置,比如用户验证的user组件就是如下配置注册机制组件的本质是服务定位器(Service Locator)的其中一个实现,而定位服务器的本质是一个全局的对象,你可以通过\原创 2020-10-13 15:03:56 · 463 阅读 · 0 评论 -
【Yii2】使用indexBy解决查询结果不重复的问题
【Yii2】使用indexBy解决查询结果不重复的问题问题描述当我们使用ActiveRecord进行连表查询的时候,如果主表和关联表的关系是一对多的,就会在查询结果中出现多条主表id相同的数据但是经过ActiveRecord查询返回的结果分页后,得到的数据就没有重复,对应的数据就会少给我们直接的感觉是分页下来这个页面的数据不够一页的分析原因经过查看Yii2的源代码,我发现在all操作内,会做一次去重操作代码位置 vendor/yiisoft/yii2/db/Query.php /**原创 2020-09-23 05:43:35 · 817 阅读 · 0 评论 -
【web】SESSION的原理以及跨域验证
一、适用范围仅限于web端的身份验证,和app端使用的jwt验证是不同的。二、SESSION为什么存在SESSION首先,HTTP是无状态的,每次请求相互独立,这样就会造成,你不认识我,我也不认识你。但显然这样是不能满足需求的,对于用户体系的网址,我们需要知道每次请求的用户是谁,这样才可以在这个基础上对用户的数据进行操作。那么,如果服务器保存一个用户标识,每次客户端请求数据都带着标识,这个服务器就知道是哪个用户进行的操作,这也就是为什么存在SESSIONSESSION的生成和校验客户端第一原创 2020-07-15 14:50:31 · 538 阅读 · 0 评论 -
【Yii2】高级模板跨应用调用组件的最佳解决方案
项目需求在Yii2的高级模板中,可以创建多个应用。目前有两个应用网站管理后台其中网站使用pageCache作为缓存组件。由于使用缓存组件,导致后台的内容没有及时更新,所以,需要在后台创建模块,手动刷新网站的缓存。思路使用网站配置文件在后台注册组件也就是说,在缓存模块上,直接注册组件,再调用方法。经过实践,不可行修改Yii.php在后台项目注册网站组件由于改动比较大,没有完成具体操作解决方案直接使用后台模块加载网站配置具体思路如下网站使用的路径被注册在common/con原创 2020-07-07 14:15:52 · 830 阅读 · 0 评论 -
【Laravel】Laravel-admin后台框架-3配置菜单 用户 权限 rbac
前言前面我们搞定了基本的模块内CURD的操作,可以参考之前的文章【Laravel】Laravel-admin后台框架-2创建数据表建立模块增删改查CURD(2)【Laravel】Laravel-admin后台框架-2创建数据表建立模块增删改查CURD(1)【Laravel】Laravel-admin后台框架-1安装实战Laravel-admin 是基于用户的权限管理系统RBAC,并且整个菜单和授权的流程比较自由,我下面的操作流程准确的基于角色权限绑定而不是其他的。创建权限业务上我们创建对原创 2020-06-24 11:10:17 · 3285 阅读 · 0 评论 -
【Laravel】Laravel-admin后台框架-2创建数据表建立模块增删改查CURD(2)
前言前面的操作我们已经能够安装Laravel-admin创建数据表并生成模型修改模型实现按业务写入数据可以参考之前的文章【Laravel】Laravel-admin后台框架-2创建数据表建立模块增删改查CURD(1)【Laravel】Laravel-admin后台框架-1安装实战对于一个基本的模块,还有需要完成如下功能自定义列表,格式化输出内容列表筛选字段以及规则列表文本以及对应的按钮查看页面的格式化输出列表页展示目前的列表页面是这样的很显然,日期和评分展示的内容是原创 2020-06-23 14:01:30 · 1069 阅读 · 0 评论 -
【Laravel】Laravel-admin后台框架-2创建数据表建立模块增删改查CURD(1)
前言前面我们已经能够完整创建Laravel-admin的项目了,接下来要在做中学,学习如何实际创建一个符合业务的模块,完成CURD的操作。实战定义业务业务:比如我们要做个健身教练录入上课训练的记录,记录每次教学的情况。设计数据表目前只做一张表,后续再迭代。CREATE TABLE `fit_record` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_name` varchar(255) NOT NULL DEFAULT原创 2020-06-22 15:43:34 · 1591 阅读 · 0 评论 -
【Laravel】Laravel-admin后台框架-1安装
前言Laravel是众所周知的优雅的PHP框架。Laravel-admin可以快速实现后台的搭建,并且可以帮助不熟悉laravel的人快速熟悉。但是再好用的工具也有学习的过程,下面开始我们由浅入深的学习吧~安装环境macOS10.15.5PHP7.4.2coderfix.blog.csdn.net@localhost blog % php -v PHP 7.4.2 (cli) (built: Feb 17 2020 12:56:02) ( NTS )Copyright (c) The原创 2020-06-19 18:22:13 · 1799 阅读 · 0 评论 -
【MAMP】macOS下使用MAMP的php环境版本配置方法
前言众所周知,macOS是自带php的,但是由于版本较低并且扩展不全,所以不推荐开发环境使用。MAMP是支持macOS的开发套件,可以自由切换phpb版本,对于开发来讲还是挺方便的。操作版本说明macOS10.15.5MAMP5.7,pro版本和普通版本差距不大MAMP选择PHP版本在语言选择界面选择需要的PHP版本。注意!一定要勾选下面的在命令行启用。如果你用的nginx,要选择CGI模式下运行。查看当前命令行PHP版本仔细观察系统自带的php扩展,是不全的,比如没有zi原创 2020-06-19 09:58:32 · 2524 阅读 · 0 评论 -
【Yii2】页面点击图片全屏放大封装小部件
需求在后台管理系统中,一般遇到图片列表或者详情,都会要求点击放大展示完整图片,毕竟在列表中不能百分百展示完整图片。实现最终效果的实现是在img增加点击事件,在另一个div中展示图片。为什么要封装在小部件里呢,当然是方便调用。需要这个效果的界面很多,如果每个页面都复制粘贴的话,非常不优雅,并且不好维护。下面是完整代码BackendBigImg.php<?phpnamespace common\widgets;use common\models\DmAdPosition;use y原创 2020-06-18 01:11:28 · 722 阅读 · 0 评论 -
【Yii2】Yii2使用Mongodb配置并解决SyntaxError: missing ] after element list以及Authentication failed
环境lixiaoyu@localhost basic % php -vPHP 7.1.32 (cli) (built: Feb 17 2020 12:26:26) ( NTS )Copyright (c) 1997-2018 The PHP GroupZend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologieslixiaoyu@localhost basic % ./yii This is Yii version 2.0.35.原创 2020-05-15 14:47:26 · 1343 阅读 · 0 评论 -
【Yii2】模型Model中使用rules规则定义场景setScenario限制规则
业务需求在我们的日常需求中,会有这种数据表中存在图片字段,为必填,需要在操作过程中做到创建数据时,图片字段必须修改数据时,图片字段如果不传,就不修改解决方案业务数据操作如果要保持原来的图片数据,那只要修改的时候带着原来的参数即可加载表单时带原来的数据图片数据放在隐藏的文本域中提交表单时如果图片上传的字段没有值,就将原来的图片数据从隐藏文本域中拿出来这样的操作当然能满足需求,但是太复杂了定义场景setScenario在Yii的数据操作中,一般的逻辑如下判断是否有提交数据Y原创 2020-05-13 18:28:37 · 1735 阅读 · 0 评论 -
【Yii2】yii2-editable在GridView上修改数值并刷新页面
需求因为业务需求需要修改数据的排序值,但是为了单独修改排序值打开页面提交数据又对用户操作不好,所以我决定采用直接在列上对数据进行修改。版本说明PHProot@1bd5d900decc:/var/www/html# php -vPHP 7.0.25 (cli) (built: Nov 4 2017 10:58:36) ( NTS )Copyright © 1997-2017 The ...原创 2020-05-06 17:44:31 · 1861 阅读 · 3 评论 -
【PHP】认识PHP的垃圾回收机制(1)
前言本文的目的不仅仅是总结PHP的垃圾回收机制,而是要发散思维,从垃圾回收机制中得到更多的细节。什么是垃圾回收垃圾回收机制广泛存在于各种编程语言中,由于每个变量被定义都会占用一部分内存空间,如果这些空间长期不被释放,系统的内存就会出现不足的情况,为了保证系统能在软件运行过程中有足够的内存使用,就需要这样一套回收机制,释放掉不需要使用的内存空间。高级语言一般在自动实现了垃圾回收,不需要我们主...原创 2020-03-13 01:52:19 · 472 阅读 · 0 评论 -
【Yii2】修改框架入口增加配置适应开发生产环境
为什么首先,每个框架要保证自己的易用性,不会搞得特别复杂。然后,实际项目中,作为一个工程,我们要保证团队成员的项目配置傻瓜化。因此可见,修改入口文件是有足够的必要性的。操作修改index.php文件位置web/index.php,在前面增加如下内容$config = __DIR__ . '/../.env';if(!isset($config)){ return 'no...原创 2020-02-20 00:21:34 · 620 阅读 · 0 评论 -
【PHP】Yii2中的资源管理的sourcePath/basePath/baseUrl分别是指的什么
Yii2中的资源包原创 2020-01-04 02:00:41 · 1235 阅读 · 0 评论 -
【codeception】在Yii2框架下使用自带codeception进行单元测试提示model类不存在解决方法
开发环境以及版本PHP 7.3.12PHP 7.3.12 (cli) (built: Nov 21 2019 19:00:57) ( NTS )Copyright (c) 1997-2018 The PHP GroupZend Engine v3.3.12, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7...原创 2019-12-04 17:27:35 · 1578 阅读 · 0 评论 -
【PHP】安装phpoffice/phpspreadsheet环境OneinStack安装ext-fileinfo这个扩展
安装phpoffice/phpspreadsheet环境OneinStack安装ext-fileinfo这个扩展Composer安装phpoffice/phpspreadsheet1.添加"phpoffice/phpspreadsheet":"1.8.*"到composer.json2.执行composer install报错1 首先出现下面的提示Installation reques...原创 2019-07-31 19:59:03 · 11444 阅读 · 0 评论 -
【物联网】阿里云iot物联网平台监控设备 在线离线状态 解决方案
阿里云iot物联网平台监控设备在线离线状态解决方案需求目前使用阿里云的iot作为物联网平台应用,在整个系统内有很多设备,每天都会在固定的时间段内在线和离线。我们需要监控这些设备的状态,如果设备在线或者离线,给管理员发送通知(短信),以便让相关人员及时处理。具体实现服务端订阅在产品详情的服务端订阅中,可以通过服务端订阅来接受iot平台的消息。其中:服务端订阅,通过HTTP2通道...原创 2019-06-18 20:37:11 · 11265 阅读 · 0 评论 -
【MySql】mysql存储毫秒级日期以及PHP时间戳格式转化
没有废话datetime 类型展示为 2019-02-27 18:19:37 ,精确到秒datetime(3) 类型展示为 2019-02-27 18:18:33.565 ,精确到毫秒PHP对毫秒级字符串转换private function _get_microtime_format($time) { if(strstr($time,'.')) {...原创 2019-02-27 18:23:43 · 2293 阅读 · 0 评论 -
【PHP】Yii2下PHP生成无限制微信小程序码
业务场景用户对外分享微信小程序,携带用户个人数据总共生成的小程序码数量不确定具体实现调用接口微信实现生成二维码的方式有三种createWXAQRCodegetWXACodegetWXACodeUnlimit这里需要采用getWXACodeUnlimit,通过该接口生成的小程序码,永久有效,数量暂无限制。参数业务通过scene传递参数,其他用于修饰样式。限制为最大32...原创 2019-02-25 18:12:10 · 2145 阅读 · 2 评论 -
【支付宝小程序】PHP 获取用户敏感信息手机号 验签解密 RSA解密 AES解密
需求支付宝小程序端,获取到加密的用户手机号数据,需要经过服务端对数据进行解密,得到用户的手机号问题用户信息为敏感信息,需要用到敏感信息加密解密方法中的方式进行解密服务端为PHP,由于官方没有对应的演示demo,经过摸索测试,还是出现了验签不通过,并且解密不成功的情况解决过程1.分析官方的java实例代码String response = "小程序前端提交的";//1. 获取验签和...原创 2019-01-10 19:34:28 · 10053 阅读 · 14 评论 -
【微信小程序】微信小程序扫描自定义二维码到指定页面的坑
重点测试版本不需要发布也可以进行测试测试阶段不发布,只能扫描测试链接中的地址中的二维码,其他的就算符合规范也不可以如果是要动态匹配参数,那么动态部分必定是/后面的字符串如果是要动态匹配参数,那么提交的地址最后一定带/提交地址对应的项目路径下必须有验证文件,所以不建议设置过长的路径 ...原创 2018-09-11 17:41:29 · 14228 阅读 · 3 评论 -
【Yii2】Yii2使用yii2-admin做RBAC权限管理的安装基本使用
RBAC 基于角色的权限管理为什么要管理权限在我们的系统中,存在不同的角色,每个角色对应的操作各不相同。比如一个角色负责发布文章,他的上级角色负责审核文章,另一个上级则发布文章和审核文章的权限都有。这时候就需要一个标准化的工作流来处理这些逻辑。为什么是RBAC像这种需求,在大部分管理系统都是存在的,经过一段时间的抽象化,大家便总结出了RBAC权限管理.基本的逻辑...原创 2018-08-19 16:07:19 · 6174 阅读 · 0 评论 -
【Yii2】使用AssetBundle中的$sourcePath对资源文件进引入和调用
环境Yii 2.0.15.1PHP 7.2.7AppAssetAppAsset在项目根目录下的assets文件夹内,作用是控制项目的资源文件。资源文件也就是我们的js/css这些文件。下面是自带的AppAsset类namespace app\assets;use yii\web\AssetBundle;/** * Main application asset...原创 2018-07-25 13:38:50 · 2407 阅读 · 0 评论 -
【PHP】单词十以内的加法de多种解法
问题描述把两个英文单词加在一起~写一个类Arith,实现下面的功能 var k = new Arith("three"); k.add("seven"); //返回 "ten"输入 - zero 到 ten ,肯定是小写 输出 - 返回相加的结果,肯定是小写分析class__constructarrayswitch case解决方案数组取值array_flip反转键值class原创 2017-07-13 07:04:28 · 1489 阅读 · 0 评论 -
【PHP】字符串去空格并将每个单词首字母转换成大写de多种解法
问题描述编写camel_case方法,实现将字符串去掉空格,并将每个单词的第一个字母转换成大写。例如:camel_case("hello case"); // => "HelloCase"camel_case("camel case word"); // => "CamelCaseWord"分析解决方案数组元素转换大写function camel_case(string $s): string {原创 2017-07-09 21:45:03 · 2864 阅读 · 0 评论 -
【PHP】给两个字符串返回字符串按排序出两个字符串的字符de多种解法
问题描述给出两个字符串s1和s2,两个字符串仅包含a-z,返回一个排序后的字符串,包含这两个字符串的内容,每个字母只出现一次。举例:a = "xyaabbbccccdefww" b = "xxxxyyyyabklmopq" longest(a, b) -> "abcdefklmopqwxy"a = "abcdefghijklmnopqrstuvwxyz" longest(a, a) -> "a原创 2017-07-08 17:00:52 · 1782 阅读 · 0 评论 -
【PHP】面试题整理PHP部分
PHP语句include和require都能把另一个文件包含到当前文件中,它们的区别是?为了多次包含同一文件,可以用什么语句替代它们?include引入不存在,会报warning require引入不存在,会报fatal error _once如果之前已经引用过,就不会重复引用,如果没有加_once,重复引用就会出现致命错误 include_once之前需要检查是否有引用,所以不如includ原创 2017-06-26 22:24:51 · 2178 阅读 · 0 评论 -
【小程序】微信小程序的个人开发者发布最佳实践
前言微信小程序在3月27日新增了6项能力,其中第一条就是对个人开发者开放注册。这无疑是大快人心的好事!之前我写过一篇微信小程序的文章,不过主体是企业的身份来做的,并且也没有走到发布的流程,http://blog.csdn.net/diandianxiyu_geek/article/details/53068012这次可以完美的走完这套流程了~注册账户和之前的一样,只是我们选择的是新增个人身份。选择小原创 2017-03-30 19:17:45 · 24319 阅读 · 6 评论 -
【AMQP】macOS下的AMQP服务器以及PHP扩展搭建
环境说明macOS版本, macOS Sierra 10.12.3 (16D32)PHP集成环境, XAMPP 7.0.15-0 Apache 2.4.25,MariaDB 10.1.21 PHP 7.0.15前期准备修改本地path文件sudo vi /etc/paths在文件的最上面添加/Applications/XAMPP/xamppfiles/bin重启中端bogon:~ xi原创 2017-02-23 11:21:24 · 3710 阅读 · 0 评论 -
【小程序】手把手带你完成微信小程序开发实践
帐号相关流程注册范围企业政府媒体其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账户信息绑定管理员微信企业认证公司对公账户对微信进行打款账户自动验证后,自动认证通过,并将认证资金退回公司对公账户,费用在1元内随机小程序发布流程开发实践这次的demo项目为农历和公历的转换器,重在体验原创 2016-11-07 17:14:27 · 349663 阅读 · 25 评论 -
【Yar】Yar异步调用的超时时间问题以及解决方案
问题由于具体业务功能需要,需要采用并行异步的方式调用方法。但是业务上要求每个被调用的方法的执行时间最多60秒,这就导致采用Yar的调用一直是timeout. Yar_Concurrent_Client::loop(): select timeout 5000ms reached解决方案1.修改配置文件Yar扩展的配置项如下yar.packager php yar.debug yar原创 2016-11-04 19:45:03 · 6333 阅读 · 1 评论