备忘日志【三】

1、[2012-04-16] thinksaas中插件钩子函数


//针对app各个的插件部分,修改自Emlog
/**
* 该函数在插件中调用,挂载插件函数到预留的钩子上
*
* @param string $hook
* @param string $actionFunc
* @return boolearn
*/
function addAction($hook, $actionFunc){
	global $tsHooks;
	if (!@in_array($actionFunc, $tsHooks[$hook])){
		$tsHooks[$hook][] = $actionFunc;
	}

	return true;
}

/**
* 执行挂在钩子上的函数,支持多参数 eg:doAction('post_comment', $author, $email, $url, $comment);
*
* @param string $hook
*/
function doAction($hook){
	global $tsHooks;
	$args = array_slice(func_get_args(), 1);
	if (isset($tsHooks[$hook])){
		foreach ($tsHooks[$hook] as $function){
			$string = call_user_func_array($function, $args);
		}
	}
}

后台开启某插件时就调用addAction()函数,把该插件的函数注册开某系统预留的钩子上:

//回到顶部插件 

function gotop_html(){
	echo '
';
}

addAction('pub_footer', 'gotop_html');

执行挂到钩子上的函数时在模板叶面中调用doAction()函数:

{php doAction('pub_footer')}


2、[2012-04-18]window.location.hash属性介绍

location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url。而location.hash则可以用来获取或设置页面的标签值。比如http://domain/#admin的location.hash="#admin"。利用这个属性值可以做一个非常有意义的事情。

很多人都喜欢收藏网页,以便于以后的浏览。不过对于Ajax页面来说的话,一般用一个页面来处理所有的事务,也就是说,如果你浏览到一个Ajax页面里边有意思的内容,想将它收藏起来,可是地址只有一个呀,下次你打开这个地址,还是得像以往一样不断地去点击网页,找到你钟情的那个页面。另外的话,浏览器上的“前进”“后退”按钮也会失效,这于很多习惯了传统页面的用户来说,是一个很大的使用障碍。

那么,怎么用location.hash来解决这两个问题呢?其实一点也不神秘。

比如,我的作者管理系统,主要功能有三个:普通搜索、高级搜索、后台管理,我分别给它们分配一个hash值:#search、#advsearch、#admin,在页面初始化的时候,通过window.location.hash来判断用户需要访问的页面,然后通过javascript来调整显示页面。比如:

var hash; 
hash=(!window.location.hash)?"#search":window.location.hash; 
window.location.hash=hash; 
  //调整地址栏地址,使前进、后退按钮能使用 
switch(hash){   
case "#search":  
    selectPanel("pnlSearch");   //显示普通搜索面板  
    break;    
case "#advsearch":    
      
case "#admin":  
     
}

通过window.location.hash=hash这个语句来调整地址栏的地址,使得浏览器里边的“前进”、“后退”按钮能正常使用(实质上欺骗了浏览器)。然后再根据hash值的不同来显示不同的面板(用户可以收藏对应的面板了),这就使得Ajax页面的浏览趋于传统化了。


3、[2012-04-20] 执行某查询mysql被卡死!!

处理办法:客户端登陆mysql后查看哪个最占资源并kill该pid.

登陆:mysql -uroot -p

查看所有mysql内部进程:show processlist;

查看所有mysql内部进程,按照Time这个字段降序排序:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST order by time desc

最后kill pid


4、[2012-04-20] mysql.sock文件作用


这个mysql.sock应该是mysql的主机和客户机在同一host上的时候,使用unix domain socket做为通讯协议的载体,它比tcp快。

Mysql有两种连接方式: 
(1),TCP/IP 
(2),socket 
对mysql.sock来说,其作用是程序与mysqlserver处于同一台机器,发起本地连接时可用。 
例如你无须定义连接host的具体IP得,只要为空或localhost就可以。 
在此种情况下,即使你改变mysql的外部port也是一样可能正常连接。 
因为你在my.ini中或my.cnf中改变端口后,mysql.sock是随每一次 mysql server启动生成的。已经根据你在更改完my.cnf后重启mysql时重新生成了一次,信息已跟着变更。 

那么对于外部连接,必须是要变更port才能连接的。 

linux下安装mysql连接的时候经常回提示说找不到mysql.sock文件,解决办法很简单: 

如果是新安装的mysql,提示找不到文件,就搜索下,指定正确的位置。 

如果mysql.sock文件误删的话,就需要重启mysql服务,如果重启成功的话会在datadir目录下面生成mysql.sock 到时候指定即可。 

如果还不行就选择用TCP连接方式连接就行了,其实windows下还支持管道连接方式。


5、[2012-04-24] nginx与apache与php随记

    location ~ .*\.(php|php5)?$
    {      
      #fastcgi_pass  unix:/tmp/php-cgi.sock;
      fastcgi_pass  127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
    }

这里配置的是, 如果是php文件, 就通过proxy传给php-fpm进程处理,nginx本身是不能解析PHP的... 

apache可以用module的方式执行php, 也可以fastcgi方式执行php


php-fpm是PHP的服务。

php-fpm就是用来管理php-cgi进程的,
Nginx代理访问把对php的访问扔给php-fpm。fpm又从众php-cgi进程中选择一个执行php脚本并返回 

 nginx只是在静态文件抗压性能上比apache好
