-
Laravel5.8+应优先使用whereDoesntExist()实现“不存在”查询,需显式select()、用whereColumn关联字段、避免同名表别名、不支持Eloquent作用域;它生成标准NOTEXISTS子查询,语义清晰、性能优、逻辑严格,优于doesntHave()。
-
phpEnv默认禁用目录索引,需手动修改Apache虚拟主机配置,在<Directory>块中添加Options+Indexes+FollowSymLinks,确保无IndexIgnore*、路径斜杠正确、权限充足,并彻底重启Apache生效。
-
子目录绑定404的主因是Nginx配置遗漏alias或root路径计算错误:必须用末尾带/的alias,加fastcgi_paramSCRIPT_FILENAME$request_filename;,将location/subdir/块置于正则匹配之前,并透传HTTPS状态。
-
使用PHP处理数据库查询结果需选择合适的方法:①mysqli_fetch_array()支持关联和索引数组;②mysqli_fetch_assoc()返回关联数组便于读取字段;③mysqli_fetch_row()以索引数组提升性能;④mysqli_fetch_object()将数据转为对象;⑤PDO结合预处理语句与fetch方法,支持多种格式并增强安全。
-
PHP变量读取比常量快15%~25%,因变量直接从符号表取值,而常量需哈希查找;类常量略快于全局常量,但仍慢于局部变量;define()与const性能无差别但行为不同。
-
修改xdebug.profiler_output_name后文件名不变,根本原因是xdebug.profiler_enable必须在php.ini中静态设为1且重启Web服务器或PHP-FPM,动态开启无效;该配置仅在profiler启用时生效,且支持的占位符仅有%c、%p、%r、%s、%t、%u,其他如%Y会被原样保留导致失败。
-
Laravel5.5+中,event()用于同步触发事件,dispatch()仅用于队列任务,不可触发事件;监听器注册仅支持EventServiceProvider::$listen数组,不支持官方注解;事件类与监听器路径需严格匹配命名空间及大小写。
-
onWorkerStart在Swoolev4.4.0之后才正式支持很多人以为onWorkerStart是从v3就稳定可用的,其实不是。v3.x系列(包括v3.4)压根没这个回调;它最早出现在v4.4.0的beta版本中,并在v4.5.0后成为稳定接口。如果你在v3升级到v4时发现onWorkerStart不触发,先确认是否真的跑在v4.4+上——php--riswoole看一眼版本号最直接。v3.x:只有onStart、onWorkerStop
-
PHP优化核心是让浏览器更快渲染,需内联首屏CSS、按需输出JS/CSS、预加载关键资源、服务端配合图片懒加载,并确保HTML尽早输出。
-
PHP安全导出需校验过滤URL参数、加权限检查、防XSS文件名;CSV要加UTF-8BOM并用fputcsv;Excel导出优先选流式库;POST导出须用fetch/blob下载,避免405错误。
-
Laravel生产环境需五步优化:一、缓存配置/路由/视图;二、切换Redis为缓存与会话驱动;三、关闭SQL日志并设日志级别为error;四、启用OPcache且APP_DEBUG=false;五、用Redis队列+Supervisor管理worker,事件监听器实现ShouldQueue。
-
根本原因是未为新端口配置独立虚拟主机及权限规则,Apache默认仅对80端口启用完整访问策略,新增Listen端口(如8080)若无对应<VirtualHost*:8080>块并含Requireallgranted等授权指令,则沿用受限的主配置导致403。
-
Laravel11是框架逻辑重写,非简单升级:移除app/Http/Kernel.php和app/Providers目录,合并路由为routes.php,bootstrap/app.php成为主干入口,所有中间件、服务提供者、异常处理器均需显式注册,容错率低但可控性高。
-
$_SERVER['REQUEST_URI']包含完整请求路径和查询字符串(如/user/profile?id=123),但不含协议和域名,且可能不以/开头;$_SERVER['PHP_SELF']仅返回当前脚本路径(如/index.php),无查询参数,且易受重写规则干扰;而$_SERVER['SCRIPT_NAME']由服务器内部生成,稳定可靠,始终指向真实执行脚本路径。
-
PHP提取数组键名有五种方法:一、用array_keys()直接获取全部键名;二、用foreach循环逐个提取并可定制处理;三、用while与each()组合(PHP8.0已弃用);四、用array_keys($arr,$value)按值反查键名;五、用array_map()配合array_keys()构造结构化键信息。