PHP5.4才支持JSON_UNESCAPED_UNICODE这个参数,此参数是让中文字符在json_encode的时候不用转义,减少数据传输量。但在PHP5.3中,就得自己写个函数来实现,以下就是解决方法:

/**
* 对变量进行 JSON 编码
* @param mixed value 待编码的 value ,除了resource 类型之外,可以为任何数据类型,该函数只能接受 UTF-8 编码的数据
* @return string 返回 value 值的 JSON 形式
*/
function json_encode_ex($value)
{
    if (version_compare(PHP_VERSION,'5.4.0','<'))
    {
        $str = json_encode($value);
        $str = preg_replace_callback(
                                    "#\\\u([0-9a-f]{4})#i",
                                    function($matchs)
                                    {
                                         return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));
                                    },
                                     $str
                                    );
        return $str;
    }
    else
    {
        return json_encode($value, JSON_UNESCAPED_UNICODE);
    }
}
Tags: ,
采用默认设置 wincache.reroute_enabled 为true
wincache.reroute_enabled boolean
Enables or disables the rerouting of certain file I/O functions through the file cache.

这个配置将对PHP中的IO函数相关的文件进行路由缓存。这可能导致一些问题。比如我博客上的附件全都无法下载了,附件的图片也无法显示,查看路由,这些缓存的文件全部路由到了attachment.php。将PHP.ini中的wincache.reroute_enabled = 0 之后,便没有这个问题了。
Tags: ,
最近在部署一个phalcon开发的网站的时候发现了一个怪像,原来在本地linux下,phalcon控制器与方法不区分大小写,但是到了实际网站中却发现,却又区分大小写。比如访问 /index/test 正常,但访问 /Index/test 或者 /index/Test 均不正常,这让人困惑不已。经检查两地配置,nginx/php配置均为相同。唯一区分是本地Linux环境为Centos 32位版本,实际服务器上为64位版本,难道phalon的32位代码与64位代码有所区分?
去翻看了phalcon论坛,有的人也提出了这个问题,然后作者是给出了答案:
http://forum.phalconphp.com/discussion/1824/case-insesitive-routing-how-to-

一、解决方法一(推荐方法)
在入口的index.php最前面适当处加入:

if (isset($_GET['_url'])) {
     $_GET['_url'] = strtolower($_GET['_url']);
}


二、解决方法二 仅适用apache

httpd.conf - add RewriteMap and enable proxy.

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
...

<VirtualHost *:8188>
DocumentRoot "C:/Eclipse 4 Workspace/phalcon/html/www/"
php_admin_flag engine On
RewriteMap lowercase int:tolower
    ProxyRequests On
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /index.php?_url=/${lowercase:$1} [QSA,L,P]
</IfModule>


不管怎么说,我觉得是phalcon源码中有些许问题导致这个不一致。现在的版本是在1.3.4,随着phalcon 2.0即将发布,相信这些小毛病能够去除。

PHP及Phalcon性能上的测试

快乐无极 , 2015/02/11 16:12 , 开发文档 » PHP , 评论(5) , 阅读(15346) , Via 本站原创
  我很推崇Phalcon,之前说过软件站全部由Phalcon重写,访问起来自然几乎和静态页面相差无几。当然这仅是在未达到瓶颈的状态下,实际情况中使用PHP肯定比不过使用纯静态页面。但是你愿意一直用PHP不断的生成纯静态页面吗?现代网站都不再喜欢这一点了。这样的动态性不强。一个模板中只需改动几个字符的代码的事情,便要全部重新一遍纯静态,还不如直接用动态输出的好。
  很多时候人们对PHP和phalcon的性能问题有所疑惑,现在就一些性能测试说明一下。环境都是在虚拟中进行的,数据和真实环境不太一样,但是总体上能反映一些情况了。
  从去年11月底开始动工,决定用PHP改写网站程序,因为老旧的ASP语法啰嗦,扩展起来麻烦,而且数据库执行低下,几乎不能用任何缓存。
