PHP浮点数的一个常见问题的解答

关于PHP的浮点数, 我之前写过一篇文章: 关于PHP浮点数你应该知道的(All ‘bogus’ about the float in PHP)

不过, 我当时遗漏了一点, 也就是对于如下的这个常见问题的回答:

<?php
    $f = 0.58;
    var_dump(intval($f * 100)); //为啥输出57
?>

为啥输出是57啊? PHP的bug么?

我相信有很多的同学有过这样的疑问, 因为光问我类似问题的人就很多, 更不用说bugs.php.net上经常有人问…

分类至 PHP
0条评论

MySQL的四种事务隔离级别

一、事务的基本要素(ACID)
  1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
  2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
  3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
  4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
二、事务的并发问题 ……
三、MySQL事务隔离级别 ……

分类至 MySQL
0条评论

CentOS7使用firewalld打开关闭防火墙与端口

1、firewalld的基本使用
#启动:
systemctl start firewalld
#关闭:
systemctl stop firewalld
#查看状态:
systemctl status firewalld 
#开机禁用:
systemctl disable firewalld
#开机启用: 
systemctl enable firewalld

2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。
#启动一个服务:
systemctl start firewalld.service

分类至 Linux
0条评论

file_get_contents 和 curl 区别

1、file_get_contents 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存。但是CURL会自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询的次数。所以CURL的性能比file_get_contents 好很多。
2、file_get_contents 在请求HTTP时,使用的是http_fopen_wrapper,不会keeplive。而curl却可以。这样在多次请求多个链接时,curl效率会好一些。
3、curl 可以模拟多种请求,例如:POST数据,表单提交等,用户可以按照自己的需求来定制请求。file_get_contents 也支持,但是配置更繁琐。
4、curl 支持更多协议,有http、https、ftp、gopher、telnet、dict、file、ldap;模拟 Cookie 登录,爬取网页;FTP 上传下载。
5、file_get_contents 建立远程连接失败会产生 Warning 警告;而 curl 则是把请求失败的状态码放入请求结果返回。

分类至 PHP
0条评论

用PHP进行HTTP认证

如果你有一个简单的页面需要做登录认证,也就是需要一个登录框,但是自己又懒得写一堆HTML和CSS,那么你可以借用浏览器的HTTP认证。
我们可以用PHP的 header() 函数来向客户端浏览器发送401状态信息,使浏览器弹出一个用户名/密码输入窗口。当用户输入用户名和密码提交后,浏览器将用户名和密码转码后添加到HTTP请求头发送给服务器,而PHP脚本将接收到用户名和密码存储到两个变量里:$_SERVER['PHP_AUTH_USER']、$_SERVER['PHP_AUTH_PW'] 。
浏览器支持两种常见的认证方法,分别是“Basic”和“Digest”。

分类至 PHP
0条评论

MySQL函数FIELD()用法

MySQL函数FIELD语法定义如下:

  • 语法:FIELD(str, str1, str2, str3, ...)
  • 解释:返回 str1,str2,str3,... 列表中str的索引(位置)。 如果未找到str,则返回0。如果FIELD()的所有参数都是字符串,则所有参数都将作为字符串进行比较。如果所有参数都是数字,则将它们作为数字进行比较。 否则,参数将进行两次比较。如果str为NULL,则返回值为0,因为NULL无法与任何值进行相等性比较。FIELD()和ELT()互补。
分类至 MySQL
0条评论

MySQL函数FIND_IN_SET()用法

MySQL函数FIND_IN_SET语法定义如下:

  • 语法:FIND_IN_SET(str, strlist) 
  • 解释:如果字符串str位于由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。 strlist列表是一系列子串以英文逗号(,)拼接而成的字符串。 如果第一个参数是常量字符串而第二个参数是SET类型的列,则FIND_IN_SET()函数被优化为使用位算术。 如果str不在strlist中,或者strlist是空字符串,则返回0。 如果任一参数为NULL,则返回NULL。 如果第一个参数包含英文逗号(,)字符,则此函数无法正常工作。

 

分类至 MySQL
0条评论

MySQL函数GROUP_CONCAT()用法

先来看看官方手册对 GROUP_CONCAT 说明:

此函数返回一个字符串,是查询结果集合中指定列非NULL值的串联。如果所有列都是NULL,则此函数返回NULL。完整语法如下:

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

GROUP_CONCAT 是一个聚合函数,通常跟 GROUP BY 一起使用。

分类至 MySQL
0条评论