php保存emoji表情字符至mysql

这里只对保存到mysql中进行说明

Mysql版本要求:5.5.3以上,硬性要求,如若不是,请忽略下文。

emoji表情为四字节字符,直接保存写入数据库会报错或乱码。网上有各种不靠谱,改mysql默认编码、改数据库编码种种。。。

这里明确告诉各位看官,最小设置,只需要设置两项:

1、对应表相应字段排序(COLLATE)设置为utf8mb4

2、连接数据库编码(charset)设置为utf8mb4

关于第二步注意:

1、如果以前编码为:utf8,请放心修改,utf8为utf8mb4子集,无缝过度

2、php中设置编码为utf8mb4有个小坑,如果是采用Mysqli连接数据库,并且是通过mysqli::set_charset方法设置编码,是无法起作用的,只能通过query执行“SET NAMES utf8mb4”来达到目的

3、如果是通过PDO连接mysql,则通过设置连接参数达到设置编码目的:

“options” => array(
PDO::MYSQL_ATTR_INIT_COMMAND => ‘SET NAMES utf8mb4’
)

$_SERVER[‘SERVER_PORT’]关于php5.2一个bug

链接在这:phpbug

服务器环境:CentOs + php5.2.13
问题:项目里边$_SERVER[‘SERVER_PORT’]获取到的端口不对

我也遇到同种情况了,我的apache端口已经修改为85
在phpinfo里看到的,$_SERVER[‘SERVER_PORT’]是85,对的。
在项目里边获取到的,就是80。也正好项目里是用到了apache的url重写

我是为了获取当前url的路径

<?php
 
//折中办法
$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? 'https' : 'http';
$host = !empty($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'];
$url = $protocol .'://'. $host . $_SERVER['REQUEST_URI'];

解决“没有找到OCI.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题”报错

Win下 php环境报错:没有找到OCI.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题
这个错误一般出现在php.ini 启用了“oci”扩展的时候出现
解决办法:
1、下载 http://download.oracle.com/otn/nt/instantclient/10204/instantclient-basic-win32-10.2.0.4.zip
2、找到其中的oci.dll 放到 C:\WINDOWS\system32\
3、重启apache

其实说白了,就是要安装oracle客户端,上oracle官网下载安装对应版本instanceclient,安装程序会把客户端bin目录写入环境变量“path”这一点是关键,重启电脑,再设置php oci扩展即可

使用位运算来实现PHP权限控制

原理: 将每个二进制位为一个权限标识位

增加权限使用 | (无论存在与否, 将对应的权限位置1)
删除权限使用 ^ 或 & ~ (无论存在与否, 将对应的权限位置0)
判断权限使用 & (使用与判断对应的权限位是否为1, 是, 返回非0; 不是, 返回0)

参考链接

http://xiaobin.net/archives/8/

http://www.lizhijin.com/view.php/PHP/140.html

http://topic.csdn.net/u/20090421/23/25ff3c5c-8bd1-4899-a05e-ecac2bad36e6.html (算法与前两则不同)

转自:http://www.zvv.cn/blog/show-106-1.html

自己的总结:
有提到过用mysql的set字段来实现系统权限控制,虽然mysql的set字段也是位运算,但用来实现权限控制,需要每次检验权限的时候查询数据库,不是很方便,且从程序通用性角度来看,不能把某个关键设计依赖于其他系统。over