效益型网络营销方案
当前位置:新竞争力首页 > 公司博客首页 > 周钟的博客
最近一个项目,咱们的开发小团队需要用到webService,同事很快就架设好了 webService的服务器端,平台是用.NET(C#),我这边是用php调用。网上搜索到方法,开始都进行得比较顺利,由于是第一次用webService,看到活生生的数据展示出来,着实兴奋了一把,但是紧接而来的一个问题困扰了我不少时间,服务器端需要传四个参数,其中两个是.NET的out型,这两个可以通过数组自动返回值(PHP确实很强大),但是另外两个中的一个始终传不进去,让同事那边配合着修改webService服务程序也还是不行。最后通过读取请求代码发现,这个代码并没有出现在请求xml格式中,难道是参数写搞错了?再核对下,"pagesize"被我写成了"pageSize",再运行,终于通过。"细节决定成败,一个大小写也能搞疯人哪",最后附上webService的服务器代码:

<?php
header("Content-Type: text/html;charset=utf-8");
require_once('lib/nusoap.php');
$client = new soapclient('http://www.xxx.com/webServiceData.asmx?WSDL', true);
$client->soap_defencoding = 'utf-8';
$client->decode_utf8 = false;
$err = $client->getError();
if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}
$page=5;
$pageSize=50;
$param = array('page'=>$page,'pagesize'=>$pageSize,"","");
$result = $client->call('GetUserDataSetByPage', array('parameters' => $param));
print_r($param);
// Check for a fault
if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
}
else {
// Check for errors
$err = $client->getError();
if ($err) {
// Display the error
echo '<h2>Error&l..
……

最近手里一个PHP项目要用到mod_rewrite模块,很早就听mod_rewrite广泛应用于URL重写,防止盗链,伪静态等各方面,于是怀着激动的心情到网上一阵猛搜,果然很多资料,窃喜.....遗憾的是很多文章看了以后仍旧一团雾水,还是不得要领,甚为苦恼。正当山穷水尽的时候,一篇《Learn Apache mod_rewrite: 13 Real-world Examples》柳暗花明般走进了我的视线,读罢此文,眼前豁然开朗,手里的项目也渐渐有了眉目。由于原文是英文版本,在参考过程中还是费了许多周折,所以本人操起了早已生锈的英语砍刀,斗胆将其翻译过来,英语过关的还是建议看原文。在译文中有很多不恰当的地方,希望大家将就看吧,话不多说,上文。

===================一道华丽的分割线================

原文地址:http://www.sitepoint.com/article/apache-mod_rewrite-examples/

原文作者:DK Lynn(DK Lynn is a former instructor pilot and "rocket scientist" now living in New Zealand where he operates a small business developing and hosting web sites. )

================二道华丽的分割线(以下为本人译文)==========

学习 Apache mod_rewrite 13 例

Apache 以其极高的性价比让越来越多的公司组织选择它作为服务器。其中它有一个很有用的功能就是mod_rewrite模块,一个可将用户请求的URI根据特定规则转换的模块。
这篇文章将引领你学习rewrite 规则,正则表达,rewrite条件,以及提供了一系列的例子。
首先,我假设你已经懂得URI 重写对你网站的意义为前提,如果对这一方面你想了解得更多,这里我向你推荐 mod_rewrite: A Beginner’s Guide to URL Rewriting 这本书。你可以从书中找到关于这方面得更多信息。
测试服务器安装
一些服务器没有开启mod_rewrite模块(服务器默认关闭),你可以键入一行PHP代码来确定你的服务器是否已经开启mod_rewrite模块:
phpinfo();
在浏览器运行这段代码,找到Apache Modules section,如果mod_rewrite没有出现在其列表中,那么你就需要通知你的服务商开启mod_rewrite服务,或者..换另外一个好的服务商。大多数服务商都会开启mod_rewrite模块,所以你很容易找到。
mod_rewrite的魔力
简单举例:创建三个文件,分别命名为 test.html,test.php和.htaccess
test.html 输入:
<h1>This is the HTML file.</h1>
test.php输入:
<h1>This is the php file.</h1>
.htaccess输入:
RewriteEngine on
RewriteRule ^/?test\.html$ test.php [L]

将以上三个文件放test测试文件夹下,在浏览器录入:
http://www.example.com/test/test.html
在浏览器中将 www.example.com替换成你自己的域名。如果运行结果显示"This is the PHP file",那么运行成功,如果结果显示"This is the Html file",那么肯定是哪里出了问题,请你再仔细检查下。
如果你测试成功,你是否发现了我们录入了test.html的文件名,确执行了test.php文件,是的,你已经初识了mod_rewrite的神奇。
mod_rewrite 正则表达式
现在我们可以重写URLs了!设想我们有一个显示城市信息的网站。根据URI选择城市:http://www.example.com/display.php?country=USA &state=California&city=San_Diego
这个URL太长并且对用户也不友好,我们更希望写成这样:
http://www.example.com/USA/California/San_Diego
我们需要告诉Apache新的URL会根据一定的格式转化成这样,为了让display.php明白查询的字符,所以我们将用到正则表达式告诉mod_rewrite匹配我们的URLs。如果你对正则表达式不太熟悉,许多网站提供了优秀的教程供你学习。在本文的末尾,我也会列举出比较好的参考网址。如果你还是不能明白我所讲述的,那么我建议你看看后面链接中的前两篇。
一个最常用的正则就是(.*)。它含有两个元素:一是"点",表示任意字符;二是"星",表示以前的全部字符。所以(.*)会匹配{REQUEST_URI}的所有字符。{REQUEST_URI}是URL中出去域名以及"?"符号的所有查询字符,也是Apache 重写技术尝试匹配的字符。
包裹在正则表达式中的元素存放在"原子"内,它是在规则范围内允许被匹配的变量,所以以上正则存储了USA/California/San_Diego在"原子"中,为了解决我们的问题,我们需要三个"原子",他们可以用左斜杠"/"进行分隔,所以正则表达式成了:
(.*)/(.*)/(.*)
以上正则,在{REQUEST_URI}中通过两个"/"的分割存储了三个值,为了解决我们具体问题,我们得加一点限制――毕竟,第一个和最后一个原子可以匹配任何字符。
开始,我们可以添加一些特殊的字符,比如表示正则"开始"或者"结束","^"字符表示正则的开始而"$"表示正则的结束。
^(.*)/(.*)/(.*)$
这个正则表示整个字符串将全部匹配,除去之前后者之后,没有任何例外。
但是,这个方法仍然匹配的范围太广,我们将匹配的字符按照原子形式存放,然后通过他们形成查询字符串,所以我们必须信任我们所匹配的字符。用(.*)匹配字符串,由于允许了太多字符,所以会存在潜在的安全隐患,引用不当会使mod_rewrite运行出故障。
为了避免一些不必要的麻烦,让我们更改一下我们的原子正则,让其更加准确的匹配我们允许的字符。因为这些原子代表了地区地名,所以我们完全可以用A到Z的大小写来表示他们,另外因为地名之间有空格,所以下划线"_"也是被允许的。我们用中括弧明确我们匹配的正则,然后用短横线"-"表示连接的范围,所以被我们允许的正则修改成了[a-zA-Z_],因为我们还要避免匹配到空名字,所以用"+"来匹配在该字符之前的一个或者多个字符,所以我们的正则成了:
^([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)$
{REQUEST_URI}是以"/"开头。Apache 在更改版本的时候会更改正则引擎,一代Apache要求有斜杠而二代Apache却不允许!但是我们可以用^/?(?表示匹配字符本身或者前一个字符)来兼容两个版本的Apache,所以我们的正则又成了:
^/?([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)$
正则在手,我们就可以将原子标识到URL上了:
display.php?country=$1 &state=$2&city=$3
$1表示国家原子;$2表示省州原子;$3表示城市原子,这里可以加上9个原子,分别用$1到$9表示。
现在我们要做的就是在该目录下创建一个新的.htaccess文件,录入一下代码:
RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)$ display.php?country=$1 &state=$2&city=$3 [L]
然后保存,重写规则必须写在一行并且用一个空格分开每一个参数,我们用[L]或者’last’表示匹配结束。(一会有更多flags介绍)
我们的重写规则已经创建完成, URL请求字符上各原子的值将经过我们匹配的正则,加上查询变量到我们的重写URL上。display.php将从查询字符中解析这些值,然后将他们送入数据库查询或者进行其他数据库操作。
如果你的正则只允许有限的几个国家,为了避免数据库错误,你可以在正则中加入一下被允许条件,例子如下:
^/?(USA|Canada|Mexico)/([a-zA-Z_]+)/([a-zA-Z_]+)$
如果你关心查询字符串的大小写问题,由于你数据库对大写有严格的限制,那么你可以在正则表达式后面加一个[NC]FLAG位来忽略大小写,但是不要忘记在你通过$_GET 获取传递值的时候,把他们转换成小写。
如果你想用数字(0,1…..9)来表示具体的地区,那么需要更改正则中的([a-zA-Z_]+)成([0-9])来匹配单个数字,([0-9]{1,2})匹配两位数字(0到99),([0-9]+)匹配多位数字,这个对匹配数据库ID之类的非常有用。
RewriteCond 指令
现在你已经学会了mod_rewrite的一些基本用法,现在我们来学习下怎样用RewirteCond指令来处理其他各类型的情况。当RewirteCond指令明确声明以后,mod_rewrite将根据它们做出相应的处理。
RewirteCond 指令的形式和RewriteRule有点类似,形式为:RewirteCond 被匹配的字符 正则 FLAG标识。逻辑FLAG标识 [OR],是非常有用的,记住所有RewirteCond 以及RewriteRule指令在[LAST]指令之前,所有的逻辑与关系都会被包含。
……

一次误操作,卸载了原本装好的High Definition Audio以下简称High Audio 声卡驱动,重新安装驱动却发现没有声音,然而更大的问题却是不能卸载当前的声卡驱动程序,每次都是提醒重启计算机,重启以后仍然出现上述症状。网上查找了相关资料,奋战数小时终于安装成功,以下为解决方法:
一.卸载原声卡驱动
a)安全模式
b)进入C:\WINDOWS\system32\drivers目录下删除Hdaudbus.sys,Hdaudio.sys,RtkHDAud.sys三个文件。
c)控制面板中删除KB888111补丁,如果系统存在的话。
d)重启计算机,进入设备管理器查看,声卡已经没有了。
二.重新安装驱动
a)安装KB888111补丁
b)安装主板光盘或者你下载好的最新High Audio声卡驱动,注意请不要用windows系统中自带的驱动。
c)安装结束以后重启计算机。
一二步骤是网上最常见的解决方法,一步一步做完以后系统提示驱动安装成功了,声卡也找到了,但还是没有声音,以下是最关键的一步:
三.打开服务
a)控制面板管理工具服务Windows Audio 将此服务打开
四.插线
如果耳机插入机箱前面的插孔没有声音,试试机箱后面的插孔吧。
终于听到了久违的Windows开机声音,高兴…..希望以上方法对大家有用。
……

