//针对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);
}
}
}
//回到顶部插件
function gotop_html(){
echo '
';
}
addAction('pub_footer', 'gotop_html');
{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;
}
apache可以用module的方式执行php, 也可以fastcgi方式执行php
php-fpm是PHP的服务。
nginx负责静态文件, php的转给apache
6、[2012-04-25] PHP运行模式
目前在
HTTPServer 这块基本可以看到有三种 stack 比较流行:(1)Apache+mod_php5
(2)lighttp+spawn-fcgi
(3)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