现在闲工夫花了大概一个月把http://www.oyksoft.com/ 改造了,不是面貌上的改造,你看到的样子跟以前一样,因为样式没任何改变,但是其核心全是PHP的了。你甚至也看不到这全是用PHP写的,没错,它全是伪静态的。甚至连.asp后缀都是伪装的,因为我不想改变原因的URL结构。shy
  得益于phalcon这个神器,使得网站即使MVC了也没有丝毫减慢影响。phalcon是目前实现比较完美的MVC框架,核心用C代码编写,编译成DLL了,效率自然很高,而且ORM实现比较牛叉,对数据库的封装很是方便。加上使用phpstorm开发集成,那真有一种非常爽快的感觉。而对于比较大点的网站,肯定是要用到缓存的。至于缓存嘛,一开始用的memcache,但发现在Windows IIS7的Fastcgi下大并发下有进程间状态不同步的毛病。由于服务器必须是Win,这个问题也网上到处搜索无果,后来自己写了一个wincache的缓存类,才算基本解决。不得不说微软自家的wincache稳定性果然不是盖的。现在是把它所有功能都用上了,包括了session缓存,OPcache,用户缓存,以及文件缓存。这也让我了解了,windows下用xcache/memcache是不靠谱的,尤其是xcache,在Windows下那就得哭死~自然这些是在linux下没问题的问题,但在封闭的WIN下问题就会出来了……
  当然了,数据从MSSQL转成了MYSQL。这是不用说的,而且用了阿里云的RDS哦,减轻服务器关于数据库的负担。

Xcache和memcache选哪个好

快乐无极 , 2014/06/18 11:05 , 开发文档 » PHP , 评论(0) , 阅读(59683) , Via 本站原创
memcache和 Xcache 是PHP的2个缓存工具。PHP5.5以来,自带有 Zend Opcache ,不过默认没启用。
这些缓存器的原理:
引用
把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,它们的效率是显而易见的,像drupal这种庞大的CMS,每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而知

然而Opcache 只自动缓存代码,它没有开放一个自定义缓存的API,要用到用户缓存的话还得用上Xcache或者memcache。
Xcache是中国人所做,看起来很牛叉,但是在实际应用中发现这个东西太不稳定了,光用它作代码缓存(后台自动缓存PHP代码),竟然有时候会使得整个PHP进程都当掉。然后也试了Xcache的用户缓存,API文档写得真够残的,好在还能用,但万没有想到,在fastcgi模式下,缓存命中率低得可怜,用和没用基本上差不多,明明缓存了,后一个请求过来一查却说没缓存,可能延时个几秒后才得知这个已经缓存了,才能取出缓存内容。这玩意到底仔细测试没有?我用的是3.1.0官方正式版Xcache在PHP 5.5 里作的测试,简直就是个废物!还记得以前在PHP5.2里面也用它过,莫名其妙的请求失败也时有出现。现在直接不敢再用……

相比这个XCache,memcache稳定得多。题外话:memcached和memcache又有点不同,memcached是memcache的守护进程,但是PHP中也有memcached的扩展。这两个说实话是让人头晕不知道是什么区别,其实我看来就是调用memcache的封装模式不太一样而已。具体哪些调用上的不同,参考 http://pecl.php.net/package/memcachehttp://pecl.php.net/package/memcached 。一看就知道memcached要多一些API函数调用,功能也更强大一些。而实际上基础应用的话memcache已经足够。

memcache的使用首先要有它的服务(也就是memcached进程)在跑,这个是一个小小的软件,一般是用C++编译,可以部署在与PHP同一台也可以不同,甚至可以分布式部署几个memcached服务在不同的服务器上。而PHP的memcached只是它的客户端而已。memcached本身没有PHP代码缓存功能,现升到PHP5.5后直接交给自带Opcache 了。一般用它作用户缓存。经过实际开发,memcached稳定性是非常高的,只要有缓存,命中率几乎在99%以上。PHP官方下提供了它的扩展可直接使用:http://pecl.php.net/package/memcache 连Windows版的DLL也直接在那里了,不用自己再编译。Windows下编译这些东西真是麻烦得很啦~

综上memcache更加稳定,推荐使用。Xcache真要用的话,还是老实在本地先测试一下再说。
此外,微软Windows下PHP可以使用Wincache,这个的稳定性没得说的,而且也不用守护进程。但是微软没能编译适用于PHP 64位的DLL。要想通用和跨平台,memcache是首选!!
分页: 1/21 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]