"当…………"卡巴斯基那熟悉的病毒警报又一次响起在周五的下午,"呵呵,毒嘛,干掉"我蔑视的注视着弹出的对话框,并且再一次提升了我对卡巴斯基的好感,"谁说卡巴斯基=卡吧死机,诬陷!"

"病毒将在下次启动过程中被删除"卡巴友好的提示着,"好的,重启,删掉",随后快速的重新启动计算机,自信地期待着我的fresh system,大约3分钟以后,卡巴的"当…………"又来了,同样是那个病毒,我有点慌,但依然镇定的操作"可能病毒有点顽固,再来一次!"

……..

于是我执行了3for循环,过程和结果都一样。既然卡巴杀不了,那就用木马家族,于是分别安装了"木马克星""木马清道夫"一系列的工具,同样杀不了,这下我的镇定已经荡然无存。

难道要重新安装系统?"再来一次吧"自言自语道,根据病毒名字,上网查了一下,原来这个是个盗号木马(难怪我这段时间上QQ总是提醒我什么时候在浙江温州异常登陆)原来是它搞的鬼,既然杀毒软件杀不了,那就自己动手了,下面用记实的手法描述一下杀毒过程:

1. 病毒名称:Trojan-Downloader.Win32.Agent.bbb

2. 危害:Trojan-Downloader.Win32.Agent.bbb是继"熊猫烧香"后又一破坏性极强的病毒,此木马病毒会注入explorer.exe进程,并且写进注册表。病毒根据电脑随机生成6位字母+2位数字的dll文件,dll文件位于……

首页 上一页 下一页 尾页 页次:1/2页  4篇日志/页 转到:
“新竞争力”是深圳市竞争力科技有限公司的注册商标
深圳市竞争力科技有限公司 版权所有
电话:86-755-26502263  Email:info@jingzhengli.cn