分类目录归档:PHP

php九大缓存技术,你知道几个?

月小升经常的缓存算法是生成固定静态文件,让Nginx访问这个静态文件。如果会发生更新,那么后台更新文章,删除这个文件,程序访问这个静态文件不存在的时候,自动生成即可。 其实除了文件缓存,还有很多办法。据我所知道的Ecshop和Discuz用了很多SQL语句的缓存。比如首页推荐的产品,可以生成数据序列化存入数据库,避免下次加载发生多次sql查询 下面看到的9个技术,以前也听说过,不过这篇比较全面的php缓存文章,还是不错的。 1、全页面静态化缓存 也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程。此种方式,在CMS系统中比较常见,比如dedecms; 一种比较常用的实现方式是用输出缓存: Ob_start() ******要运行的代码******* $content = Ob_get_contents(); ****将缓存内容写入html文件***** Ob_end_clean(); 2、页面部分缓存 该种方式,是将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示;可以使用类似于ob_get_contents的方式实现,也可以利用类似ESI之类的页面片段缓存策略,使其用来做动态页面中相对静态的片段部分的缓存(ESI技术,请baidu,此处不详讲)。 该种方式可以用于如商城中的商品页; 3、数据缓存 顾名思义,就是缓存数据的一种方式;比如,商城中的某个商品信息,当用商品id去请求时,就会得出包括店铺信息、商品信息等数据,此时就可以将这些数据缓存到一个php文件中,文件名包含商品id来建一个唯一标示;下一次有人想查看这个商品时,首先就直接调这个文件里面的信息,而不用再去数据库查询;其实缓存文件中缓存的就是一个php数组之类; Ecmall商城系统里面就用了这种方式; 4、查询缓存 其实这跟数据缓存是一个思路,就是根据查询语句来缓存;将查询得到的数据缓存在一个文件中,下次遇到相同的查询时,就直接先从这个文件里面调数据,不会再去查数据库;但此处的缓存文件名可能就需要以查询语句为基点来建立唯一标示; 按时间变更进行缓存 其实,这一条不是真正的缓存方式;上面的2、3、4的缓存技术一般都用到了时间变更判断;就是对于缓存文件您需要设一个有效时间,在这个有效时间内,相同的访问才会先取缓存文件的内容,但是超过设定的缓存时间,就需要重新从数据库中获取数据,并生产最新的缓存文件;比如,我将我们商城的首页就是设置2个小时更新一次; 5、按内容变更进行缓存 这个也并非独立的缓存技术,需结合着用;就是当数据库内容被修改时,即刻更新缓存文件; 比如,一个人流量很大的商城,商品很多,商品表必然比较大,这表的压力也比较重;我们就可以对商品显示页进行页面缓存; 当商家在后台修改这个商品的信息时,点击保存,我们同时就更新缓存文件;那么,买家访问这个商品信息时,实际上访问的是一个静态页面,而不需要再去访问数据库; 试想,如果对商品页不缓存,那么每次访问一个商品就要去数据库查一次,如果有10万人在线浏览商品,那服务器压力就大了; 6、内存式缓存 提到这个,可能大家想到的首先就是Memcached;memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。 它就是将需要缓存的信息,缓存到系统内存中,需要获取信息时,直接到内存中取;比较常用的方式就是 key–>value方式; <?php $memcachehost = ’192.168.6.191′; $memcacheport = … 继续阅读

发表在 PHP, 数据库 | 标签为 | 留下评论

php session session_set_save_handler 机制

