订阅RSS

由 dessun 发表于 2011-11-10 04:14:45

优化前

xhtml代码
  1. /* 
  2.               $rzdb=Zend_Db_Table_Abstract::getDefaultAdapter(); 
  3.               $sql="select city from product_sort_city where productId=".$productId; 
  4.               $res=$rzdb->fetchAll($sql); 
  5.               foreach ($res as $k =>$v):$res[$k]=$res[$k]['city']; endforeach;   //得到 所有未修改前的保险项目城市 
  6.               $res2=array(); //存储新提交的保险项目城市 
  7.               
  8.               foreach ($post['scity'] as $key => $value) { 
  9.                  
  10.                     foreach($value as $v):  
  11.                 { 
  12.                     //$sql="select * from product_sort_city where productId=".$productId." and provinceId=".$key." and city='".$v."'"; 
  13.                     //$resx=    $rzdb->fetch($sql); 
  14.                     $res2[]=$v; //存储 
  15.                      if(!in_array($v,$res)) 
  16.                      $rzdb->insert('product_sort_city',array('productId' => $id, 'provinceID' => $key, 'city' => $v));//对新增数据进行处理 
  17.                 } 
  18.                 endforeach; 
  19.                  
  20.               } 
  21.             //  比较 城市差异  删除 不需要显示的城市 
  22.             foreach($res as $v) 
  23.                 {    
  24.                     if(!in_array($v,$res2)) {$rzdb->delete("product_sort_city","productId=".$productId."and city='".$v."'"); 
  25.                     echo $v."即将删除"; 
  26.                     } 
  27.                 }    
  28.                 */ 

优化后