跑php的性能没有apache + mod_php 性能好
所以还有另外一个配合就是 nginx + apache

nginx负责静态文件, php的转给apache


6、[2012-04-25] PHP运行模式

目前在

HTTPServer 这块基本可以看到有三种 stack 比较流行:

(1)Apache+mod_php5

(2)lighttp+spawn-fcgi

(3)nginx+PHP-FPM

三者后两者性能可能稍优,但是 Apache由于有丰富的模块和功能,目前来说仍旧是老大。有人测试nginx+PHP-FPM在高并发情况下可能会达到 Apache+mod_php5的5~10倍,现在nginx+PHP-FPM使用的人越来越多。


7、[2012-04-28] Linux下按大小查找目录

find /opt/discuzx -size +20480k    ==》这是查找文件,无法找到目录。

find /opt/discuzx -size +20480k -type d    ==》不知为什么也无法找到大于20M的目录。

du -h /opt/discuzx    ==》列出的目录太多,不是我想要的。

du -k /opt/discuzx/ |sort -nr |more  ==》这个可以按目录从大到小排列。

8、[2012-05-05]linux中将进程放后台执行

通过以下命令,我们可以对放入到后台的命令进行控制
查看当前终端下的后台进程:
直接执行:jobs
将查看到的某个后台进程放回到前台:
直接输入:fg {jobid} //这里的{jobid}是通过jobs命令中看到的进程前[]中的数字。
将当前正在前台运行的进程放到后台运行:
先敲下快捷键:ctrl +z //暂停当前正在运行的进程。
再执行:bg
终止当前正在前台运行的进程:
直接敲下快捷键:ctrl +c
查看当前后台进程 jobs -l


9、[2012-05-11] Linux下的vmstat命令。

这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。



10、[2012-05-11]服务器经常出现丢包的情况及找查问题过程。

最近服务经常出现丢包的情况,这个问题纠结了很久,原来是宽带不足。

找问题过程:

1.通过防火墙,限制所有的80端口访问,就立即恢复正常。

2.检查在出现异常时服务器的cpu,内存、硬盘负载情况。数据显示正常。

3.检查流量在出现异常时,发现流量偏低,正常每3秒的输出,应该是在10~15Mb左右,但在异常时,只有1~5Mb。异常时,我们的端口的流量,跑不上去。

总结:要确认的是:1。我们同一柜的其他机器的流量 。2.同一个柜出口的当时的流量 是多少~

查找过程中用到的一些命令:

  843  ./b.sh -i eth1
  844  netstat -nao
  845  netstat -nao|grep 3306
  847  pstree
  848  LANG=c
  852  /usr/local/webserver/php/sbin/php-fpm stop
  853  s -axwf
  854  netstat -nao
  858  ps -axwf|grep nginx
  867  ps -axwf|grep mysql
  868  netstat -nao|grep 3306
  869  dmesg
  870  dmesg|grep eth
  872  tail -2000 /var/log/messages|more
  873  tail -2000 /var/log/messages|grep eth0
  875  grep eth0 /var/log/messages.*
  881  ./b.sh -i eth0
  882  vmstat 2
  883  pstree|grep http
  884  pstree|grep php
  898  more /etc/snmp/snmpd.conf
  900  iptables -I INPUT -p tcp -m tcp --dport 80 -j REJECT
  901  iptables -nL
  902  netstat -nao|more
  903  iptables -D INPUT -p tcp -m tcp --dport 80 -j REJECT
  907  yum install iftop
  909  wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz
  910  tar -zxvf iftop-0.17.tar.gz -C /usr/src
  911  yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel
  912  cd /usr/src/iftop-0.17/
  913  ./configure
  914  make
  915  make install
  916  iftop
  918  iptables -I INPUG -s 119.146.144.139 -j REJECT
  919  iptables -I INPUT -s 119.146.144.139 -j REJECT
  920  iptables -I INPUT -s 116.5.168.113 -j REJECT
  924  /usr/local/webserver/php/sbin/php-fpm start
  930  iptables -nL
  931  iptables -I INPUT -p tcp -m tcp --dport 80 -j REJECT
  932  iptables -D INPUT -p tcp -m tcp --dport 80 -j REJECT
  949  grep POST *.log|more|grep -v "login.php\|forum.php\|member.php"|more
  950  grep POST *.log|more|grep -v "login.php\|forum.php\|member.php"|grep baid  
  881  netstat -nao|grep "232:80 "|awk -F ":" '{printf $2"\n"}'
  882  netstat -nao|grep "232:80 "|awk -F ":" '{printf $2"\n"}'|awk '{printf $2 "\n"}'
  883  netstat -nao|grep "232:80 "|awk -F ":" '{printf $2"\n"}'|awk '{printf $2 "\n"}'|sort |uniq
  884  netstat -nao|grep "232:80 "|awk -F ":" '{printf $2"\n"}'|awk '{printf $2 "\n"}'|sort |uniq >>ip_access.txt

你可能感兴趣的:(php技术,数据库,服务器,LINUX,hook,function,javascript,string,ajax,浏览器)