分类: 编程语言
-
文章针对PHP中实现文件路径名的安全验证问题进行了探讨。通过测试不同格式的请求参数,分析了新增文件成功与失败的原因,最终整理出包含前缀目录白名单、剥离目录后校验纯文件名以及扩展名白名单的验证规则。文章详细介绍了利用POSIX标准限制非法字符的实现难点,并指出当前方案对多语言字符及操作系统保留文件名的过滤存在不足。
-
在 MySQL 5.7 中使用 LIKE 语句搜索包含反斜杠的数据时,直接使用单反斜杠无法匹配目标结果,需要使用双反斜杠进行转义。这是因为 MySQL 字符串解析器和模式匹配过程会先后各剥离一次转义字符,导致最终只剩下一个反斜杠进行匹配,因此必须在 SQL 语句中写入四个反斜杠才能成功查到以 layouts 开头且包含反斜杠的记录。
-
本文探讨了在 PHP 中重命名数组键名的实现方法,旨在将下划线形式的键名转换为驼峰形式。文章放弃了传统的 foreach 遍历方式,转而采用 array_map 函数为数组元素应用回调函数进行转换。通过展示转换前后的数组结构对比,验证了该方案能够成功将键名调整为预期的驼峰格式,为类似需求提供了基于函数式编程的处理思路。
-
在编写 Lighthouse 5 自动化测试用例时,将单个测试方法拆分为两个后运行报错,提示 Call to undefined method Illuminate\Support\Facades\Config::set()。排查发现第二个方法中应用实例已不复存在。参考 PHPUnit 文档后,在 phpunit.xml 中设置 processIsolation 为 true,或者在运行测试时添加 –process-isolation 选项,即可实现进程隔离并解决该问题,使测试通过。
-
本文记录了在编写 Lighthouse 5 自动化测试用例时遇到的断言失败问题。在使用 PHPUnit 进行 GraphQL 查询测试时,出现了 Syntax Error 及 Failed asserting that an array has the subset Array 的报错。经过排查,发现根源在于响应数据结构中多了一层花括号导致数据无法匹配。通过调整断言逻辑匹配数组的最后一个键值并修正查询结构,最终解决了测试不通过的问题。
-
本文记录了将 Laravel 8.x 项目部署至阿里云 ECS CentOS 7.7 的过程。基于 OneinStack 环境,通过虚拟主机脚本配置 Nginx 和 SSL,利用 FTP 上传代码并连接阿里云 RDS 数据库。文章详细解决了 PHP 禁用函数限制、Supervisor 进程管理配置及队列驱动调整等问题,最终通过 Supervisor 和 Crontab 实现了队列监听与任务调度,验证了部署成功。
-
针对 Laravel 6 中数据库字段下划线命名与 GraphQL 接口响应驼峰命名不一致的问题,文章探讨了两种转换方案。对比了遍历数组重构与在 Select 查询语句中直接重命名字段两种思路,最终决定采纳在 SQL 查询中重命名的方案。经测试,接口响应字段成功转换为驼峰形式,符合预期。
-
本文介绍了在 Laravel 8 中使用 nWidart/laravel-modules 包实现模块化开发的过程。针对大型应用默认结构不理想的问题,文章详细说明了通过 Composer 安装包、发布配置文件、修改 composer.json 实现 psr-4 自动加载的步骤,并演示了使用命令生成默认模块及空白模块的方法,最终展示了生成的目录结构。
-
在 Navicat for MySQL 中导入约 35MB 的 SQL 文件时,执行报错 2006 – MySQL server has gone away。经排查,该问题源于 MySQL 配置文件中 max_allowed_packet 的默认设置过低。通过在 my.ini 配置文件中将该参数的值修改为 40M,并重启 MySQL 服务,再次尝试导入文件后,导入成功且不再报错。
-
在执行 composer update –ignore-platform-reqs 命令时遇到了 Script 错误,这是由于忽略平台要求安装的 laravel/horizon 与环境不兼容导致。通过修改 composer.json 删除依赖,并手动移除配置文件、资源文件及代码中的相关引用,再次执行更新命令后问题得到解决,最终确认不应使用该参数。