php自身带功能,将session的数据从之前的files 改变到其他任何地方。比如mysql redis等等,方便你分布式的集群应用。 看一下原理 <?php /** *Session open (called by session_start( )) *Session close (called at page end) *Session read (called after session_start( ) ) *Session write (called when session data is to be written) *Session destroy (called by session_destroy( … 继续阅读

发表在 PHP | 标签为 , , | 留下评论

ecshop自定义属性,形成自定义价格,修改购物车

需求 用户进行一连串的选择,以后产品的价格发生了变化,分支超级多,无法用自带的属性搞定了。 lib_order.php 35   while ($row = $GLOBALS[’db’]->fetchRow($res)) { if($row[’attr_itype’]==3) { $attr_price = round(floatval($row[’attr_price’]), 2); $attr .= sprintf($fmt, $row[’attr_name’], $row[’attr_value’], $desc[$i]);   $i++; }elseif($row[’attr_itype’]==4){ $attr_price = round($desc[$i]); //$descp[$i] 传过来大树的id,反推价格,目前直接用个费用来表示。输入多少钱,就是多少钱。这么处理似乎仅仅解决了展示问题。实际计算在其他地方 $attr .= sprintf($fmt2, $row[’attr_name’], $row[’attr_value’],$attr_price); } else { $attr_price = … 继续阅读

发表在 PHP | 标签为 , | 3 条评论

读取mysql一个库下面的所有的表table

<?php require ‘class/db.php’;   $sql = "select * from information_schema.tables where table_schema=’ecshop’ and table_type=’base table’ order by TABLE_ROWS desc ";   $arr = $db->queryArray($sql);   //var_dump($arr); foreach ($arr as $k => $v) { $tbname = $v->TABLE_NAME; $rows = $v->TABLE_ROWS; echo … 继续阅读

发表在 PHP, 数据库 | 标签为 | 留下评论

mac 自带的apache

mac 系统自带的Apache cd /etc/apache2 启用apache的命令: sudo apachectl start/restart vi httpd.conf 查找DocumentRoot DocumentRoot “/Library/WebServer/Documents” 根目录定位在这里 Mac Pro 自带的apache版本 Server:Apache/2.4.16 (Unix) Request Headers (10) Name 没有拖php 自己安装php

发表在 MAC, PHP | 标签为 , | 留下评论

php-java-bridge php调用java的方法

此方法不需要重启apache,不需要修改php.ini文件 php-java-bridge 项目地址 http://php-java-bridge.sourceforge.net/pjb/download.php 下载 php-java-bridge.jar java.inc 双击php-java-bridge.jar 浏览器输入 http://localhost:8080/ 能看到下载目录的东西(因为我直接在我的下载目录双击了这个jar) 估计放在哪里双击,就会显示这个目录的所有文件。 网页底部显示这些信息 写一个php http://localhost/javaer/java.php 把下载的java.inc 放在javaer目录下 java.php 内容 <?php //define("JAVA_DEBUG", true); //调试设置 //define("JAVA_HOSTS", "127.0.0.1:8080"); //设置javabridge监听端口,如果开启javabridge.jar设置的端口不是8080,可通过此语句更改 require_once("Java.inc"); //php调用java的接口,路径问题需要注意 $here=realpath(dirname($_SERVER["SCRIPT_FILENAME"])); //java_set_library_path($here.PATH_SEPARATOR .’.'); //java_set_library_path($here.PATH_SEPARATOR .’.'); //设置java开发包(class或jar文件)路径,多个路径就用PATH_SEPARATOR分隔,保证跨平的支持。 //java_set_file_encoding("GBK"); //设置JAVA编码。没试过其它的编码,也没深入研究如何能用其它的编码。   echo ‘<meta charset="UTF-8">’; … 继续阅读

发表在 JAVA, PHP | 标签为 , , | 留下评论

ecshop随意调用自定义属性

goods.php 找到 $properties = get_goods_properties($goods_id); // 获得商品的规格和属性 我的229行 增加以下代码 //自定义属性数据结构 if($properties[’pro’]){ $myprolist = $properties[’pro’][’Attribute’]; $mypro = array(); foreach ($myprolist as $key => $v) { $name = $v[’name’]; $mypro[$name] = $v[’value’]; } }   $smarty->assign(’mypro’, $mypro); // 商品属性 /* array(2) { … 继续阅读

发表在 PHP | 标签为 | 留下评论

centos yum 升级php到5.5

查看服务器php列表 yum list | grep php http://dl.fedoraproject.org/pub/epel/5/x86_64/ #rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-rpm-macros-5-7.noarch.rpm rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-rpm-macros-5-7.noarch.rpm 添加 epel 源 rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 添加 remi 源 # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm yum –enablerepo=remi,remi-php55 install php-fpm php-common php-devel php-mysqlnd php-mb rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm … 继续阅读

发表在 Linux, PHP | 标签为 , , | 一条评论

ecshop php5.5兼容utf-8版本

发生了这样的事情。 preg_replace Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /Users/ge/ge/web/php/ge/ecshop/includes/cls_template.php on line 1067 300 return preg_replace("/{([^\}\{\n]*)}/e", "\$this->sel ect(‘\\1′);", $source); 替换为 return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->sel ect($r[1]); }, $source); 问题解决。 今天安装ecshop的时候最上面出现了一个错误提示:Strict Standards: Only variables should be … 继续阅读

发表在 PHP | 标签为 , , | 留下评论

paypal集成沙盒测试账户设置

首先说明,paypal的沙盒测试,一切都和正式的一样,除了最终url不同。功能完全一致。如果不对,说明有地方没有设置正确。 系统自动生成paypal沙盒测试账户 ch*****-facilitator@163.com 测试的商家 ch*****-buyer@163.com 测试的买家 paypal沙盒测试地址 https://www.sandbox.paypal.com/ 你发现自己的账户无法登陆进去的。对的,要用沙盒测试账户 -facilitator的这个。 发现使用自己的密码,依然没有办法登录进去 https://developer.paypal.com/developer/accounts/ 点击账户前面的小三角 看到下图 点击去,修改密码 登录进去,就和真的账户是一样的。 沙盒测试提交付款地址 https://www.sandbox.paypal.com/cgi-bin/webscr 源代码地址 https://developer.paypal.com/docs/classic/paypal-payments-standard/ht_test-pps-buttons/ 要点,必须在paypal的后台设置notify_url 的地址。要远程服务器的,不要用本地,因为paypal 的服务器 要请求这个地址。 这个URL,具体怎么用请阅读上一篇paypal集成代码

发表在 PHP | 标签为 , | 留下评论