把HH:MM:SS格式的时间字符串转换成秒数,可以使用date_parse函数解析具体的时间信息。
<?php
$time = '21:30:10';
$parsed = date_parse($time);
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
echo $seconds;
?>
更详细的例子
转换成多少天/多少小时/多少分
function get_stay_time($timestamp, $is_hour = 1, $is_minutes = 1)
{
$CI =& get_instance();
if(empty($timestamp) || $timestamp <= 60) {
return false;
}
$time = time();
$remain_time = $time - $timestamp;
$day = floor($remain_time / (3600*24));
$day = $day > 0 ? $day.'天' : '';
$hour = floor(($remain_time % (3600*24)) / 3600);
$hour = $hour > 0 ? $hour.'小时' : '';
if($is_hour && $is_minutes) {
$minutes = floor((($remain_time % (3600*24)) % 3600) / 60);
$minutes = $minutes > 0 ? $minutes.'分' : '';
return $day.$hour.$minutes;
}
if($hour) {
return $day.$hour;
}
return $day;
}
PHP7出来一段时间了,据说PHP7可以性能翻倍。而且我的服务器上也已经开通了PHP7,就开始折腾下Emlog5.3.1。
直接在php7安装emlog5.3.1各种报错。emlog5.3.1虽然已经出了使用mysqli连接类,但是为了兼容性还是默认是使用了mysql。因为PHP7已经不支持mysql扩展了,但是支持mysqli和pdo_mysql。所以这里还是介绍如何使用mysqli来安装emlog。
以下是修改emlog安装程序,无报错安装。如果是实际环境请在本地环境模拟后成功后再更换。
1、修改include\lib\option.php,大概11行修改为mysqli
//默认MySQL链接方式,mysql或mysqli
const DEFAULT_MYSQLCONN = 'mysql';
改为
const DEFAULT_MYSQLCONN = 'mysqli';//默认链接方式改为mysqli
2、修改include\lib\database.php,大概16行删除default:
case 'mysql':
default ://这边需要删除default:
3、修改include\lib\cache.php,大概195行加大括号
$$row['option_name'] = $row['option_value'];
改为
${$row['option_name']} = $row['option_value'];
PS:暂时就发现这么些地方要修改的,还有部分插件写死了数据库链接方式。需要修改,不然直接报数据库错误。
比如:$DB = MySql::getInstance();改为$DB = Database::getInstance();等等。
date_parse() 函数返回一个包含指定日的详细信息的关联数组。如果成功则返回包含被解析日期信息的关联数组,如果失败则返回 FALSE。可以解析的参数和strtotime()支持的参数相同。
定义和用法
date_parse() 函数返回一个包含指定日的详细信息的关联数组。
语法
date_parse(date);
参数 描述
date 必需。规定日期(格式由 strtotime() 接受)。
技术细节
返回值: 如果成功则返回包含被解析日期信息的关联数组,如果失败则返回 FALSE。
PHP 版本: 5.2+
<?php
print_r(date_parse("2016/1/11 10:05:50"));
?>
输出:
Array
(
[year] => 2016
[month] => 1
[day] => 11
[hour] => 10
[minute] => 5
[second] => 50
[fraction] => 0
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 0
[errors] => Array
(
)
[is_localtime] =>
)
PHP Closure类之前在PHP预定义接口中介绍过,但它可不是interface哦,它是一个内部的final类。Closure类是用来表示匿名函数的,所有的匿名函数都是Closure类的实例。
$func = function() {
echo 'func called';
};
var_dump($func); //class Closure#1 (0) { }
$reflect =new ReflectionClass('Closure');
var_dump(
$reflect->isInterface(), //false
$reflect->isFinal(), //true
$reflect->isInternal() //true
);
Closure类结构如下:
Closure::__construct — 用于禁止实例化的构造函数
Closure::bind — 复制一个闭包,绑定指定的$this对象和类作用域。
Closure::bindTo — 复制当前闭包对象,绑定指定的$this对象和类作用域。
看一个绑定$this对象和作用域的例子:
class Lang
{
private $name = 'php';
}
$closure = function () {
return $this->name;
};
$bind_closure = Closure::bind($closure, new Lang(), 'Lang');
echo $bind_closure(); //php
另外,PHP使用魔术方法__invoke()可以使类变成闭包:
class Invoker {
public function __invoke() {return __METHOD__;}
}
$obj = new Invoker;
echo $obj(); //Invoker::__invoke
1、unset($_SESSION['xxx']) 删除单个session,unset($_SESSION['xxx']) 用来unregister一个已注册的session变量。其作用和session_unregister()相同。
session_unregister()在PHP5中已经废弃。
<?php // 初始化session. session_start(); /*** 删除所有的session变量..也可用unset($_SESSION[xxx])逐个删除。****/ $_SESSION = array(); /***删除sessin id.由于session默认是基于cookie的,所以使用setcookie删除包含session id的cookie.***/ if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 最后彻底销毁session. session_destroy(); ?>
unset($_SESSION) 此函数千万不可使用,它会将全局变量$_SESSION销毁,而且还没有可行的办法将其恢复。用户也不再可以注册$_session变量。
2、session_unset() 或者 $_SESSION=array() 删除多个session
3、session_destroy()结束当前的会话,并清空会话中的所有资源。该函数不会unset(释放)和当前session相关的全局变量(globalvariables),也不会删除客户端的session cookie.PHP默认的session是基于cookie的,如果要删除cookie的话,必须借助setcookie()函数。
总结:
session_destroy是注销所有的session变量,并且结束session会话;
如果希望删除一些session数据,则可以使用unset()函数或session_destroy()函数。unset()函数的作用是释放指定的session变量,调用格式如下:
<?php unset($_SESSION['jugelizi']); ?>
session_destroy()函数的作用是将session全部删除,调用格式如下:
<?PHP session_destroy(); ?>
提示:session_destroy()会重新设置session,你会丢失所有已保存的session数据。
session_unset()并不注销session变量,但把所有的session变量的值清空。