分类 PHP 下的文章

最近写项目的时候会发现一个很奇怪的问题, 明明启动了Session,并且PHP设置的 Cookie_sessionid 也没有到期, 但是过了一定的时间, 之前设置的Session数据却不翼而飞, 造成错误。于是我搜索了一番发现, 只需要修改 php.ini 中的一个关键设置即可。下面是我在项目中实施的热修复:

<?php
// Your codes;
if(session_status() !== PHP_SESSION_ACTIVE) { // 如果session没有启动;
    ini_set('session.gc_maxlifetime', '10800'); // 10800秒, 也就是 60 * 3 * 60 (3小时);
    session_start();
}
?>

上面的 session.gc_maxlifetime 就是修改Session的 最大生命时间, 到期后将会被PHP的GC机制自动回收。
PHP的配置文件默认设置的过期时间为 1440 秒, 也就是 24分钟
注意: 修改Session配置文件的时候必须要 在Session启动前 修改, 否则会造成错误异常抛出!

最近因为需要比较两个数组内的元素,但恰好这两个数组内的元素都是未知的,也就导致了一个问题,无法使用array_diff比较他们的差异,例如 Array(1) ([0] => string(1) "k") 和 Array(1) ("aaa" => int(0)) 没办法进行比较。所以我就想到了利用array_search的方式自行写一个函数。然后蜜汁的问题来了, 现有以下代码,在调试后却会得到:

<?php
$array = ["a" => "a"];
var_dump(isset($array[true]));  // print bool(false);
var_dump(isset($array[false])); // print bool(true);
var_dump(isset($array["a"]));   // print bool(true);
?>

我整个人都懵了,这个结果完全不是我想要的好伐。为什么会突然想起这个问题,因为在使用array_search()这个方法的时候,若存在这个键名,则会返回这个键名,不存在则会返回false。于是乎,又因为以上的测试代码,导致我差点没发现这个bug。所以有的时候不能为了节省代码的行数而节省啊!该分开写的时候还是得分开写~