手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2024年09月的文章

征服缓存引发的难题

这次转载的文章讲的是CSs缓存的问题。CSS一般情况下,我们都会做一定的缓存,毕竟这玩意很少会动它,但对于一个稍大一点的网站来说,它就可能会经常变动了。
然而,CSS对于浏览器来说,一般情况下是会被自动缓存的,所以我在导入CSS的时候,都会制定一个版本号放在文件后面如:xxx.css?20091010,下次更新的时候,把这个日期改一下。用户在加载的时候会认为这是一个新文件 。。。

以下是博客园的用户写的文章 :

如何平衡的使用浏览器缓存?平时我们借助缓存来减少用户加载页面文件(比如js,css,image等)的时间和带宽,同时我们要确保用户访问的上述文件时最新的。而后者是我们常常头疼的问题。
本文主要介绍一些小的技巧来确保在网站文件被缓存的同时,又可以得到良好的性能和最新的更新的网站内容。
问题描述
比如我们在某页面加载了css文件,
<link rel="stylesheet" href="/css/styles.css" type="text/css" />
如何优化页面访问的性能呢?
手段1、使用缓存。通常我们希望此文件被浏览器缓存一定的时间,这样可以用户访问此页面的时候不必每次都向服务器请求下载此文件。我们也可以配置服务器在页面添加”Expires”头信息,从而告诉浏览器缓存此文件的时间。
手段2、我们使用yuicompressor等压缩工具对css文件进行压缩,减小文件的大小。
问题是当因版面风格的更新,此css已经做了更新,但是用户可能仍然使用的是旧的页面主题,甚至错乱的页面。这样对用户的体验非常不好。
解决之道:
根本原理:欺骗浏览器,让它认为它加载的文件跟缓存的文件不一样。
方法一、修改文件名
<link rel="stylesheet" href="/css/styles.1234.css" type="text/css" />
方法二、增加Query string
<link rel="stylesheet" href="/css/styles.css?v=1234" type="text/css" />
方法三、修改引用文件路径
这里最好的是在服务器配置文件中进行配置来实现文件路径映射(url mapping)。
<link rel="stylesheet" href="/css.1234/styles.css" type="text/css" />
以上我们以css为例进行了说明,我们来看看图片和js文件。
Images
由于图片的引用一般写在css文件中,并采用相对路径,所以当css的引用路径发生变化的时候,根据重写规则,图片被解析的路径自然会同步发生更新。
JS
适用于css的方法同样都适用于JS。
结束语
当然web站点性能的优化,除了缓存之外,还有许多的方法。比如我们可以借助YSlow来帮助用户得到最好的体验。

 

作者:MingleLui
出处:http://mingle.cnblogs.com/

其实方法都差不多。为了所谓的 yahoo 的N条军规,大家都在互相折腾。
之所以是N,是因为以前是14条,后来加过两次。就忘了几条了。firebug的插件yslow也可以做简单的测试哦

php中addslashes() ,mysql_real_escape_string() 和mysql_escape_string() 的区别

以前还真没有关注过这面的事情。自己在写的时候都是用了一个很简单的函数

PHP代码
  1. <?php  
  2. function escape($str){  
  3.     if(function_exists('mysql_escape_string')){  
  4.          return mysql_escape_string($str);  
  5.     }elseif( function_exists(...real_escape...)){  
  6.        //real_escape  
  7.     }else{  
  8.         if(MAGIC_QUOTER ....判断){  
  9.              return $str  
  10.         }else{  
  11.             return addslashes($str);  
  12.         }  
  13.     }  
  14. }  

但是这篇文章却告诉我,原来这三个函数的功能各有不同,前两个我当然知道,但如果没有加载mysql库,这两个功能是都用不上的,当然,现在有PDO的prepare然后setParam当然是很方便,mysqli函数也有这种功能。如果没有呢?怎么办?下面这篇文章告诉你上面三个函数的区别
来源:http://www.akii.org/2009-08/php-in-the-addslashes-mysql_real_escape_string-and-mysql_escape_string-the-difference-between/

SQL注入攻击是黑客攻击网站最常用的手段。如果你的站点没有使用严格的用户输入检验,那么常容易遭到SQL注入攻击。SQL注入攻击通常通过给站点数据库提交不良的数据或查询语句来实现,很可能使数据库中的纪录遭到暴露,更改或被删除。

为了防止SQL注入攻击,PHP自带一个功能可以对输入的字符串进行处理,可以在较底层对输入进行安全上的初步处理,也即Magic Quotes。(php.ini magic_quotes_gpc)。如果magic_quotes_gpc选项启用,那么输入的字符串中的单引号,双引号和其它一些字符前将会被自动加 上反斜杠\。

但Magic Quotes并不是一个很通用的解决方案,没能屏蔽所有有潜在危险的字符,并且在许多服务器上Magic Quotes并没有被启用。所以,我们还需要使用其它多种方法来防止SQL注入。

许多数据库本身就提供这种输入数据处理功能。例如PHP的MySQL操作函数中有addslashes()、 mysql_real_escape_string()、mysql_escape_string()等函数,可将特殊字符和可能引起数据库操作出错的字 符转义。那么这三个功能函数之间有什么却别呢?下面我们就来详细讲述下。

虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入,还是建议大家加强中文防止SQL注入的检查。addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以addslashes无法成功拦截。

当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。

另外对于php手册中get_magic_quotes_gpc的举例:
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST[‘lastname’]);
} else {
$lastname = $_POST[‘lastname’];
}
最好对magic_quotes_gpc已经开放的情况下,还是对$_POST[’lastname’]进行检查一下。