$T_productsortcity= new Panel_Model_DbTable_ProductSortCity();
                         $T_productsortcity->delete(array('productId = ?' => $productId));
                         
                        foreach ($post['scity'] as $key => $value) {
                           
                            foreach($value as $v):
                       
                            $T_productsortcity->insert(array('productId' => $productId, 'provinceID' => $key, 'city' => $v));
                            endforeach;

 

Tags: sql,优化

php学习 69条评论

由 dessun 发表于 2011-11-09 09:17:09

大型网站 zend 可以创建数据模型 进行查询 

application/modules/ACTION/controllers 下的文件是控制器 文件

application/modules/ACTION/views/scripts 下的文件是视图文件

application/modules/ACTION/models/DbTable 下的文件是数据模型

application/configs/application.ini 是配置文件 

application/configs/*.xml 是 菜单文件

Bootstrap.php 是引导程序

 

 

xhtml代码
  1. $db = Zend_Db_Table_Abstract::getDefaultAdapter(); $db->fetchAll("select * from table_name");  
  2.  
  3.  
  4. 如果有参数的话: 
  5.  
  6.   $cid = (int) $this->_request->getParam('cid'); 
  7.  $cname = $this->_request->getParam('cname'); 
  8.  $db = Zend_Db_Table_Abstract::getDefaultAdapter(); $db->fetchAll("select * from table_name where cname like %". $db->quote($cname)."% and cid=".$cid);  
  9.  
  10.  
  11. 需要对参数添加引号防止sql攻击。 

 

引文  Zend官方数据库直接查询方法

 

 

xhtml代码
  1. $sql = $db->quoteInto( 
  2.     'SELECT * FROM example WHERE date > ?', 
  3.     '2006-01-01' 
  4. ); 
  5. //? 将被替换成 2006-01-01; 
  6. //quoteInto 对sql进行加引号处理 
  7. $result = $db->query($sql); 
  8.  
  9. // 这一次,使用绑定的占位符. 
  10. $result = $db->query( 
  11.     'SELECT * FROM example WHERE date > :placeholder', 
  12.     array('placeholder' => '2006-01-01') 
  13. ); 
  14.  
  15. //数据库插入  
  16. // 以"列名"=>"数据"的格式格式构造插入数组,插入数据行 
  17. $row = array ( 
  18.     'noble_title'    => 'King', 
  19.     'first_name'     => 'Arthur', 
  20.     'favorite_color' => 'blue', 
  21. ); 
  22.  
  23. // 插入数据的数据表 
  24. $table = 'round_table'
  25.  
  26. // i插入数据行并返回行数 
  27. $rows_affected = $db->insert($table, $row); 
  28. $last_insert_id = $db->lastInsertId(); 
  29.  
  30.  
  31. //zend 数据库更新 
  32. // 以"列名"=>"数据"的格式构造更新数组,更新数据行 
  33. $set = array ( 
  34.     'favorite_color' => 'yellow', 
  35. ); 
  36.  
  37. // 更新的数据表 
  38. $table = 'round_table'
  39.  
  40. // where语句 
  41. $where = $db->quoteInto('first_name = ?', 'Robin'); 
  42.  
  43. // 更新表数据,返回更新的行数 
  44. $rows_affected = $db->update($table, $set, $where); 
  45.  
  46. //删除指定的数据库记录 
  47. // 设定需要删除数据的表 
  48. $table = 'round_table'
  49.  
  50. // where条件语句 
  51. $where = $db->quoteInto('first_name = ?', 'Patsy'); 
  52.  
  53. // 删除数据并得到影响的行数 
  54. $rows_affected = $db->delete($table, $where); 
  55.  
  56. //FETCH 
  57. $stmt = $db->query('SELECT * FROM bugs'); 
  58.  
  59. while ($row = $stmt->fetch()) { 
  60.     echo $row['bug_description']; 
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74. //定义一个数据调用模型        
  75.  
  76. public function getInsureCityList($age,$area){ 
  77.               //使用原生 sql 
  78.             $db = Zend_Db_Table_Abstract::getDefaultAdapter(); 
  79.             $sql="select a.productID,a.productName from insure_product as a left join product_sort_city as b  on a.productID=b.productID where b.city='".$area."'"; 
  80.              $data=    $db->fetchAll($sql); 
  81.             
  82.             return $data; 
  83.         }  

 

Tags: sql,zend framework

php学习 63条评论

由 dessun 发表于 2011-11-02 06:08:08

VPS十分繁忙,在跑一些密集操作数据库的Rake任务时尤其如此。但我观察发现,VPS服务器的4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态。
不了解Linux是如何调度的,但在VPS的这种状态下,显然有优化的余地。除了处理正常任务,CPU#0还需要处理各种中断。因此,若能将CPU#0分担的任务摊派到其他CPU核心上,可以预见,系统的处理能力将有更大的提升。
两个名词
SMP (Symmetrical Multi-Processing):指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。 [更多...]
CPU affinity:中文唤作“CPU亲和力”,是指在CMP架构下,能够将一个或多个进程绑定到一个或多个处理器上运行。[更多...]
一、在Linux上修改进程的“CPU亲和力”
在Linux上,可以通过 taskset 命令进行修改。以Ubuntu为例,运行如下命令可以安装taskset工具。
# apt-get install schedutils
对运行中的进程,文档上说可以用下面的命令,把CPU#1 #2 #3分配给PID为2345的进程:
# taskset -cp 1,2,3 2345
但我尝试没奏效,于是我关掉了MySQL,并用taskset将它启动:
# taskset -c 1,2,3 /etc/init.d/mysql start
对于其他进程,也可如此处理(nginx除外,详见下文)。之后用top查看CPU的使用情况,原来空闲的#1 #2 #3,已经在辛勤工作了。
二、配置nginx绑定CPU
刚才说nginx除外,是因为nginx提供了更精确的控制。
在conf/nginx.conf中,有如下一行:
worker_processes 1;
这是用来配置nginx启动几个工作进程的,默认为1。而nginx还支持一个名为worker_cpu_affinity的配置项,也就是说,nginx可以为每个工作进程绑定CPU。我做了如下配置:
worker_processes 3;
worker_cpu_affinity 0010 0100 1000;
这里0010 0100 1000是掩码,分别代表第2、3、4颗cpu核心。
重启nginx后,3个工作进程就可以各自用各自的CPU了。
三、刨根问底

如果自己写代码,要把进程绑定到CPU,该怎么做?可以用sched_setaffinity函数。在Linux上,这会触发一次系统调用。

如果父进程设置了affinity,之后其创建的子进程是否会有同样的属性?我发现子进程确实继承了父进程的affinity属性(其实用taskset启动进程就是一次fork+exec)。



四、Windows?
在Windows上修改“CPU亲和力”,可以通过任务管理器搞定。

点击进程 关系设置 即可
* 个人感觉,Windows系统中翻译的“处理器关系”比“CPU亲和力”容易理解点儿
—————–
进行了这样的修改后,即使系统负载达到3以上,不带缓存打开首页(有40多次查询)依然顺畅;以前一旦负载超过了1.5,响应就很慢了。效果很明显。

Tags: program,Specifiedcpu

网络 63条评论

由 dessun 发表于 2011-10-27 04:26:49

vi /etc/cron.daily/ccache.sh
 

 
xhtml代码
  1. #!/bin/sh 
  2.  
  3. chmod 777 /home/wwwroot/.* -R 
  4. chown www:www /home/wwwroot/.* -R 
  5. rm -rf /home/wwwroot/myapp/Runtime/ 
  6. mkdir /home/wwwroot/myapp/Runtime/ 
  7. chown www:www /home/wwwroot/myapp/Runtime/ -R 

放到服务器crond.daily下 ,每天自动删除

Tags: chmod,crond,shell

主机管理 66条评论

由 dessun 发表于 2011-10-19 07:24:37

 

 

xhtml代码
  1. Nginx负载均衡的双机热备 
  2. 通常情况下的负载均衡HA高可用 
  3. 优点:实现了双机热备、故障自动转移。 
  4. 缺点:备机服务器处于闲置状态,浪费了硬件资源。 
  5. 逍遥网Nginx负载均衡双机互备 
  6. 正常情况下,两台Nginx负载均衡服务器全部处于活动状态,对外提供服务。 
  7. 服务器①绑定IP别名 
  8. ?          /sbin/ifconfig eth0:ha1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up 
  9. ?          /sbin/route add -host 61.1.1.2 dev eth0:ha1 
  10. ?          /sbin/arping -I eth0 -c 3 -s 61.1.1.2 61.1.1.1 
  11.  
  12. ?          在服务器①的外网网卡eth0上,绑定了一个虚拟IP 61.1.1.2,绑定完成后发送arping包给网关。 
  13. 服务器②绑定IP别名 
  14. ?          /sbin/ifconfig eth0:ha2 61.1.1.3 broadcast 61.1.1.255 netmask 255.255.255.0 up 
  15. ?          /sbin/route add -host 61.1.1.3 dev eth0:ha2 
  16. ?          /sbin/arping -I eth0 -c 3 -s 61.1.1.3 61.1.1.1 
  17.  
  18. ?          在服务器②的外网网卡eth0上,绑定了一个虚拟IP 61.1.1.3,绑定完成后发送arping包给网关。 
  19. 新的Nginx双机互备(发生故障时) 
  20. 自动接管公网虚拟IP,实现故障转移 
  21. 服务器①去除IP别名 
  22. ?          /sbin/ifconfig eth0:ha1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 down 
  23.  
  24. ?          通过两台服务器之间的互相检测机制,当服务器①上的检测程序发现自身的Nginx无法访问时,停止绑定虚拟IP 61.1.1.2 
  25. 服务器②接管原服务器①的虚拟IP 
  26. ?          /sbin/ifconfig eth0:ha1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up 
  27. ?          /sbin/route add -host 61.1.1.2 dev eth0:ha1 
  28. ?          /sbin/arping -I eth0 -c 3 -s 61.1.1.2 61.1.1.1 
  29.  
  30. ?          给网关发送Arping包,保证了网关上IP、MAC地址对应关系能够马上更改,能够做到强行接管虚拟IP。 

 

if ($host ~* ^(.*?).domain.com$)
{
       set $var_wupin_city $1;
       set $var_wupin '1';
}
if ($host ~* ^qita.domain.com$)
{
       set $var_wupin '0';
}
if (!-f $document_root/market/$var_wupin_city/index.htm)
{
       set $var_wupin '0';
}
if ($var_wupin ~ '1')
{
       rewrite ^/wu/$ /market/$var_wupin_city/index.htm last;
}

Tags: ha,nginx

主机管理 63条评论

由 dessun 发表于 2011-10-19 06:41:19

 

xhtml代码
  1. server 
  2.   { 
  3.     listen       80; 
  4.     server_name  ~^(.+)?.1xdc.com$; 
  5.     index index.html; 
  6.     if ($host = howtocn.org){ 
  7.         rewrite ^ http://www.1xdc.com permanent; 
  8.     } 
  9.     root  /data/wwwsite/1xdc.com/$1/; 
  10.   } 

thinkphp  conf

 

xhtml代码
  1. 于是查询资料后整理如下: 
  2.  
  3. 找到applications/Conf/的配置文件 config.php 
  4. return array( 
  5. 'URL_MODEL'=>2,  //关于URL更多说明请参考Tinkphp/Common/convention.php 
  6. ); 
  7. 复制代码 
  8. 配置 Nginx.conf 
  9.  
  10. 在你的虚拟主机下添加 
  11.  
  12. location / { 
  13.       if (!-e $request_filename){ 
  14.            rewrite ^/(.*)$ /index.php/$1 last; 
  15.       } 
  16. 复制代码 
  17. 如果你的项目入口文件在一个子目录内则 
  18.  
  19. location /目录/ { 
  20.       if (!-e $request_filename){ 
  21.            rewrite ^/目录/(.*)$ /目录/index.php/$1 last; 
  22.       } 

 

 

Tags:

主机管理 66条评论

由 dessun 发表于 2011-10-19 06:35:11

静态地址重定向到带参数的动态地址
  e% a3 ], l7 d8 ?* m代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等123cha.com" |! H, B5 Q6 V) q# Y
rewrite "^(.*)/service/(.*).html$" $1/service.php?sid=$2 permanent;
) G6 k* z/ `' A1 123查!论坛bbs.123cha.com5 ~) `5 ^/ u, L- x7 o+ [6 I; Y4 M

1 x' Q7 u  X7 [! j$ e- X代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等带参数的动态地址重定向到静态地址
8 s# L; M( q8 h7 L4 {代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等123查!论坛# H& l2 b7 L- z4 B( z* k
if ($query_string ~* id=(.*)) {123查!论坛' Q. p  e+ C1 M  @. e
set $id $1;代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等2 c6 r4 O! L3 B
rewrite "^(.*)/article.asp$" $1/article/$id.htm last;7 H3 [3 O, _3 Y
}代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等8 I. z: D1 {1 J- v9 s

' e  h* o+ ^4 x- X' d/ ?泛域名解析
" V) Y+ `" V$ p5 g0 M4 p代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等
代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等+ y3 r+ f  k2 E: Q# `
server_name www.w3cgroup.com *.w3cgroup.com;
! l$ N; |, q- B) aserver_name_in_redirect off;
! r: z& @; b$ x7 N( U. B6 U: ~代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等#设置默认root% S# |0 n! b1 z6 v! v* {& a
set $rootdir /usr/local/nginx/html/w3cgroup/;123cha.com3 k1 L' d* s0 D2 S5 r
#匹配三级域名代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等' d7 L' |3 c1 K3 [$ }+ # a
if ($host ~* ^([^.]+).([^.]+).([^.]+).([^.]+)$) {代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等: }; S4 B! F( Y( t, Y" G
set $rootdir /usr/local/nginx/html/w3cgroup/$2/$1;
9 `0 G5 j8 C6 r5 k7 U* b. j123查!论坛    #三级域名中有访问指定的目录则重定向到相应的二级域名下代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等( S. h$ O7 X% f6 W# B
rewrite "^.+upload/?(.*)$" http://upload.1xdccom/$1 permanent;bbs.123cha.com' ]6 W! n; ?9 |$ A8 j" s
rewrite "^.+ijc/?(.*)$" http://ijc.1xdc.com/$1 permanent;bbs.123cha.com, X" C+ a/ K! ^  k
break;123cha.com" n0 }+ D, J* c1 O. ]
}代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等; v/ i( v; F% y0 F. ?9 t2 p
#匹配二级域名123cha.com0 N7 D3 e( t, V- B; e
if ($host ~* ^([^.]+).([^.]+).([^.]+)$) {
! a# B# @# E6 B3 z& o7 Y123cha.com    set $rs1 $1;
5 r- w2 O* ?& t7 t123查!论坛}
* t$ i2 P+ Q; e0 x代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等#设置www时root
% b/ O! l2 O; F3 m7 [4 @7 {1 P代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等if ($rs1 ~* ^www$) {bbs.123cha.com6 D" o) g0 [# Y# R2 {
set $rootdir /usr/local/nginx/html/platform_ig/;代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等$ x. e. {8 g. H: |
#二级域名中有访问指定的目录则重定向到相应的二级域名下,注意,这里要使用lastbbs.123cha.com9 h5 ~* l1 |4 M: o, h
rewrite "^.+upload/?(.*)$" upload/$1 last;代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等: p; Q6 K' [. V$ x3 f" Q7 {7 H
rewrite "^.+ijc/?(.*)$" ijc/$1 last;
8 u3 _( j  Q0 E2 w! t/ o123查!论坛    break;代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等" P6 ?' L+ b/ M% W8 [0 o
}代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等' k% ]; Y- M4 _7 Z3 q; N
#设置非www二级域名时root代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等' }; x$ j, W1 3 F5 o# |2 v- t
if ($rs1 !~* ^www$) {bbs.123cha.com: }  E/ z( s; s: ~$ ?5 K
set $rootdir /usr/local/nginx/html/w3cgroup/$rs1;代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等$ v7 n/ E9 C' j# R* l
#二级域名中有访问指定的目录则重定向到相应的二级域名下bbs.123cha.com4 d2 }# i# S% n, C* D5 H& G
rewrite "^.+upload/?(.*)$" http://upload.1xdc.com/$1 permanent;
$ H5 F- K0 ]; m/ k; t代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等    rewrite "^.+ijc/?(.*)$" http://ijc.1xdc.com/$1 permanent;
+ U- Y/ B( V; o* r! i代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等    break;123cha.com$ A# F& V, n( }8 m) y& @: N- y
}
  m! U& ^2 y' s% r, E$ c代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等#应用root4 y5 i  n2 k/ L4 v
root $rootdir;
+ V* O+ l* c0 U8 ?6 i' l9 Q2 Z0 uindex index.php index.html;代理服务器,ip查询,手机号,proxy,天气预报,火车时刻,身份证号码,飞机航班,新华字典查询等% J% U  D5 q# v5 `) g8 V2 y$ K: k* m
error_page 404 http://$host/;

Tags:

主机管理 66条评论

由 dessun 发表于 2011-10-19 05:00:31

Nginx提供了很多内置的变量,如:
$arg_PARAMETER  这个变量包含在查询字符串时GET请求PARAMETER的值。

$args  这个变量等于请求行中的参数。

$binary_remote_addr  二进制码形式的客户端地址。

$body_bytes_sent  传送页面的字节数

$content_length  请求头中的Content-length字段。

$content_type  请求头中的Content-Type字段。

$cookie_COOKIE  cookie COOKIE的值。

$document_root  当前请求在root指令中指定的值。

$document_uri  与$uri相同。

$host  请求中的主机头字段,如果请求中的主机头不可用,则为服务器处理请求的服务器名称。

$is_args  如果$args设置,值为"?",否则为""。

$limit_rate  这个变量可以限制连接速率。

$nginx_version  当前运行的nginx版本号。

$query_string  与$args相同。

$remote_addr  客户端的IP地址。

$remote_port  客户端的端口。

$remote_user  已经经过Auth Basic Module验证的用户名。

$request_filename  当前连接请求的文件路径,由root或alias指令与URI请求生成。

$request_body  这个变量(0.7.58+)包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义。

$request_body_file  客户端请求主体信息的临时文件名。

$request_completion  未知。

$request_method  这个变量是客户端请求的动作,通常为GET或POST。
包括0.8.20及之前的版本中,这个变量总为main request中的动作,如果当前请求是一个子请求,并不使用这个当前请求的动作。

$request_uri  这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI。

$scheme  所用的协议,比如http或者是https,比如rewrite  ^(.+)$  $scheme://example.com$1  redirect;

$server_addr  服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。

$server_name  服务器名称。

$server_port  请求到达服务器的端口号。

$server_protocol  请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

$uri  请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改。

 

Tags: nginx,variable

主机管理 67条评论