2011年6月27日星期一
虚拟主机上的Drupal性能优化
2011年6月22日星期三
发现drupal button的一个bug
本来想实现一段代码:
$form['export'] = array(
'#type' => 'button',
'#value' => t('Export blank dealer'),
'#attributes' => array('onclick' => 'window.location=\'/admin/build/import-dealer/export-blank-dealer\';'),
);
发现总是不成功,试过alert('xxx'),可以实现,说明onclick事件成功了。
查看页面源码
<input type="submit" class="form-submit" onclick="window.location='/admin/build/import-dealer/export-blank-dealer';" value="Export blank dealer" id="edit-export" name="op">
明明是'#type' => 'button'怎么打出来的html是type="submit",
找下核心代码在form.inc里1937行找到theme_button函数
原来它把button的也当作submit处理,真不知道drupal的开发人员怎么想的。
$form['export'] = array(
'#type' => 'button',
'#value' => t('Export blank dealer'),
'#attributes' => array('onclick' => 'window.location=\'/admin/build/import-dealer/export-blank-dealer\';'),
);
发现总是不成功,试过alert('xxx'),可以实现,说明onclick事件成功了。
查看页面源码
<input type="submit" class="form-submit" onclick="window.location='/admin/build/import-dealer/export-blank-dealer';" value="Export blank dealer" id="edit-export" name="op">
明明是'#type' => 'button'怎么打出来的html是type="submit",
找下核心代码在form.inc里1937行找到theme_button函数
原来它把button的也当作submit处理,真不知道drupal的开发人员怎么想的。
原有代码:
/**
* Theme a form button.
*
* @ingroup themeable
*/
function theme_button($element) {
// Make sure not to overwrite classes.
if (isset($element['#attributes']['class'])) {
$element['#attributes']['class'] = 'form-'. $element['#button_type'] .' '. $element['#attributes']['class'];
}
else {
$element['#attributes']['class'] = 'form-'. $element['#button_type'];
}
return '<input type="submit" '. (empty($element['#name']) ? '' : 'name="'. $element['#name'] .'" ') .'id="'. $element['#id'] .'" value="'. check_plain($element['#value']) .'" '. drupal_attributes($element['#attributes']) ." />\n";
}
修正代码:
/**
* Theme a form button.
*
* @ingroup themeable
*/
function theme_button($element) {
// Make sure not to overwrite classes.
if (isset($element['#attributes']['class'])) {
$element['#attributes']['class'] = 'form-' . $element['#button_type'] . ' ' . $element['#attributes']['class'];
} else {
$element['#attributes']['class'] = 'form-' . $element['#button_type'];
}
return '<input type="' . $element['#type'] . '" ' . (empty($element['#name']) ? '' : 'name="' . $element['#name'] . '" ') . 'id="' . $element['#id'] . '" value="' . check_plain($element['#value']) . '" ' . drupal_attributes($element['#attributes']) . " />\n";
}
很简单,就是把return部分的type="submit"改成type="' . $element['#type'] . '"
查看页面源码
<input type="button" class="form-submit" onclick="window.location='/admin/build/import-dealer/export-blank-dealer';" value="Export blank dealer" id="edit-export" name="op">
查看页面源码
<input type="button" class="form-submit" onclick="window.location='/admin/build/import-dealer/export-blank-dealer';" value="Export blank dealer" id="edit-export" name="op">
试试onclick,OK成功!
2011年6月17日星期五
其实每个男孩本来都是好男人
其实每个男孩,本来都是想做一个感情专一的好男人的;
其实每个男孩,本来看女孩子都是看脸而不是胸部的;
其实每个男孩,本来都是不会讲黄色笑话的;
其实每个男孩,本来都是渴望爱一个人直到永远的;
只是,没有任何女孩喜欢这样的男孩,她们觉得这样的男孩太幼稚,太古板,没有情趣。
于是男孩开始改变,变成女孩喜欢的那种,嘴角挂着坏坏的笑,玩世不恭或者幽默,开始学会说甜言蜜语而不是心里想说的话,开始学会假装关心,学会给女孩送小饰物讨好她,学会如何追求~;或者看破红尘,游戏情场,成为女人恨恨的那种男人
他们可以很容易俘获女孩子的心但是他们也会在黑暗的夜里叼着烟流泪,心里有爱的时候,没有女孩;有了女孩,却永远没有了爱的感觉。
在听到女人抱怨世上没有一个好男人时候,他们不会再去努力做个好男人,只是微笑着擦肩而过~~~
其实每个男孩,本来看女孩子都是看脸而不是胸部的;
其实每个男孩,本来都是不会讲黄色笑话的;
其实每个男孩,本来都是渴望爱一个人直到永远的;
只是,没有任何女孩喜欢这样的男孩,她们觉得这样的男孩太幼稚,太古板,没有情趣。
于是男孩开始改变,变成女孩喜欢的那种,嘴角挂着坏坏的笑,玩世不恭或者幽默,开始学会说甜言蜜语而不是心里想说的话,开始学会假装关心,学会给女孩送小饰物讨好她,学会如何追求~;或者看破红尘,游戏情场,成为女人恨恨的那种男人
他们可以很容易俘获女孩子的心但是他们也会在黑暗的夜里叼着烟流泪,心里有爱的时候,没有女孩;有了女孩,却永远没有了爱的感觉。
在听到女人抱怨世上没有一个好男人时候,他们不会再去努力做个好男人,只是微笑着擦肩而过~~~
2011年6月14日星期二
非常爽的screen命令
screen对于不支持SSH的虚拟主机没有作用,但是对于vps来说那可是用处大大的。
不知道朋友们有没有在配置vps环境的时候出现突然中断或者要离开但是还没有配置完成的情况呢?
熠锋遇到很多回,往往已经快配置完成的时候出现短线等情况,那就要从头再安装配置,很是麻烦,有时要连续重新安装好几次系统才可以完成。
现在有了screen命令就不用为此烦恼了。
screen命令是什么?
Screen是一个可以在多个进程之间多路复用一个物理终端的全屏窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。
如何安装screen命令呢?
除部分精简的系统或者定制的系统大部分都安装了screen命令,如果没有安装,CentOS系统可以执行:
yum install screen
Debian/Ubuntu系统执行:
apt-get install screen
怎么使用screen命令?
1、首先在安装配置环境前创建一个screen会话
screen -S lnmp
lnmp为创建会话的名称
2、创建好以后就可以正常安装和配置vps环境,如怕中途短线或者要离开,马上就可以使用
快捷键Ctrl+a d(即按住Ctrl,依次再按a,d)来保存这个会话窗口
当然程序还在自动进行不会关闭。
3、需要恢复会话的时候就需要执行
screen -r lnmp
lnmp就是你刚开始设置的会话名称
如果在恢复会话的时候忘记了或者没有设定会话名称我们就要执行:
screen -ls
他会列出你所有的会话列表,然后使用:
screen -r 会话名称
来恢复会话窗口。
4、关闭screen的会话
exit
会提示:[screen is terminating],表示已经成功退出screen会话。
5、screen命令常用的一些快捷键:
Ctrl+a c :在当前screen会话中创建窗口
Ctrl+a w :窗口列表
Ctrl+a n :下一个窗口
Ctrl+a p :上一个窗口
Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换
Ctrl+a w :窗口列表
Ctrl+a n :下一个窗口
Ctrl+a p :上一个窗口
Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换
就这么多了,希望能给大家带来一些帮助!
2011年6月13日星期一
PHP5.3.6编译GD库
昨天重新编译了下gd库,之前的不支持jpeg,在ecshop中出现了问题。过程曲折。
在这简单说下方法吧。
mic的服务器是DEBIAN6 LNMP环境 使用php-fpm及fast-cgi
首先从各官网上下载以下文件:zlib,libpng,freetype,jpeg,libxml2,gd。当然也可以从其他站点下载,但是本着安全且最新的原则,mic是从官网下载的。
~~~~~~~~~~~~~~~~~~~~这部分内容来自http://www.netren.org/index.php/apache2/145-ubuntu-php5gd.html及http://beafroot.blog.163.com/blog/static/1231345332009928105954506/相应的具体参数可能因为版本问题有所不同。mic增加了–prefix参数,这个根据自己需要可以调整~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~这部分内容来自http://www.netren.org/index.php/apache2/145-ubuntu-php5gd.html及http://beafroot.blog.163.com/blog/static/1231345332009928105954506/相应的具体参数可能因为版本问题有所不同。mic增加了–prefix参数,这个根据自己需要可以调整~~~~~~~~~~~~
1.安装zlib
tar -zxvf zlib-1.2.5.tar.gz
cd zlib-1.2.5
./configure --prefix="/usr/local/zlib"
make
make install
2.安装libpng
tar -zxvf libpng-1.4.4.tar.gz
cd libpng-1.4.4
./configure --prefix="/usr/local/png"
make
make install
3.安装freetype
tar zxvf freetype-2.1.10.tar.gz
cd freetype-2.1.10
./configure --prefix="/usr/local/freetype"
make
make install
4.安装Jpeg
tar -zxvf jpegsrc.v8b.tar.gz
cd jpeg-8b/
./configure --enable-shared --enable-shared --enable-static --prefix="/usr/local/jpeg"
make
make test
make install
注意,这里configure一定要带–enable-shared参数,不然,不会生成共享库
5:安装 libxml2
tar -zxvf libxml2-2.6.31.tar.gz
cd libxml2-2.6.31
./configure --prefix="/usr/local/libxml"
make
make install
6.安装GD
tar -zxvf gd-2.0.33.tar.gz
cd gd-2.0.33
./configure –prefix="/usr/local/gd" –with-jpeg="/usr/local/jpeg" –with-freetype="/usr/local/freetype" –with-png="/usr/local/png" –with-zlib="/usr/local/zlib"
make
make install
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7.编译php
7.编译php
tar -zxvf php-5.3.6.tar.gz
cd /php-5.3.6
./configure --prefix="/usr/local/php" --with-mysql="/usr/local/mysql" --with-gd --with-ttf --with-openssl --enable-mbstring --enable-fastcgi --with-bz2 --with-zlib --enable-memcache --with-mcrypt --enable-fpm --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-gd-native-ttf --with-fpm-user=www-data --with-fpm-group=www-data
make
make install
到此就已经编译完了。
接下来说下过程中我遇到的问题。
1.编译php时使用–with-gd=”/usr/local/gd”出现gd build test失败的问题
首先要声明一点,就是–with-gd之后一定要加上地址,如果只是–with-gd,那就是用bundled的gd库,也就是php自带的。
如果加上了之后,出现失败的问题,mic的是出现很多个test都是no。mic一开始用php5.3.5编译的,后来换成了5.3.6,同时把所有要安装的gd库软件又都安装了,然后就可以编译了,因此这一点并不是很明确。有了解的哪位麻烦跟mic说下,谢了。
1.编译php时使用–with-gd=”/usr/local/gd”出现gd build test失败的问题
首先要声明一点,就是–with-gd之后一定要加上地址,如果只是–with-gd,那就是用bundled的gd库,也就是php自带的。
如果加上了之后,出现失败的问题,mic的是出现很多个test都是no。mic一开始用php5.3.5编译的,后来换成了5.3.6,同时把所有要安装的gd库软件又都安装了,然后就可以编译了,因此这一点并不是很明确。有了解的哪位麻烦跟mic说下,谢了。
2.编译php时出现gd.h gd.c报错,比如declared及undefined reference等。由于鬼使神差,mic把gd.h复制到了/usr/local/gd/,出现这个问题,删除后就木有问题了。
mic遇到的问题应该就是这两个。。给新手看的。。
mic遇到的问题应该就是这两个。。给新手看的。。
2011年6月10日星期五
varnish安装记录
varnish和squid相比最大的优势就是简单快速,简单是安装和配置都简单,快速是运行速度比squid更快,当然,快的前提是varnish比squid占用更多的内存,估计当年设计squid的时候内存还是很贵的东西,所以更多的侧重硬盘,使用内存多,当然还有一个很显而易见的弱点是机器冷启动时候恢复缓存的时间相比squid要长。
wget http://downloads.sourceforge.net/project/varnish/varnish/2.0.6/varnish-2.0.6.tar.gz?use_mirror=ncutar zxvf varnish-2.0.6.tar.gz
cd varnish-2.0.6
./configure –prefix=/srv/varnish
make
make install
启动命令:
/srv/varnish/sbin/varnishd -a :8088 -b localhost:8080
/srv/varnish/sbin/varnishd -a :8088 -b localhost:8080
由于我指定了安装目录,所以加上了路径,-a参数表示varnish的监听端口,正常情况下应该监听是80端口,也就是web服务端口,我测试机上被使用掉了,所以用了8088端口, -b 是表示后端(backend)的地址,如果backend在这里指定,那么只能指定一个后端,如果使用的配置文件可以指定多个backend,我的配置文件位置位于/srv/varnish/etc/varnish。
在web服务器的目录中创建一个index.html文件,然后通过varnish进行代理访问.
第一次访问结果如下:
根据请求头,我们看到的确是通过vanish来代理访问后端的,第一次访问age 为0 ,第二次访问age为71,说明这个文件已经在varnish中缓存了,此时可以通过/srv/varnish/bin/varnishstat 来查看一些参数,其中Hitrate 一行应该为1,因为命中了一次。
varnish 配置文件还是很有搞头的一个东西,有点类似与Nginx的语法,虽然不是很像,比如对正则的支持,可以绑定和去除head、Cookie等等功能,有时间的话,翻译一下varnish的introduction
varnish 配置文件还是很有搞头的一个东西,有点类似与Nginx的语法,虽然不是很像,比如对正则的支持,可以绑定和去除head、Cookie等等功能,有时间的话,翻译一下varnish的introduction
安装编译的时候出现一下错误:
checking for library containing pthread_create... -lpthread
checking for socket in -lsocket... no
checking for getaddrinfo in -lnsl... yes
checking for cos in -lm... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for PCRE... no
configure: error: Package requirements (libpcre) were not met:
No package 'libpcre' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables PCRE_CFLAGS
and PCRE_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
checking for socket in -lsocket... no
checking for getaddrinfo in -lnsl... yes
checking for cos in -lm... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for PCRE... no
configure: error: Package requirements (libpcre) were not met:
No package 'libpcre' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables PCRE_CFLAGS
and PCRE_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
说是缺少 pcre。我安装nginx的时候用到了pcre 安装了的。后又重新安装。错误依旧在。Google 原来是ldconfig 都不行。 后终于找到解决办法:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
你再编辑 成功!
good luck!
2011年6月9日星期四
MySQL常用函数
bin() 十进制转二进制
ascii() 字符串最左边的字母的ascii
oct() 十进制变八进制
hex() 变十六进制
char() 把每个ASCII值转成对应字母
char(77,121,83,'81.3','76')
char_length() 返回字符个数
length() 返回字符串的字节数
concat(str1,str2...) 将参数连接成字符串返回,如有任何一个为null,则返回值为null
locate('bar','foobarbar') 返回bar第一次出现的位置
instr('foobarbar','bar') 同上,参数位置颠倒
lpad('hi',4,'?') 左填充
rpad('hi',4,'?.') 右填充
left('dfsdfds sdfd',5) 从左截5个字符
right('dfsdfds sdfd',5) 从右截5个字符
substring('sdfsdfsda fdsaf sdf',5,6) 从5个字符开始向右截6个,中间可以为负,从左开始数
mid() 同substring()
ltrim(' fdsfsd ') 拿掉左边的空格
rtrim(' fdsfsd ') 拿掉右边的空格
trim(both 'x' from 'xxfdfxx')自定义拿
space(6) 得到6个空格的一个串
repeat('mysql',3) 重复3次mysql
replace('www.sdfsd.com','w','ww')将文本中w替换成ww
reverse('abc') 翻转字符串
lcase() low() 把字符串变成小写
ucase() upper() 把字符串变成大写
load_file(file_name) 读入文件
mod(a,b) 取模 a%b
ceiling(x) 取大于x的最小整数
round(x) 将x四舍五入到最近整数
exp(x)返回值e的x次方
ln(x)
log(x,b) x为底
pi() 常值π
cos(x)
sin(x)
tan(x)
rand()产生一个在0-1.0之间的随机值 rand(x) x为随机数的种子
订阅:
博文 (Atom)
上海松善实业有限公司
上海松善实业有限公司是一家集多品牌销售于一体的电线电缆骨干企业,公司成立于2016年。 公司拥有国内各大品牌:起帆、远东、上上、江南、胜华等。 主要产品有:高低压电力电缆、橡套电缆、控制电缆、架空绝缘电缆、塑胶电缆、电子计算机电缆、通讯电缆、...
-
上海松善实业有限公司是一家集多品牌销售于一体的电线电缆骨干企业,公司成立于2016年。 公司拥有国内各大品牌:起帆、远东、上上、江南、胜华等。 主要产品有:高低压电力电缆、橡套电缆、控制电缆、架空绝缘电缆、塑胶电缆、电子计算机电缆、通讯电缆、...
-
符号 C- 意思是按住 Ctrol 键 M- 意指 Meta 键 (键盘上若无Meta 键,则可以ALT ESC 键来取而代之) DEL 意指退格键 (不是 删除(Delete) key) RET 意指回车键 SPC 意指空格键...
-
Step 1: 在您的 home 底下的 .forward 檔中加入: (forward又是啥東東?) "|/usr/local/bin/procmail",以後寄給您的郵件將會先交給 procmail 程式處理。 Step 2: 在你的home底下編...