ubuntu重设系统的默认编辑器

ubuntu一般人使用nano不习惯,修改下很简单,命令如下

root@host:~# select-editor

Select an editor.  To change later, run ‘select-editor’.
1. /bin/ed
2. /bin/nano        <—- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny

Choose 1-4 [2]:

选择的数字是“3”, /usr/bin/vim.basic。

发表在 服务器 | 标签为 | 留下评论

svn使用钩子Hooks的post-commit更新同步

常见问题

修改完代码提交到SVN服务器后,同步到WEB服务器。需要配置SVN的钩子,打开对应项目下hooks目录,

可以看到有一个post-commit.tmpl文件,这是一个模板文件,

复制一份放在此目录下,命名为post-commit

里面原有的代码全部注释掉.这里可以执行shell命令,每次commit完成后都会调用此文件.

我的文件内容为

#!/bin/sh
for dir in `/usr/local/svn/bin/svnlook dirs-changed /data/svn/mall/`
do
/usr/local/svn/bin/svn update -N /data/htdocs/mall/$dir
done
#export LANG=zh_CN.UTF-8
#/usr/local/svn/bin/svn checkout –username admin –password xxx svn://127.0.0.1/mall/ /data/htdocs/mall/

说明:

#!/bin/sh 说明是执行shell命令

export LANG=zh_CN.UTF-8根据代码文件编码而定

用svnlook dirs-changed监控变化的文件夹逐个输出更新,也可以一次svn checkout全部检出,如果项目目录比较大可以考虑逐个更新。

希望只检出顶级目录被选中,使用-N选项。

如果是svn好web是同一台机器就这样已经搞定了,如果是分布式多台web前端,还是需要通过其它软件或命令进行同步更新,如rsync。

发表在 服务器 | 标签为 | 留下评论

给你的PHP写入函数file_put_contents加个锁

今天遇到redis自动关闭的问题,有个读取缓存函数问题是这样的:

先去redis或memcache缓存读取,有就返回读取数组,没有就去读取文件缓存,有就将该文件数组就返回,然后写入redis或memcache缓存和文件缓存。

问题就出在redis关闭后,一直会绕过去读取file文件缓存,读取后把新的数据写入到文件去。

$strlen = file_put_contents($cachefile, $arr);//写入缓存文件

如果这里没有使用LOCK_EX,当高并发使用这个函数的时候,就有可能出现,一个php还没有把文件写完整,另外一个php就来读取,结果发现返回内容不是数组,又接着写入一个新的内容,循环不停的写入,读取,错误,写入。

这时候要看情况而定了,假如缓存文件是对应不同名称,同时被并发操作可能不大的情况。可以不LOCK_EX,毕竟会损耗性能,当有些时候不LOCK_EX损耗更大,是个死循环。

 

发表在 开源代码 | 标签为 , | 留下评论

php5.3.28所有的加速缓存都挂了

最近不知道从哪天开始php的eAccelerator加速缓存出现问题,噩梦开始了每天时不时cpu都会被占用到100%服务器也无法登陆只能重启,服务器8核 8g阿里云服务器,nginx1.6.2,php5.3.28,最后安装xcache也是一样。

nginx日志出现大量 [crit] 13198#0: accept4() failed (23: Too many open files in system)
最后所有的php-frm罢工 500错误,最后剩下一个nscd的进程100%,kill它重启nginx恢复,不过服务器没罢工,可能和nginx最新版有冲突吧。

我发现安装加速也没加速到哪去,最终关闭所有的加速缓存扩展,cpu占用率虽然会上升波动,可不会再出现100%死锁和服务器罢工了。神奇的环境。

暂时先这样吧,如果我没来更新就是这样成了!^_^

发表在 服务器 | 留下评论

php5.3.28安装加速缓存xcache

刚刚把eAccelerator换成APC也坚持不了多久,运行了一天就完蛋了,php502错误,php-fpm卡住罢工!当php-fpm进程异常退出的时候其他进程无法获取apc的互斥锁。导致死锁。这次继续搜索apc资料,有人提到惠新宸(apc维护者之一)他建议不要再使用apc,建议换成opcache,php5.3用不了哈。

这次试试国产xcache

wget -c http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
tar zxvf xcache-3.2.0.tar.gz
cd xcache-3.2.0
/usr/local/php/bin/phpize
./configure –enable-xcache –enable-xcache-coverager –enable-xcache-optimizer –with-php-config=/usr/local/php/bin/php-config
make
make install

