-
用PHP搭线上网站的关键是避开环境、路径、配置三大坑:选集成环境(如XAMPP/MAMP)、规范项目结构、正确配置数据库连接与服务器权限,再同步PHP参数并关闭错误显示。
-
切面类未被扫描到:需确认config/autoload/annotations.php中scan.scan_dirs是否包含切面目录(如App\Aspect),且切面类必须带#[Aspect]注解、非abstract/final,运行phpbin/hyperf.phpdi:dump验证是否出现在输出中。
-
Workerman长连接静默失败是因系统文件描述符限制未同步调高,需查进程实际limits、按启动方式配置ulimit、将maxConnections设为fd上限的70%~80%,并完整重启进程。
-
PHP不支持传统多线程,但可通过parallel扩展(CLI模式)实现线程并发,或使用pcntl_fork创建多进程、结合消息队列与Worker进程实现异步处理,推荐多进程方案以确保稳定性。
-
Hyperf的TranslatorInterface为单例,中间件中调用setLocale()无效,因其初始化后locale已锁定且缓存未刷新;正确做法是通过RequestContext注入请求级locale并重写Translator绑定逻辑。
-
PHP用curl_setopt发POST请求需设CURLOPT_POST=>true和CURLOPT_POSTFIELDS;传数组自动urlencode并设application/x-www-form-urlencoded,传JSON需手动设Content-Type:application/json,且须检查json_encode结果及curl错误。
-
Hyperf中延迟队列应使用TTL+死信队列方案而非x-delayed-message插件,需配置带x-message-ttl和x-dead-letter-exchange参数的延迟队列,并确保死信交换机正确绑定消费队列。
-
Laravel中缓存标签与TTL不能直接混用:Cache::tags()仅支持Redis/Memcached,其put()方法不接受TTL参数;需通过配置store的全局ttl、手动构造带前缀的键名配合显式put(),或结合Redis通配符清理实现可控的标签+过期组合。
-
SymfonyMessenger默认使用不安全的PhpSerializer,必须显式配置自定义序列化器;推荐用SymfonySerializer配JSON格式,并通过@Groups注解控制字段,消息类需为纯DTO且避免副作用。
-
phpenv无法安装Budibase,因其仅为PHP版本管理工具,不提供Node.js、CouchDB等Budibase必需的运行时环境;Budibase是基于Node.js的低代码平台,正确部署应使用Docker或手动配置Node与数据库。
-
Hyperf自定义Process进程内存持续上涨是因闭包强引用、Context未清理及PDO/文件句柄未关闭所致,需禁用use($this)、显式获取服务、defer清理Context、及时close资源并监控C层分配。
-
XAMPP默认不启用FilterTrace,该指令属Apache2.0早期遗留功能,当前2.4.x版本已彻底移除;强行添加会导致启动失败或500错误,正确调试应依赖error.log日志及标准多端口配置(Listen+VirtualHost)。
-
Workerman不支持worker_priority配置,需通过Linux进程级命令(nice/renice/chrt)调整优先级,并配合limits.conf权限设置与systemd管控才能生效。
-
PHP字符串转日期显示未来时间是因时区处理错误或时间戳符号误用所致,需设置正确时区、避免strtotime解析含时区字符串、校验时间戳正负、使用DateTimeImmutable及标准化输入格式。
-
应优先使用Rule::exists()或Rule::unique()而非闭包查库,因闭包易漏软删除、忽略当前记录、引发N+1且难测试;语义上exists仅查存在性,unique默认校验唯一性但更新需ignore();复杂逻辑应封装为Rule类并正确实例化调用。