simple_html_dom.php 一款像jquery一样好用的html/xml 分析利器
文档在:
http://simplehtmldom.sourceforge.net/
API
nginx 针对一类特定referer 屏蔽,可能对某些攻击有效
一个客户服务最近受到攻击,通过查看nginx的log发现规律是 referer地址来自相同的字符串
于是乎用下面的屏蔽代码
if ($http_referer ~* "来源字串里面包含的特定字串"){return 403;}
下面是一些资料 详细英文的解释在 http://wiki.nginx.org/HttpCoreModule#location
~ 匹配,区分大小写
~* 不区分大小写的匹配
!~ 不匹配
!~* 不匹配
^~ 常用于location 语法中,后边是一个字符串。它的意思是,在这个字符串匹配后停止进行正则表达式的匹配。
如: location ^~ /images/,你希望对/images/这个目录进行一些特别的操作,如增加expires头,防盗链等,但是你又想把除了这个目录的图片外的所有图片只进行增加expires头的操作,这个操作可能会用到另外一个location,例如:location ~* \.(gif|jpg|jpeg)$,这样,如果有请求/images/1.jpg,nginx如何决定去进行哪个location中的操作呢?结果取决于标识符^~,如果你这样写:location /images/,这样nginx会将1.jpg匹配到location ~* \.(gif|jpg|jpeg)$这个location中,这并不是你需要的结果,而增加了^~这个标识符后,它在匹配了/images/这个字符串后就停止搜索其它带正则的location。
= 表示精确的查找地址,如location = /它只会匹配uri为/的请求,如果请求为/index.html,将查找另外的location,而不会匹配这个,当然可以写两个location,location = /和location /,这样/index.html将匹配到后者,如果你的站点对/的请求量较大,可以使用这个方法来加快请求的响应速度。
@ 表示为一个location进行命名,即自定义一个location,这个location不能被外界所访问,只能用于Nginx产生的子请求,主要为error_page和try_files。
参考资料来源
http://hi.baidu.com/jidongxx/item/de0f7e519980eeddd48bac38
http://ourlinux.blog.51cto.com/274624/850470
另外 参见 /?p=198
nginx apache php mysql 编译参数查看方法
1、nginx编译参数:
your_nginx_dir/sbin/nginx -v
2、apache编译参数:
cat your_apache_dir/build/config.nice
3、php编译参数:
your_php_dir/bin/php -i |grep configure
4、mysql编译参数:
cat your_mysql_dir/bin/mysqlbug |grep configure
discuz X 的php最小化安全配置,只在特定目录允许php执行,禁止木马运行
location ~ ^/((api|archiver)/.*|(install|uc_server)/[^/]+|[^/]+)\.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; fastcgi_param SCRIPT_FILENAME $documnet_root$fastcgi_script_name; }
ecshop:DEBUG_MODE在后台图片上传fckeditor的错误
因为 includes\fckeditor\editor\filemanager\connectors\php\upload.php 没有执行 init.php 所以 DEBUG_MODE变量没赋值,所以
导致 http://域名/includes/fckeditor/editor/filemanager/connectors/php/upload.php?Type=ImageImage 出错
显示为 lib_base.php 的read_static_cache 和 write_static_cache 函数为定义DEBUG_MODE 常量
所以保险的办法是在 upload.php 第一行加入
define(‘DEBUG_MODE’, 0);
这个错误的表现行为是: 上传图片可以正常上传,但是进度条图片一直滚动, 原因就是输出了错误提示,导致
windows 本地安全策略 命令行方法
XP下的ipseccmd.exe 需要下载先,请自行google ,关键词 “ipseccmd 下载” ,或者到 http://ishare.iask.sina.com.cn/f/7579277.html下载
下面文章建议看下http://microsoft.cnfan.net/winsystem/3692.html 和 http://technet.microsoft.com/en-us/library/cc739550(WS.10).aspx#BKMK_add_rule
本博客主要目的是 屏蔽 某些ip段对本机80端口的访问,比较适用于windows服务器(如果是windows 2003 ,命令行相应的应该是 ipsec.exe )
命令如下
ipseccmd.exe -w reg -p "phpsir ipsec" -o ipseccmd.exe -w reg -p "phpsir ipsec" -r "block lijin 1.1" -f 1.1.*.*=*:80:TCP -n BLOCK ipseccmd.exe -w reg -p "phpsir ipsec" -r "block lijin 2.2" -f 2.2.*.*=*:80:TCP -n BLOCK ipseccmd.exe -w reg -p "phpsir ipsec" -y
win2003/win7的netsh 方法
netsh ipsec static set policy name="phpsir-deny-policy" assign=n netsh ipsec static delete policy name="phpsir-deny-policy" netsh ipsec static add policy name="phpsir-deny-policy" netsh ipsec static add filteraction name="phpsir-deny" action=block netsh ipsec static add filter filterlist="deny 1.1.1.1" srcaddr=1.1.1.1 srcport=0 dstaddr=me dstport=0 protocol=0 mirrored=yes netsh ipsec static add filter filterlist="deny 2.2.2.2" srcaddr=2.2.2.2 srcport=0 dstaddr=me dstport=0 protocol=0 mirrored=yes netsh ipsec static add rule name="11111" policy="phpsir-deny-policy" filterlist="deny 1.1.1.1" filteraction="phpsir-deny" netsh ipsec static add rule name="22222" policy="phpsir-deny-policy" filterlist="deny 2.2.2.2" filteraction="phpsir-deny" netsh ipsec static set policy name="phpsir-deny-policy" assign=y
再次中文解释paypal IPN
参见地址
http://paypal.ebay.cn/integrationcenter/list__resource_2.html
启用IPN有两种方法:
一种是在您的PayPal账户里进行全局设置
另一种是在每笔交易的付款按钮中通过定义变量notify_url来进行设定
ecshop的ucenter同步登陆uc.php 一点错误勘误
在ecshop的会员整合ucenter的set_cookie函数有问题
文件在 /api/uc.php 搜索 set_cookie
function set_cookie($user_id=”, $user_name = ”, $email = ”)
{
if (empty($user_id))
{
/* 摧毁cookie */
$time = time() – 3600;
setcookie(‘ECS[user_id]’, ”, $time);//这里有问题
setcookie(‘ECS[username]’, ”, $time);//这里有问题
setcookie(‘ECS[email]’, ”, $time);//这里有问题
}
else
{
/* 设置cookie */
$time = time() + 3600 * 24 * 30;
setcookie(“ECS[user_id]”, $user_id, $time, $GLOBALS[‘cookie_path’], $GLOBALS[‘cookie_domain’]);
setcookie(“ECS[username]”, $user_name, $time, $GLOBALS[‘cookie_path’], $GLOBALS[‘cookie_domain’]);
setcookie(“ECS[email]”, $email, $time, $GLOBALS[‘cookie_path’], $GLOBALS[‘cookie_domain’]);
}
}
因为假设这样的架构
http://域名/ 是 ecshop ,http://域名/bbs/ 为论坛dzX2, 那么,在ec登陆后,dzX2 点退出,
会发送一个javascript申请到 /api/uc.php的 logout请求 ( 如果setcookie 只是在 /api/ 下 设置cookie 为空,那么就清空不了cookie
严格的应该是
setcookie(‘ECS[user_id]’, ”, $time,$GLOBALS[‘cookie_path’], $GLOBALS[‘cookie_domain’]);
还有要修改ecshop的 ucenter插件,includes/modules/integrates/ucenter.php
如图两部分
另外还要看 这一篇
/ucenter-sync.html
关于utf8 bom 的w3c文章
http://www.w3.org/International/questions/qa-utf8-bom
linux下编译php支持jpeg的备忘
有一朋友liunx主机配置php的gd库未支持jpeg,需要重新编译支持jpeg,
凭经验用
./configure –with-gd –with-jpeg-dir=/usr/lib
这个居然不起作用
改变顺序如下生效
./configure –with-jpeg-dir=/usr/lib –with-gd
在此谨记!
编译php支持jpeg的一点经验,先后居然有关
./configure –with-gd –with-jpeg-dir=/usr/lib
这个居然不起作用
那么起作用的是
./configure –with-jpeg-dir=/usr/lib –with-gd
在此谨记!
curl 检查服务器是否支持 gzip
http://www.ninjasys.co.uk/linux/using-curl-to-check-if-a-page-is-gzippedcompressed/
方法如下
curl -I -H 'Accept-Encoding: gzip,deflate' -H "Host:域名" http://ip/url
如果结果是
HTTP/1.1 200 OK
Server: nginx/0.8.52
Date: Tue, 05 Jul 2011 01:28:30 GMT
Content-Type: application/x-javascript
Last-Modified: Tue, 10 Aug 2010 00:33:24 GMT
Connection: keep-alive
Vary: Accept-Encoding
Expires: Thu, 04 Aug 2011 01:28:30 GMT
Cache-Control: max-age=2592000
Content-Encoding: gzip 很好支持
如果没有 Content-Encoding: gzip 就不支持gzip
64位linux安装vsftpd虚拟用户的几点注意
- auth required /lib64/security/pam_userdb.so db=/etc/vsftpd_login 注意红色部分!!!
- 如果出现登陆503错误,请看
tail -f /var/log/secure 以确定具体是否是因为pam登陆验证的问题
- 注意权限方面问题,
- google 最好搜索英文 vsftpd virtual user
- http://linuxforfun.net/2008/04/05/vsftpd-virtual-users/ 可以参考下
php有啥不能显示的就记录log,你懂的
file_put_contents(“logfile.txt”,__FILE__ . “is ” . print_r($_POST,true),FILE_APPEND);
^_^
phpwind 的一个小错误导致cookie失效的解决,表象是无法注册登录
一个phpwind 8.0 utf8 系统错误表现为无法注册登录,费老劲调试,发现 data/sql_config.php 文件由于在windows 记事本编辑后导致被自动增加了bom ,前端cookie 输出因为bom 的 原因,导致浏览器无法生成cookie,从而无法登录和注册
在editplus 另存成utf-8 无bom ,上传问题解决
总结: 要多用 linux curl 去查看文件输出
ecshop系列:后台导出程序错误,ecshop应该认错
今天一个客户给我发来ecshop后台导出出现
ERROR 1052 (23000): Column ‘brand_id’ in where clause is ambiguous
经查发现是不同表存在相同字段而在where 语句中未区分造成
测试运行语句
SELECT g.*, b.brand_name as brandname FROM `usason`.`ecs_goods` AS g LEFT JOIN `usason`.`ecs_brand` AS b ON g.brand_id = b.brand_id WHERE is_delete = 0 AND brand_id = ’17’;
修改为
SELECT g.*, b.brand_name as brandname FROM `usason`.`ecs_goods` AS g LEFT JOIN `usason`.`ecs_brand` AS b ON g.brand_id = b.brand_id WHERE is_delete = 0 AND g.brand_id = ’17’;
红色部分注意
那么就只有去查后台程序代码了
发现在admin/includes/lib_main.php 的get_where_sql($filter)的函数中出现了
$where .= isset($filter->brand_id) && $filter->brand_id > 0 ? ” AND brand_id = ‘” . $filter->brand_id . “‘” : ”;
修改为
$where .= isset($filter->brand_id) && $filter->brand_id > 0 ? ” AND g.brand_id = ‘” . $filter->brand_id . “‘” : ”;
问题解决
目前还不知道有其他副作用
好在ecshop命名还算规范
phpwind 批量上传解决一例,上传后文件列表消失,mbstring 问题
朋友网站phpwind 7.5 sp3出现批量上传文件后上传文件的列表消失,但是文件已经上传上去了,调试后发现没有写入数据库
跟踪代码在 lib/upload/mutiupload.class.php 文件的update函数中加入调试语句,确认没有写入数据库 ,
原因是 $value[‘name’] = pwConvert($value[‘name’], $db_charset, ‘utf-8’); 行有错
经调试 pwConvert 是因为 php没有启用 mbstring 造成,启用后,问题解决
ecshop系列:防止EC被挂马的一些小技巧
- admin 目录用 htaccess 保护或者限制ip访问
- ftp 密码要长点,复杂但是对自己有意义好记忆
- 凡是可写目录一概禁止 php 执行权限
ecshop系列:二次开发,扩展分类商品后置
ecshop系列:购买商品增加留言备注功能
ecshop系列:一行代码解决财付通3006错
ecshop系列:前端根据商品属性显示库存数量
ecshop系列:search的静态化
一般说来搜索的结果静态化可以持久的保持搜索结果,给客户良好的印象
ecshop 的搜索结果是 search.php?encode=base64编码字符串
我们希望用 /search_搜索关键字_p页码.html 来做静态优化
那么方法是什么呢:
首先写 .htaccess 文件
RewriteRule ^search_(.+?)_p([0-9]+).html$ search2\.php\?keywords=$1&page=$2 [QSA,L]
我们复制 search.php 成 search2.php 注释掉行18-行66
然后加入
$string["keywords"]=addslashes($_GET["keywords"]); $string["page"]=addslashes($_GET["page"]); $string["search_encode_time"] = $_SERVER["REQUEST_TIME"];
测试 http://域名/search_关键字_p1.html
如果和 http://域名/search2.php?keywords=关键字&page=1
的结果一致
然后我们去修改页码处的连接
行 501
$pager = get_pager2('search_', $pager['search'], $count, $page, $size);
在include/lib_main.php 里面 复制get_pager 函数成 get_pager2
然后修改成如下
$url_format = $url . $param_url . 'page='; $url_format2 = $url . $param['keywords'] . '_p'; $pager['page_first'] = ($page - $_offset > 1 && $_pagenum < $page_count) ? $url_format2 . "1.html" : ''; $pager['page_prev'] = ($page > 1) ? $url_format2 . $page_prev.".html" : ''; $pager['page_next'] = ($page < $page_count) ? $url_format2 . $page_next.".html" : ''; $pager['page_last'] = ($_to < $page_count) ? $url_format2 . $page_count.".html" : ''; $pager['page_kbd'] = ($_pagenum < $page_count) ? true : false; $pager['page_number'] = array(); for ($i=$_from;$i<=$_to;++$i) { $pager['page_number'][$i] = $url_format2 . $i.".html"; }
ecshop系列:通过固定paypal.php 来防止后台paypal收款账号被修改
有条件的用户可以通过修改include/modules/payment/paypal.php 文件 后 “固定”此文件方式连防止后台paypal的账号被修改
至于固定的方式则各种系统不同
1)windows 可以通过ntfs的权限系统设置文件只读
2)linux 系统可以通过 chattr +i 的方式 强制固定文件
apache time_wait 过多,修改 keepalive 解决
最近一朋友的centos apache 2.2 发现大量的ip 出现 time_wait 显现
即 netstat -an | grep “:80” 的结果大量显现 time_wait
初期以为是 被Ddos 了,后发现即使是就一个ip访问,也产生大量time_wait
遂修改 apache 配置文件 httpd.conf
KeepAlive On
MaxKeepAliveRequests 120
KeepAliveTimeout 15
观察后问题解决
mysql 1067 错误解决的方法和思路
问题描述: windows 2003 平台 mysql 5 的 服务无法启动,显示 1067 错
问题解决过程:
经排查发现 1067错原因在于进程里面还有一个mysqld-nt 没有完全释放,在进程中强制终止后,可以正常启动mysql ,但是远程连接不上,而服务器已经关闭了防火墙等可能屏蔽的因素,一度以为是网络限制了3306端口的访问,可是在外部 nmap 居然可以看到3306端口是open的。在服务器上可以连接 localhost 的mysql 服务器,使用 show processlist; 发下大量的 login 慢请求,显示unauthorized, 判断为mysqld 需要反差ip 的dns name ,再进一步检查发现时服务器的dns server 失效。
问题解决方案:
1) 更换好的names server ip 地址
2) 在my.ini 里面加 [mysqld] 加入 skip-name-resolve 后重启 mysqld ,发下原来无法正常关闭的mysqld-nt.exe 进程也可以完全关闭和正常启动了,问题解决
问题总结:
由于是服务器参数以及程序未作调整而出现问题,所以不应盲目判断为服务器内部问题,多分析状态,思路开阔,根据显示内容去查询搜索引擎,可以快速解决问题
ie下innerHTML 不起作用的时候用的修复
参考来自 http://www.jonefox.com/blog/2009/05/21/internet-explorer-and-the-innerhtml-property/
代码
function replace_html(el, html) { if( el ) { var oldEl = (typeof el === "string" ? document.getElementById(el) : el); var newEl = document.createElement(oldEl.nodeName); // Preserve any properties we care about (id and class in this example) newEl.id = oldEl.id; newEl.className = oldEl.className; //set the new HTML and insert back into the DOM newEl.innerHTML = html; if(oldEl.parentNode) oldEl.parentNode.replaceChild(newEl, oldEl); else oldEl.innerHTML = html; //return a reference to the new element in case we need it return newEl; } };
参考用法
replace_html(“div_id”,”<div>here is html data<div>”);
ecshop 对采用指定支付方式(alipay,tenpay)增加积分的修改
进入后台 SQL查询
INSERT INTO `你的前缀_shop_config` (`parent_id`, `code`, `type`, `store_range`, `store_dir`, `value`, `sort_order` ) VALUES ( ‘2’, ‘onlinepay_points’, ‘text’, ”, ”, ‘100’, ‘1’);
在后台 商店设置->基本设置->会出现 onlinepay_points 为100的项目
respond.php 修改如下
$payment = new $pay_code();
$pay_result = $payment->respond();
$msg = $pay_result ? $_LANG[‘pay_success’] : $_LANG[‘pay_fail’];
if($pay_result){
if($pay_code == “alipay” || $pay_code == “tenpay” || $pay_code == “chinabank” ){
log_account_change($_SESSION[‘
}
}
ecshop 的paypal免掉单接口,解决paypal返回fail出错
问题描述:
ecshop 2.7.2 在 启用 paypal 支付方式后,使用paypal支付返回网站发生支付失败,实际已经支付的错误
解决方案:
本ecshop paypal 插件,采用 paypal IPN 服务器自动对单,免除掉单烦恼, 适用于ecshop 2.7.X 系列版本
联系方式:
QQ 733905
ecshop的支付宝alipay免掉单接口,最新版,采用服务器间通知模式
问题描述:
ecshop 在启用支付宝 alipay 支持方式 后,通过支付宝付费返回网站发生fail 错误,而支付宝已经扣费的问题
解决方案:
通过修改支付宝支付插件,结合支付宝特有的服务器间对账功能,彻底免除掉单烦恼,减少客服工作量。
联系方式: QQ 733905
费用 300元
功能:
1) 解决ecshop 支付宝插件返回时候显示付费不成功
2) 解决支付宝异步同步,彻底解除掉单困扰,省客服工作量
3) gbk utf-8 双版本