端口连接情况分析 netstat -n | grep ":80" | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 根据ip归类 netstat -n | grep ":80 " | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
月度归档:2013年04月
windows 上面安装squid 加速代理网站
windows squid 下载 http://squid.acmeconsulting.it/index.html
下载解压到 c:\squid
c:\squid\etc\squid.conf 如下
#本地绑定的IP端口 http_port 80 accel vhost vport visible_hostname localhost cache_dir ufs c:/squid/cache 1024 16 256 cache_mem 100 MB #代理的IP地址和端口 cache_peer ip地址 parent 80 0 no-query originserver weight=1 name=a #加速两个站点 cache_peer_domain a www.aaa.com #下面这行在squid 3 可以注释掉 acl all src 0.0.0.0/0.0.0.0 http_access allow all cache_peer_access a allow all cache_peer_access b allow all tcp_recv_bufsize 65535 bytes
c:\squid\etc\mime.conf.default 复制成 mime.conf
创建缓存目录
c:\squid\sbin\squid -z
安装成服务
c:\squid\sbin\squid -i
启动服务
net start squid
更多资料看这里 http://www.squid-cache.org/Doc/config/
squid 支持gzip的资料看 https://code.google.com/p/squid-ecap-gzip/wiki/Installation
关于squid 完全抛弃缓存,只起代理作用
参数是
cache deny all
iis 只绑定到特定ip
httpcfg.exe 可以用来查询和管理iis的绑定情况
httpcfg.exe set iplisten -i IP:PORT 重启服务器 (必须) 查询绑定情况 httpcfg query iplisten
参考
http://hi.baidu.com/shijingxin/item/f4d4c7f9e5a3f45cc9f33712
杰奇 章节里空格清除
update jieqi_article_chapter set chaptername = replace(chaptername ,' ','');
ecshop 农行支付接口的返回respond部分
function respond() { $result = false; $originData = $_POST["MSG"]; $xmlData = base64_decode($originData); $retCodStartStr = "<ReturnCode>"; $retCodEndStr = "</ReturnCode>"; $retCodStartPos = strpos($xmlData,$retCodStartStr); $retCodEndPos = strpos($xmlData,$retCodEndStr); $retCode = substr($xmlData,$retCodStartPos+strlen("<ReturnCode>"),$retCodEndPos-$retCodStartPos-strlen("<ReturnCode>"));//注意不可使用$ReturnCode,否则会什么都不显示,可能是保留字 $errMesStartStr = "<ErrorMessage>"; $errMesEndStr = "</ErrorMessage>"; $errMesStartPos = strpos($xmlData,$errMesStartStr); $errMesEndPos = strpos($xmlData,$errMesEndStr); $ErrorMessage = substr($xmlData,$errMesStartPos+strlen("<ErrorMessage>"),$errMesEndPos-$errMesStartPos-strlen("<ErrorMessage>")); $sigStartStr = "<Signature>"; $sigEndStr = "</Signature>"; $sigStartPos = strpos($xmlData,$sigStartStr); $sigEndPos = strpos($xmlData,$sigEndStr); $signature = substr($xmlData,$sigStartPos+strlen("<Signature>"),$sigEndPos-$sigStartPos-strlen("<Signature>")); $mesStartStr = "<Message>"; $mesEndStr = "</Message>"; $mesStartPos = strpos($xmlData,$mesStartStr); $mesEndPos = strpos($xmlData,$mesEndStr); $message = substr($xmlData,$mesStartPos+strlen("<Message>"),$mesEndPos-$mesStartPos-strlen("<Message>")); //验证签名有效性 $data = $message; $fp = fopen(ROOT_PATH."MainServer.0001.pem", "r"); $pub_key = fread($fp, 8192); $pubkeyid = openssl_get_publickey($pub_key); $sig=base64_decode($signature); if(openssl_verify($data,$sig,$pubkeyid)==1) { if($retCode=="0000") { //订单号 $OrderNoStartStr = "<OrderNo>"; $OrderNoEndStr = "</OrderNo>"; $OrderNoStartPos = strpos($xmlData,$OrderNoStartStr); $OrderNoEndPos = strpos($xmlData,$OrderNoEndStr); $OrderNo = substr($xmlData,$OrderNoStartPos+strlen("<OrderNo>"),$OrderNoEndPos-$OrderNoStartPos-strlen("<OrderNo>")); //订单金额 $AmountStartStr = "<Amount>"; $AmountEndStr = "</Amount>"; $AmountStartPos = strpos($xmlData,$AmountStartStr); $AmountEndPos = strpos($xmlData,$AmountEndStr); $Amount = substr($xmlData,$AmountStartPos+strlen("<Amount>"),$AmountEndPos-$AmountStartPos-strlen("<Amount>")); //批次号 $BatchNoStartStr = "<BatchNo>"; $BatchNoEndStr = "</BatchNo>"; $BatchNoStartPos = strpos($xmlData,$BatchNoStartStr); $BatchNoEndPos = strpos($xmlData,$BatchNoEndStr); $BatchNo = substr($xmlData,$BatchNoStartPos+strlen("<BatchNo>"),$BatchNoEndPos-$BatchNoStartPos-strlen("<BatchNo>")); //传票号 $VoucherNoStartStr = "<VoucherNo>"; $VoucherNoEndStr = "</VoucherNo>"; $VoucherNoStartPos = strpos($xmlData,$VoucherNoStartStr); $VoucherNoEndPos = strpos($xmlData,$VoucherNoEndStr); $VoucherNo = substr($xmlData,$VoucherNoStartPos+strlen("<VoucherNo>"),$VoucherNoEndPos-$VoucherNoStartPos-strlen("<VoucherNo>")); //会计日期 $HostDateStartStr = "<HostDate>"; $HostDateEndStr = "</HostDate>"; $HostDateStartPos = strpos($xmlData,$HostDateStartStr); $HostDateEndPos = strpos($xmlData,$HostDateEndStr); $HostDate = substr($xmlData,$HostDateStartPos+strlen("<HostDate>"),$HostDateEndPos-$HostDateStartPos-strlen("<HostDate>")); //会计时间 $HostTimeStartStr = "<HostTime>"; $HostTimeEndStr = "</HostTime>"; $HostTimeStartPos = strpos($xmlData,$HostTimeStartStr); $HostTimeEndPos = strpos($xmlData,$HostTimeEndStr); $HostTime = substr($xmlData,$HostTimeStartPos+strlen("<HostTime>"),$HostTimeEndPos-$HostTimeStartPos-strlen("<HostTime>")); //备注 $MerchantRemarksStartStr = "<MerchantRemarks>"; $MerchantRemarksEndStr = "</MerchantRemarks>"; $MerchantRemarksStartPos = strpos($xmlData,$MerchantRemarksStartStr); $MerchantRemarksEndPos = strpos($xmlData,$MerchantRemarksEndStr); $MerchantRemarks = substr($xmlData,$MerchantRemarksStartPos+strlen("<MerchantRemarks>"),$MerchantRemarksEndPos-$MerchantRemarksStartPos-strlen("<MerchantRemarks>")); //支付方式 $PayTypeStartStr = "<PayType>"; $PayTypeEndStr = "</PayType>"; $PayTypeStartPos = strpos($xmlData,$PayTypeStartStr); $PayTypeEndPos = strpos($xmlData,$PayTypeEndStr); $PayType = substr($xmlData,$PayTypeStartPos+strlen("<PayType>"),$PayTypeEndPos-$PayTypeStartPos-strlen("<PayType>")); //通知方式 $NotifyTypeStartStr = "<NotifyType>"; $NotifyTypeEndStr = "</NotifyType>"; $NotifyTypeStartPos = strpos($xmlData,$NotifyTypeStartStr); $NotifyTypeEndPos = strpos($xmlData,$NotifyTypeEndStr); $NotifyType = substr($xmlData,$NotifyTypeStartPos+strlen("<NotifyType>"),$NotifyTypeEndPos-$NotifyTypeStartPos-strlen("<NotifyType>")); //todo:商户更新相关数据库操作 $order_sn = $OrderNo; if(substr($order_sn,0,4)=="0000"){ $order_id = get_order_id_by_sn($order_sn,true); order_paid($order_id); } else{ $order_id = get_order_id_by_sn($order_sn); order_paid($order_id); } $result = true; file_put_contents("abcbank.txt","支付成功1",FILE_APPEND); } else { file_put_contents("abcbank.txt","错误码:".$retCode."错误信息:".$ErrorMessage,FILE_APPEND); } } else { file_put_contents("abcbank.txt","签名验证失败,该通知内容不可信",FILE_APPEND); } // free the key from memory openssl_free_key($pubkeyid); return $result; }
用于检测php文件是否带bom的php脚本
mysqlisacmchk 的win脚本
set mysqlpath=D:\phpStudy\MySQL
set mysqldatapath=%mysqlpath%\data
set mysqlisamchk=%mysqlpath%\bin\myisamchk
set dbname=aa
for %%i in (%mysqldatapath%\%dbname%\*.MYI) do %mysqlisamchk% -c -r -a -v %%i
一个还算漂亮的语法高亮的工具 prettify
从这里下载
https://code.google.com/p/google-code-prettify/
下载后,有用的文件是src 和 style 目录
用法
如下 <head> <link rel="stylesheet" type="text/css" href="sunburst.css"> <script type="text/javascript" src="prettify.js" ></script> </head> <body onload="prettyPrint()"> <pre class="prettyprint"> @*你的代码片断*@ </pre> </body> 参考了 http://www.lidongkui.com/use-prettify-to-highlight-code
gzip 电信 联通 双线
双线服务器的电信联通侧的访问 居然不同 一侧是gzip了,另外一侧没有,好奇怪,除非是采用proxy方式的双线,可是查看确实又绑定了双ip,这就叫人摸不到头脑了,难道iis会针对不同ip 做gzip ,或者电信线路做了解压???
js获得ip的地理位置 通过sina 的调用
<script type="text/javascript"> <!-- function loadScript(src,callBack){ var ie = /msie/i.test(navigator.userAgent); var el=document.createElement('script'); el.src=url; if(ie){ el.onreadystatechange=function(){ if(el.readyState=='loaded' || el.readyState=='complete') callBack&& callBack() } }else{ el.onload=callBack; } document.body.appendChild(el); } //jquery包用$.getScript ///////////////////////////////////////////////// var url="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=" loadScript(url,function(){ document.write(remote_ip_info.city ); }); //--> </script>
dedecms 的一点经验分享
GetFileName 位于 include\helpers\chanelunit.helper.php 文件中
此函数 是 dedecms 用于生成文件名和获得文件url 地址的 关键文件!!!!!
而且是入口型文件,所有的文件名和url地址的获取都从此走出
flv 自由拖动的几点注意事项,nginx 伪流服务器
编译 nginx 指出 flv module
参考 http://wiki.nginx.org/HttpFlvModule
./configure –with-http_flv_module –其他参数
配置文件里面加入
location ~ \.flv$ { flv; }
然后 如果是 jwplayer 的 播放器 ,注意参数
startparam: "start",
如果是 ckplayer 的播放器 ,注意参数
h:’0′,//播放http视频流时采用何种拖动方法,=0不使用任意拖动,=1是使用按关键帧,=2是按时间点,=3是自动判断按什么(如果视频格式是.mp4就按关键帧,.flv就按关键时间),=4也是自动判断(只要包含字符mp4就按mp4来,只要包含字符flv就按flv来)
q:”,//视频流拖动时参考函数,默认是start
参考资料
http://www.longtailvideo.com/support/jw-player/28855/pseudo-streaming-in-flash
nginx的discuzx伪静态
discuz X 的 nginx 伪静态规则 rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last; rewrite ^([^\.]*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last; rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last; rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last; rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last; rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last; rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last; rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last; rewrite ^([^\.]*)/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ $1/plugin.php?id=$2:$3 last; if (!-e $request_filename) { return 404; }
win8 系统 运行apmserv的注意点
用管理员方式打开哦!否则启动不了apache mysql 的
而且报错没啥有价值的信息,比较囧
jieqi 杰奇的图片水印增加在四角同时添加水印
杰奇的小说图片上传后可以加水印,目前的上中下左中右,随机都有了
现在需求是加在四角都有 修改 lib/image/imagewater.php
原来代码
$temp_wm_image = $this->getPos($src_image_w,$src_image_h,$this->wm_image_pos,$wm_image); $wm_image_x = $temp_wm_image["dest_x"]; $wm_image_y = $temp_wm_image["dest_y"]; imagecopymerge($src_image, $wm_image,$wm_image_x,$wm_image_y,0,0,$wm_image_w,$wm_image_h,$this->wm_image_transition);
从
// 1 = top left 上左
// 2 = top middle 上中
// 3 = top right 上右
// 4 = middle left 中左
// 5 = middle 中中
// 6 = middle right 中右
// 7 = bottom left 下左
// 8 = bottom middle 下中
// 9 = bottom right 下右
// 10 = rand 随机
知道我们只要在 1 3 7 9 位置加就可以了
重复上面的代码 4次就可以搞定了。
最土程序,克隆或者说另存为一个新项目的快捷方式
有没想过最土的项目如何快速复制出一个来,然后改改就成新的团购项目了?
或者说编辑一个老项目的时候想把他另存为一个新项目而不是保存,
看下图 红色部分
具体开发代码(非细节),如下
修改模板,加入按钮
include/template/manage_team_edit.html
<input type=”submit” value=”保存为新项目” name=”commit” id=”leader-submit” class=”formbutton” style=”margin:10px 0 0 120px;” onclick=”cloneteam()”/>
加js 处理cloneteam函数
function cloneteam()
{
document.getElementById(‘-user-form’).action=”/manage/team/edit.php?clone=1″;
document.getElementById(‘-user-form’).submit();
}
注意 clone=1
另外修改模板加了几处隐藏的hidden 内容,目的是为了复制老项目中的image image1 image2 字段
<!–{if $team[‘image’]}–><span class=”hint”><input type=’hidden’ name=”hidden_team_image” value=”{$team[‘image’]}”></span><!–{/if}–>
<!–{if $team[‘image1′]}–><span class=”hint”><input type=’hidden’ name=”hidden_team_image1″ value=”{$team[‘image1’]}”></span><!–{/if}–>
<!–{if $team[‘image2′]}–><span class=”hint”><input type=’hidden’ name=”hidden_team_image2″ value=”{$team[‘image2’]}”></span><!–{/if}–>
修改 manage/team/edit.php
原来代码是这样的
现在代码是这样的
apache 的rewrite 匹配HTTP_HOST 的参数是 %N !!! 备注一下
apache 的rewrite 匹配HTTP_HOST 的参数是 %N !!! 备注一下
shopex 同步 ucenter 的redirect问题,造成script不运行
首先此问题来自向这个帖子
http://hi.baidu.com/fire_love_live/item/247276cfda421217b67a24c7
需要说明的是,并非15处需要修改,
其中 有关登陆密码错的那一项建议不要修改
在大约行 557处
$this->nowredirect('failed',base64_encode(str_replace(array('+','/','='),array('_',',','~'),$_POST['ref_url'])),__('用户名或密码有误,请重新输入'),$_POST['from_minipassport']);
上面的nowredirect 不建议修改为 splash
最土整合uc的问题,其他系统可能需要调整登陆代码
问题:
最土的用户被导入到了ucenter 的用户表,其他uc_server 的客户端登陆时候提示密码错
解决思路
最土的加密方法在 ./include/classes/ZUser.class.php
const SECRET_KEY = ‘@4!@#$%@’;
static public function GenPassword($p) {
return md5($p . self::SECRET_KEY);
}
而uc的方法是 md5(md5(‘密码’) + SALT字段)
两者不相同,所以需要在其他系统里面吧最土的密码验证发也加进去,
现在以shopex为例 ,shopex系统里面uc_client 目录在shopex/core/lib/uc_client
修改里面的 model\user.php 和 control\user.php
model\user.php 修改如下