再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:
mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。

总结一下:

* addslashes() 是强行加\;
* mysql_real_escape_string()  会判断字符集,但是对PHP版本有要求;
* mysql_escape_string不考虑连接的当前字符集。

Tags: mysql, addslashes

有趣的输入法【搜狗云输入法】

凡事和云搭上边,也许都会吸引人的眼球吧?
不过在试用了一下这个输入法后,感觉还是挺新颖的。。
以前所谓的在线输入法,都是一个输入框,你输完后,ctrl+c,ctrl+v的转来转去的,如今,搜狗却不太一样

搜狗这么做

1、右键点击下面的按钮【也就是云输入法的图标,这里不作提供】,选择右键菜单中的“添加到收藏夹…

    提示:已经在IE、搜狗浏览器、世界之窗,Firefox等浏览器下测试通过,部分浏览器在操作中可能给出不安全的警告,请点击允许通过。

2、浏览其他页面时,点击浏览器收藏栏中的“启用搜狗云输入法”,页面左上角浮出云输入法的状态栏(如下图示),即可在该页面使用云输入法输入了!

     提示:使用搜狗云输入法时需要保持客户端输入法在英文键盘状态

看到上面的提示是不是很激动 ?当初我也是很激动,就跑到http://pinyin.sogou.com/cloud/进行了试用,最起码,我在windows下的firefox浏览器上测试成功了,其他浏览器没有测试。

搜狗认为自己的这个产品,即搜狗云输入法是作为搜狗输入法的创新实验室,将持续探索创新的输入模式,并将创新成果移植进入搜狗拼音输入法,提升两亿多的搜狗用户的输入体验的一个概念产品。想来,效率还是有待改进的。毕竟每次输入都需要向搜狗服务器发出请求来获取词组啥的。。。【这东西,估计在网吧会比较多一点,跑到一台机器上没有自己用的输入法,想下载又没权限,它的功能就大了】

其他情况下,我想不出还有什么意思?

Tags: 搜狗, 输入法

几行代码实现文件打包下载

短短几行代码实现文件打包下载。。。

PHP代码
  1. /** 
  2.  * 没有写成class 或者 function ,需要的朋友自己写,就这么几行。。 
  3.  */  
  4. $filename = "./test/test.zip"//最终生成的文件名(含路径)  
  5. if(!file_exists($filename)){  
  6.     //重新生成文件  
  7.     $zip = new ZipArchive();//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释  
  8.     if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {  
  9.         exit('无法打开文件,或者文件创建失败');  
  10.     }  
  11.     foreach$datalist as $val){  
  12.         $attachfile = $attachmentDir . $val['filepath'];    //获取原始文件路径  
  13.         if(file_exists($attachfile)){  
  14.             $zip->addFile( $attachfile , basename($attachfile));//第二个参数是放在压缩包中的文件名称,如果文件可能会有重复,就需要注意一下  
  15.         }  
  16.     }  
  17.     $zip->close();//关闭  
  18. }  
  19. if( !file_exists($filename)){  
  20.     exit("无法找到文件"); //即使创建,仍有可能失败。。。。  
  21. }  
  22. header("Cache-Control: public");   
  23. header("Content-Description: File Transfer");   
  24. header('Content-disposition: attachment; filename='.basename($filename)); //文件名  
  25. header("Content-Type: application/zip"); //zip格式的  
  26. header("Content-Transfer-Encoding: binary");    //告诉浏览器,这是二进制文件   
  27. header('Content-Length: 'filesize($filename));    //告诉浏览器,文件大小  
  28. @readfile($filename);         

Tags: php, 文件下载, zip压缩

关注张宴:利用开源的Gearman框架构建分布式图片处理平台

关注一下张宴的这篇【利用开源的Gearman框架构建分布式图片处理平台】,网址为:http://blog.s135.com/dips/

正如张宴一开始说的:
大小: 46.72 K
尺寸: 294 x 325
浏览: 1352 次
点击打开新窗口浏览全图

如何把这些闲置资源利用起来才是真的。之所以不转载,是因为,我目前还遇不到这类事情,但了解一下总是好的。。。
顺便转载了PPT和一些软件的安装
ksg_xoyo_dips.pdf



附1:Gearman分布式计算框架网址
http://gearman.org/

附2:PHP客户端Gearman扩展安装:

wget http://www.monkey.org/~provos/libevent-1.4.12-stable.tar.gz
tar zxvf libevent-1.4.12-stable.tar.gz
cd libevent-1.4.12-stable/
./configure --prefix=/usr
make && make install
/sbin/ldconfig
cd ../

wget http://launchpad.net/gearmand/trunk/0.9/+download/gearmand-0.9.tar.gz
tar zxvf gearmand-0.9.tar.gz
cd gearmand-0.9/
./configure
make
make install
/sbin/ldconfig
cd ../

wget http://pecl.php.net/get/gearman-0.5.0.tgz
tar zxvf gearman-0.5.0.tgz
cd gearman-0.5.0
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-gearman
make
make install
cd ../



php.ini文件中增加:

extension = "gearman.so"


附3:Gearman调度器安装(JOB Server):

wget http://launchpad.net/gearmand/trunk/0.9/+download/gearmand-0.9.tar.gz
tar zxvf gearmand-0.9.tar.gz
cd gearmand-0.9/
./configure
make
make install
/sbin/ldconfig
cd ../



以守护进程启动:

gearmand -L 192.168.0.1 -p 4730  -u root -d

Tags: 分布式, php处理图片