安装成功后,在php.ini配置文件尾部里面加入以下

xcache.admin.pass这里的管理密码需要32位的,随便找个网站生成下。
xcache.count 这里是cpu几核

;xcache
[xcache-common]
extension = xcache.so

[xcache.admin]
xcache.admin.enable_auth = On
xcache.admin.user = “admin”
;run: echo -n “yourpassword” |md5sum |awk ‘{print $1}’ to get md5 password
xcache.admin.pass = “c8e1118e1e8429ebabc79b3d910cb7a0”

[xcache]
xcache.shm_scheme =        “mmap”
xcache.size  =               128M
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count =                 8
xcache.slots =                8K
xcache.ttl   =                 0
xcache.gc_interval =           0
xcache.var_size  =            4M
xcache.var_count =             1
xcache.var_slots =            8K
xcache.var_ttl   =             0
xcache.var_maxttl   =          0
xcache.var_gc_interval =     300
xcache.readonly_protection = Off
; for *nix, xcache.mmap_path is a file path, not directory. (auto create/overwrite)
; Use something like “/tmp/xcache” instead of “/dev/*” if you want to turn on ReadonlyProtection
; different process group of php won’t share the same /tmp/xcache
xcache.mmap_path =    “/dev/zero”
xcache.coredump_directory =   “”
xcache.experimental =        Off
xcache.cacher =               On
xcache.stat   =               On
xcache.optimizer =           Off

[xcache.coverager]
; enabling this feature will impact performance
; enable only if xcache.coverager == On && xcache.coveragedump_directory == “non-empty-value”
; enable coverage data collecting and xcache_coverager_start/stop/get/clean() functions
xcache.coverager =          Off
xcache.coveragedump_directory = “”
;xcache end

重启php即可,输出echo phpinfo(); 查看是否成功!

这时候需要运行管理它,在xcache-3.2.0目录下的htdocs管理代码目录拷贝到可以运行的虚拟主机下,直接运行即可。

其它配置的详细解说看xcache.lighttpd.net

有问题请留言^_^

 

发表在 服务器 | 标签为 , , | 留下评论

php5.3.28更换缓存加速eAccelerator为APC

APC 和 eAccelerator 都是不错的PHP加速缓存,因为eAccelerator有问题没办法才选择apc的,建议除非eAccelerator有变态无法解决的问题,才选择apc,毕竟apc也是停止维护的了,php5.3恐怕没有更好的选择,都往5.4 5.4 5.6发展了,高版本使用zend-opcache。

最近有台新配置的服务器php5.3.28 nginx1.62,还是照常使用eAccelerator 加速,可是就是会不定期出现cpu占用率php-frm死锁的情况,无论怎么调整服务器和php配置都无法解决。出现死锁的情况后,cli模式还是可以照常运行php的,就是无论运行任何一个php页面就会有个cpu99%的php-frm出现,最后运行到502或504。

使用strace -p追踪线程,循环不停出现sched_yield() = 0,直到最后结束,没有其它任何提示了。

网上搜索了半天应该是eAccelerator的东西,内部出现某个while一直循环执行,至于为什么会这样,功力有限。看来只能更换缓存加速插件了,最后决定php原配的APC。

下面就动手吧

1、下载 wget http://pecl.php.net/get/APC-3.1.9.tgz

2、解压和编译
tar zxvf APC-3.1.9.tgz
cd APC-3.1.9
/usr/local/php/bin/phpize
./configure –enable-apc –enable-mmap –enable-apc-spinlocks –disable-apc-pthreadmutex –with-php-config=/usr/local/php/bin/php-config
make
make install
make clean

3、编辑php.ini

找到 extension_dir ,把值改为/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/
然后在下面加入
[APC]
extension=”/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/apc.so”
apc.cache_by_default = On
apc.enabled = On
apc.max_file_size = 1m
apc.shm_segments = 1
apc.shm_size = 64
apc.stat = On
apc.write_lock = On
apc.mmap_file_mask = /tmp/apc.XXXXXX
apc.ttl = 7200
apc.user_ttl = 7200
apc.gc_ttl=3600
apc.num_filters_hint = 1024
apc.file_update_protection=2

具体的配置参数解释看:http://php.net/manual/zh/apc.configuration.php

apc.stat设置成0的话,性能会更好一点,但是设置成0后,修改了PHP文件后必须得重启下PHP才能马上更新内容。对于平时修改比较多的站点来说,还是设置成1比较好。

重启php完成。

eAccelerator就把缓存目录删除,配置php.ini文件里面注释掉就可以了。

安装apc扩展的时候如出现以下错误

# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
config.m4:180: warning: AC_CACHE_VAL(PHP_APC_GCC_ATOMICS, …): suspicious cache-id, must contain _cv_ to be cached
../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from…
../../lib/autoconf/general.m4:1994: AC_CACHE_CHECK is expanded from…
config.m4:180: the top level
config.m4:180: warning: AC_CACHE_VAL(PHP_APC_GCC_ATOMICS, …): suspicious cache-id, must contain _cv_ to be cached
../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from…
../../lib/autoconf/general.m4:1994: AC_CACHE_CHECK is expanded from…
config.m4:180: the top level

按这个autoconf-2.13即可
wget -c http://soft.vpser.net/lib/autoconf/autoconf-2.13.tar.gz
tar zxvf autoconf-2.13.tar.gz
cd autoconf-2.13/
./configure –prefix=/usr/local/autoconf-2.13
make && make install

export PHP_AUTOCONF=/usr/local/autoconf-2.13/bin/autoconf
export PHP_AUTOHEADER=/usr/local/autoconf-2.13/bin/autoheader

有问题留言!^_^

 

发表在 服务器 | 标签为 , , | 留下评论

[原创]谷歌Google Adsense西联汇款邮政局收汇结汇爱尔兰发汇

今天在邮政局领取到西联汇款发汇的美元,苦逼了这么多年终于在22号收到一封谷歌邮件:《Google AdSense:我们最近向您支付了一笔款项》,至于等了多少年已经不堪回首。

搜索了下一般我们国内用户收取来自 Google adsense西联汇款一般主要是通过邮政、农行、光大等银行渠道。很多收款方式已经成为过去,因为谷歌西联汇款发汇人已经不是美国远景城的google总部,而是爱尔兰都伯林的Google爱尔兰公司(图中下方方框),但具体承办者是位于新加坡亚洲中心的Google亚太私人贸易有限公司(左上方框)。

谷歌汇款信息

Google Asia Pacific Pte. Ltd.
8 Marina View
Asia Square 1 #30-01
Singapore 018960
您的付款已由以下机构处理:Google Ireland, Ltd., Dublin 4, 爱尔兰

如下图:

Google AdSense收入

对面有农行去试试看,结果是失望的:填写了半天信息,最后发汇人既然要求我写姓和名,必填项还有街道/地址 城市 省份 国家,我蒙了,咨询了半天只能回家,上网搜索,有网友说填写如下
发汇人:Google Ireland, Ltd.
发汇国家:IE(Ireland)

附件:中国农业银行西联汇款单
农行西联汇款
问题是其它必填信息咋写?为了避免再次白跑一趟,继续搜索发现有网友提到,姓名无论怎么填写Google Ireland, Ltd.都无法通过,看来我是对的,决定放弃农行,剩下光大银行和邮政局了,光大银行我去了,不知道哪里有,有肯定也不是我附近,算了。搜索邮政局如何收汇西联汇款的,原来邮政网银就可以收汇了,不过不能在线结汇,收汇后需要到邮政局营业点结汇换成人民币取出。按照以下操作最终当天圆满完成收汇美元换人民币的过程,900块啊,多少年啊!美元都从800贬值到600了,哎!感叹!

有几点问题需要注意的:
1、银行帐号的姓名必须和收汇人一样
2、收汇转存帐号有提到下拉框没有,开卡和网银的时候最好咨询邮政局工作人员确认下。
3、最坑爹的是邮政局的网页只支持IE内核,还有点查询按钮后,需要填写收汇人信息的时候,邮政局网站的代码是有问题的,如何解决?哈!在这里给我留言!

温馨提示:西联汇款我们不用担心手续费的问题,因为Google已经付了。

QQ截图20141026112021 QQ截图20141026112035 QQ截图20141026112056
QQ截图20141026111925
QQ截图20141026112221 QQ截图20141026231742

QQ截图20141026232042

 

 

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

修改phpcms V9标签的方法

想要修改PHPCMS V9标签,只要修改两个文件对应的内容即可:

需要修改文件在:

/phpcms/libs/classes/template_cache.class.php模板解析缓存文件中找到pc_tag()方法

\phpcms\modules\content\classes\content_tag.class.php

如标签:num会通过pc_tag()方法解析转换成php

$num = isset($num</a>) && intval($num) ? intval($num) : 20;//这里就可以任意修改

转换后去看看模板,转换后会掉用content_tag.class.php里面对应的方法,自己看着对应修改。

发表在 服务器 | 标签为 , | 留下评论

php ajax juqery JSONP实现跨域接口获取数据

先谈谈Jsonp原理:

首先在客户端注册一个callback (如:’jsoncallback’), 然后把callback的名字(如:jsonp1236827957501)传给服务器。注意:服务端得到callback的数值后,要用jsonp1236827957501(……)把将要输出的json内容包括起来,此时,服务器生成 json 数据才能被客户端正确接收。

然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 ‘jsoncallback’的值 jsonp1236827957501 .

最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。

客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时javascript文档数据,作为参数,
传入到了客户端预先定义好的 callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json))里.(动态执行回调函数)

可以说jsonp的方式原理上和是一致的(qq空间就是大量采用这种方式来实现跨域数据交换的) .JSONP是一种脚本注入(Script Injection)行为,所以也有一定的安全隐患.

第一也是最重要的:JSONP不提供错误处理。如果动态插入的代码正常运行,你可以得到返回,但是如果失败了,那么什么都不会发生。你无法获得一个404的错误,也不能取消这个请求
另外一个重要的缺点是如果使用了不信任的服务会造成很大的安全隐患

从JQuery 1.2以后,就开始支持JSONP的调用。

实例1

test.html

<!doctype html>
<html>
<head>
<meta charset=”utf-8″>
<title>test</title>
<script src=”http://code.jquery.com/jquery-1.8.1.min.js”></script>
<script src=”ajax.js”></script>
</head>

<body>
</body>
</html>

ajax.js

$.ajax({
type : “post”,
url : “ajax.php”,
dataType : “jsonp”,
jsonp: “callback”,//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
jsonpCallback:”success_jsonpCallback”,//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
success : function(json){
alert(‘success’);
},
error:function(){
alert(‘fail’);
}
});

ajax.php

<?php

$data = “…….”;
$callback = $_GET[‘callback’];
echo $callback.'(‘.json_encode($data).’)’;//注意括号和把callback返回去 不然跨域失败
exit;

?>

当使用jsonp时,使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。

——————————————————————————–

实例2

test.html

<!doctype html>
<html>
<head>
<meta charset=”utf-8″>
<title>test</title>
<script src=”jquery-1.5.2.min.js”></script>
<script src=”ajax.js”></script>
</head>

<body>
<form name=”form”>
<input type=”text” name=”sex”>
<input type=”text” name=”age”>
<input type=”button” id=”btn” value=”button” />
</form>
</body>
</html>

ajax.js

$(document).ready(function(){

$(“#btn”).click(function(k) {
//…
var j = $(“form”).serializeArray();//序列化name/value
$.ajax({
type: ‘GET’,  //这里用GET
url: ‘ajax.php’,
dataType: ‘jsonp’,  //类型
data: j,
jsonp: ‘callback’, //jsonp回调参数,必需
async: false,
success: function(result) {//返回的json数据
alert(result.message); //回调输出

result = result || {};
if (result.msg==’err’){
alert(result.info);
}else if (result.msg==”ok”){
alert(‘提交成功’);
}else{
alert(‘提交失败’);
}

},
timeout: 3000
})
//…
});

});

ajax.php

<?php
$callback = isset($_GET[‘callback’]) ? trim($_GET[‘callback’]) : ”; //jsonp回调参数,必需
$date = array(“age”=>$_GET[‘age’], “message”=>$_GET[‘age’]);
$date[“msg”]=”err”;
$date[“info”]=”因人品问题,发送失败”;
$tmp= json_encode($date); //json 数据
echo $callback . ‘(‘ . $tmp .’)’;  //返回格式,必需
?>

发表在 服务器 | 标签为 , , | 留下评论

360劫持客户端:糟糕!您输入的网址无法访问!

安装360后随便输入一个http://abc123.baidu.com/百度不存在的二级域名,接着就出现QQ截图20141008093731
劫持后跳转到:http://hao.360.cn/error.html?f=http%3A%2F%2Fabc123%2Ebaidu%2Ecom%2F&u=3156274

解决这个问题只能是关闭:网页安全防护

360关闭网页安全防护

关闭后恢复
无效域名

360不止干了这种劫持网址的事,不管你是否锁定了主页都没用,还时不时修改客户端的主页为360所有,引流 导航 导购等推广地址。免费是有限的。是否更换自己衡量!

发表在 软件 | 标签为 | 留下评论