邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

php 解决json_encode中文UNICODE转码问题
前天在做一个功能,往数据表插入一个json数据,发现数据竟然是这样
{"transport":"u5965u8fea","reason":"u6e9cu5b8c"}
中文自动被转码了,于是百度了下,找到了几种解决办法

1.要求php5.4版本以上
<?php
echo json_encode("中文", JSON_UNESCAPED_UNICODE);

2.
function decodeUnicode($str){
    return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
        create_function(
            '$matches',
            'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
        ),
        $str);
}
$array = array("transport"=>"英菲尼迪","reason"=>"出差");
$json = decodeUnicode(json_encode($array));
然后插入数据表,读取的时候
$array_new = (array)json_decode($json);
print_r($array_new);

php读取CSV文件
php读取CSV文件

<?php
$result = _import_csv('./ceshi.csv');
echo "<pre>";
print_r($result);
echo "</pre>";

function  _import_csv($filename){
$return = array();
$row = 0;
if (($handle = fopen($filename,"r" )) !==  FALSE ) {
    while (($data = fgetcsv($handle,1000)) !==  FALSE ) {
    if($row>=1){ //过滤第一行标题
    $num = count($data);
        for ($i=0;$i<$num;$i++) {
        $data[$i] = trim($data[$i]);
        if($data[$i]==''){ //如果为空,则跳过此行继续循环
        continue;
        }else{
        $return[$row][$i] = $data[$i];
        }
       
      }
    }
      $row++;
    }
    fclose($handle);

    return $return;
}else{
return $return;
}


?>

csv文件格式如下,文件名ceshi.csv
姓名 账号
action 1
xing 2
dong 3

PHPRPC
PHPRPC 是一个轻型的、安全的、跨网际的、跨语言的、跨平台的、跨环境的、跨域的、支持复杂对象传输的、支持引用参数传递的、支持内容输出重定向的、支持分级错误处理的、支持会话的、面向服务的高性能远程过程调用协议。
在PHP中设置分布式memcache存取
在PHP中设置分布式memcache存取

//1. 创建对象
$mem = new Memcache();
//2. 添加服务
$mem->addServer("192.168.100.101",11211);
$mem->addServer("192.168.100.102",11211);
$mem->addServer("192.168.100.103",11211);
//3. 放置信息
$mem->add("mystr","hello memcache!",MEMCACHE_COMPRESSED,0);
$mem->add("myarray",array(10,20,30,40),MEMCACHE_COMPRESSED,0);
$mem->add("myob",new Stu(),MEMCACHE_COMPRESSED,0);
//4. 获取信息
echo $mem->get("mystr")."<br/>";
var_dump($mem->get('myarray'));
echo "<br/>";
$mem->get("myob")->getinfo();
MethodNotAllowedHttpException in RouteCollection.php line 219:
laravel框架访问pages/show里报错
MethodNotAllowedHttpException in RouteCollection.php line 219:

我的路由配置
Route::resource('pages', 'PagesController',['except' => ['index','show']]);
需要配置错误页面

新建resources/views/errors/405.blade.php页面

即可解决


php7性能测试

利用apache ab测试php7性能

为了更精准,测试前我先重启了下服务器,请求1000 并发100 下图是php7.0.0

QQ截图20151211091219.png

下图是php5.5.7

QQ截图20151211092816.png


看图一目了然

/server/php-7.0.0/ext/iconv/iconv.c:1505: undefined reference to `libiconv_open'
编译php7时报错
/server/php-7.0.0/ext/iconv/iconv.c:1505: undefined reference to `libiconv_open'

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar zxvf libiconv-1.14.tar.gz
cd libiconv-1.14
.configure --prefix=/usr/local/libiconv
make 
make install

然后再编译php7的时候 加上
./configure --prefix=/alidata/server/php7 \
--with-config-file-path=/alidata/server/php7/etc \
--with-iconv=/usr/local/libiconv \
--with-mcrypt \
--with-mcrypt \
--enable-mysqlnd --with-gd \
.....
linux下升级php7
如果你的服务器里已经装过低版本的php,可以先跳过此步,后面编译php7的时候,如果报错,再根据错误提示,再来安装,如果不嫌麻烦的话

yum install php-mcrypt libmcrypt libmcrypt-devel  libxml2-devel  \
openssl-devel  libcurl-devel \
libjpeg.x86_64 libpng.x86_64 libjpeg-devel.x86_64 \
libpng-devel.x86_64   libjpeg-turbo-devel\
freetype.x86_64 freetype-devel.x86_64 \
libmcrypt-devel   mysql-devel  -y

我的php7是计划装在 /server/php7/目录下,之前的是在/server/php/目录下

下载编译php7
cd /server/
wget http://cn2.php.net/distributions/php-7.0.0.tar.gz
tar zxvf php-7.0.0.tar.gz
cd php-7.0.0

./configure --prefix=/server/php7 \
--with-config-file-path=/server/php7/etc \
--with-mcrypt \
--with-mcrypt \
--enable-mysqlnd --with-gd \
--with-iconv=/usr/local/libiconv \
--with-zlib \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--enable-ftp \
--enable-gd-native-ttf \
--with-openssl \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-gettext \
--with-curl \
--with-jpeg-dir \
--with-freetype-dir \
--with-mysqli \
--enable-embedded-mysqli  \
--with-pdo-mysql

make
make install

配置php
cp php.ini-production /server/php7/etc/php.ini
cp sapi/fpm/init.d.php-fpm /etc/init.d/php7-fpm //是为了和之前的不冲突
chmod +x /etc/init.d/php7-fpm
cp /server/php7/etc/php-fpm.conf.default /server/php7/etc/php-fpm.conf
cp /server/php7/etc/php-fpm.d/www.conf.default /server/php7/etc/php-fpm.d/www.conf
vim /server/php7/etc/php.ini
# 加入
zend_extension=/server/php7/lib/php/extensions/no-debug-non-zts-20151012/opcache.so

vim /server/php7/etc/php-fpm.d/www.conf //修改子进程用户

user = nobody
group = nobody
修改为
user = www
group = www

# 启动
/etc/init.d/php7-fpm start  //如果之前有老的php版本,记得先关掉

我之前的php版本是加入的系统自启动,所有还得修改
vim /etc/rc.d/rc.local
修改为
#/etc/init.d/php-fpm start
/etc/init.d/php7-fpm start
还有之前我吧php命令加入到了环境变量,还需要修改
vim /etc/profile
修改为

export PATH=$PATH:/server/mysql/bin:/server/nginx/sbin:/server/php7/sbin:/server/php7/bin

为了安全最好是去掉头信息  X-Powered-By: PHP/7.*.*
则修改 php.ini 文件 设置 expose_php = Off
vim /server/php7/etc/php.ini
找到 expose_php = On
改为 expose_php = Off



优惠券
广告位-淘宝
最新微语