13

PHP网站(windows2003服务器 IIS6)提示:系统找不到指定的路径。

今天早上起来一看其它某php网站(下称:A站),直接就提示:“系统找不到指定的路径。”,其它的什么也没有。输入网站的各种网址都是这样。

回想一下近期的操作,由于服务器的PHP版本太低,自己下载了下个phpStudy(phpStudy4IIS版),作了一下PHP版本的升级,升级很成功,秒完成。重启IIS6,检查了一下本站,显示正常,但是没有看其它网站,所以现在也不确定当时是否正常。

在A站根目录建了一个PHP文件,内容为“<?php phpinfo(); ”,查看下php是否正常,结果不显示。所以断定是PHP程序配置问题。

系统找不到指定的路径。

IIS6不像IIS7等高级版本那么直观,查看IIS6,IIS6>>右键点A站>>属性>>主目录>>配置>>映射>>应用程序扩展。

系统找不到指定的路径。

 

系统找不到指定的路径。

查找扩展名为“.php”项的“可执行文件路径”,是否是升级后的PHP执行文件,结果我的不是,还是原来的路径。问题找到了。

解决方案:

不管你服务器中的网站是一个还是多个,都要使用继承的方法去修改,防止有不必要的麻烦。

IIS6>>右键点网站(这是统一配置,看下图,其它步骤看上面图片)>>属性>>主目录>>配置>>映射>>应用程序扩展

QQ20160713141152

 

如果也是像我使用phpStudy升级过PHP的,路径为“phpStudy4IIS\IIS\fcgiext.dll”,注意:在此路径前加入你的绝对路径。

修改路径后“确定”,选择“全选”(使用以下的所有网站都继承此配置),确定,确定…….

重启IIS6

完成。

如果有其它情况出现,那自己再好好检查一下吧。或者加我QQ,有时间的话我帮你弄弄也可以。

02

MySql获取INSERT后的自增ID、MySql设置变量

表结构:

table_a表中aid为自增长字段

要求使用在插入表table_a后的自增字段aid值做为表table_b的mid字段值,并且用这个值连接固定字符串“abc”后做为字段name2的值,完全使用MySql语言。

设置变量@len

max(aid) 获取mysql在插入一条数据后的自增ID值

CONCAT(‘abc’, @num) 按照参数的顺序拼接成一个字符串做为返回值

知识点:

mysql中变量不用事前申明,在用的时候直接用“@变量名”使用就可以了。

第一种用法:set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量

第二种用法:select @num:=1; 或 select @num:=字段名 from 表名 where ……

注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”

 

05

PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR

REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。
HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。
$_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP
$_SERVER['HTTP_CLIENT_IP']; //代理端的(有可能存在,可伪造)
$_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)

三个值区别如下:

一、没有使用代理服务器的情况:

REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

上面内容是抄袭的,下面代码是个人测试可以获取到客户端真实IP的方法。

 

23

PHP各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)

普通hash函数如md5、sha1、base64等都是不可逆函数。虽然我们利用php可以利用这些函数写出可逆函数来。但是跨语言时这类可逆函数非常难搞定。所以这时尽量使用AES DES RC4 Rabbit TripleDes这些方法。

包含超时的加密解密函数

最简单的往往是最好用的。

URL加密解密函数

用户密码可逆加密解密函数:

测试方法:

SHA1的可逆加密解密函数:

DES的加密解密函数:

封装了两个PHP对称加密解密函数

 

10

修改Discuz论坛的浏览量为每次增加随机数

文件位置:/source/module/forum/forum_viewthread.php

对函数viewthread_updateviews进行修改,约1025行到1049行。

一般来讲,修改如下代码

意为每次浏览增加2~9之间(含2和9)的随机数更新数据库中的记录。

但是这么修改也不是绝对的可以改变浏览量,还要结合网站管理后台的设置。

如果按上面的修改方法不好使,可以进入后台,按下面方法设置:

后台>>全局>>性能优化>>服务器优化>>是否优化更新主题浏览量

设置为“否” >> 提交

另外,也可以把下面这项设置为“否”,

后台>>全局>>性能优化>>服务器优化>>查看数开启防刷新

 

29

php常用基本函数

15个PHP常用函数

1.统计数组元素个数

2. 循环删除目录

Continue reading

29

PHP遍历文件函数glob,比opendir和readdir效率高

PHP遍历文件函数glob,比opendirreaddir效率高(亲测,效率高出至少一倍以上),而且使用起来相对灵活,尤其针对遍历文件名为部分未知的情况,书写更为方便。

在遍历非同级目录文件时,因为glob函数返回是带路径的文件名(如下第三个例子),所以如果需要取文件名则需要使用basename函数。

glob函数

函数说明:array glob ( string $pattern [, int $flags ] )
功能:寻找与模式匹配的文件路径,返回包含匹配文件(目录)的数组(注:被检查的文件必须是服务器系统的,不能用于远程文件)
参数说明:第一个参数:匹配模式;第二个可选参数:
GLOB_MARK – 在每个返回的项目中加一个斜线
GLOB_NOSORT – 按照文件在目录中出现的原始顺序返回(不排序)
GLOB_NOCHECK – 如果没有文件匹配则返回用于搜索的模式
GLOB_NOESCAPE – 反斜线不转义元字符
GLOB_BRACE – 扩充 {a,b,c} 来匹配 ‘a’,’b’ 或 ‘c’
GLOB_ONLYDIR – 仅返回与模式匹配的目录项
GLOB_ERR – Stop on read errors (like unreadable directories), by default errors are ignored.

参数 GLOB_BRACE

 

23

JS使用replace()方法匹配替换手机号、座机号、带区号连接符座机号

老客户的一论坛需要把会员发布的手机号、座机号转成可点击拨号的链接,首先我考虑,是要在会员发布提交时进行处理,还是在发布后进行处理。

我选择在发布后进行前台处理。

需要使用JS replace()方法和正则知识

另一篇关于replace方法与正则基础知识的介绍

测试代码实例:

解释:

因为客户代码中是要对不相连的多个区块中进行处理,所以选择器只能抓取comeing类,这样的话,下面就必须使用for循环,如果可以选择整个区域的话,那选择器就抓取mrdede类,不使用for循环,matchHtml = matchS.eq(i).html()改为matchHtml = matchS.html()即可。

replace方法正则替换

var regexp = new RegExp(/(1)(2)(3)/g);

se = matchHtml.replace(regexp, ‘$3 $1 $2′);

RegExp中的正则表达式,其中在两个正斜杠“/”之间区域,有并列的多个(),

那么这多个()把匹配的内容,从左向右依次为$1 $2 $3 ……

如果:

var regexp = new RegExp(/(123)/g);

se = matchHtml.replace(regexp, ‘$1我被找到了’);

RegExp中的正则表达式,其中在两个正斜杠“/”之间区域,只有一个()或没有(),

那么只有$1可以参与替换,

替换时不是一定要使用$1 $2 $3 …… 进行替换,也可以使用其它字符进行替换。

关于实例中正则的解释(从左向右依次解释):

全部原始正则表达式([^0-9])([0-1]{1}[1-9][0-9]{1,2}[^0-9]?[0-9]{7,8}|[1-9]\d{6,7})([^0-9])

([^0-9])以非数字开头(即$1)

原始中的第二段([0-1]{1}[1-9][0-9]{1,2}[^0-9]?[0-9]{7,8}|[1-9]\d{6,7}) 即$2

[0-1]{1}解释:0到1之间(含)的数字必须出现一次

[1-9]解释:1到9之间(含)的数字必须出现一次

[0-9]{1,2}解释:0到9之间(含)的数字至少出现一次,最多出现两次

[^0-9]?解释:非数字的任意一个字符至少出现0次,最多出现一次

[0-9]{7,8}解释:0到9之间(含)的数字至少出现7次,最多出现8次

|解释:或者的意思

[1-9]解释:1到9之间(含)的数字必须出现一次

\d{6,7}解释:0到9之间(含)的数字至少出现6次,最多出现7次

最后面的([^0-9])解释:以非数字结尾(即$3 这样就能保证不匹配以0或1开头的大于12位的数字串了)

注注注:

此正则写法只可使用在JS的replace方法进行替换的情况,如果想用在其它地方,需要去掉正则前后的([^0-9]) 即使用[^0-9])([0-1]{1}[1-9][0-9]{1,2}[^0-9]?[0-9]{7,8}|[1-9]\d{6,7})([^0-9],但是如果想更严谨一些的话,可以再改造。

其实我写的这段正则用在replace方法中匹配替换手机号与座机号时,还是不太严谨,但是绝大多数情况还是可以的。

==========================================

修改:

就在刚才,发布完文章,又做了一下修改,上面实例中双斜杠注释掉的部分是原来的

在它下面两行是改后的,这样就更严谨一些了。

var regexp = new RegExp(/([^0-9])([0-1]{1}[1-9][0-9]{1,2})([^0-9]?)([0-9]{7,8}|[1-9]\d{6,7})([^0-9])/g);

se = matchHtml.replace(regexp, '$1<a style="color:#09f;text-decoration:underline;" href="tel:$2$4">$2$3$4</a>$5');

把原来中间部分([0-1]{1}[1-9][0-9]{1,2}[^0-9]?[0-9]{7,8}|[1-9]\d{6,7})改为([0-1]{1}[1-9][0-9]{1,2})([^0-9]?)([0-9]{7,8}|[1-9]\d{6,7})

也就是把原来的中间部分分成了三个部分,现在全部正则为/([^0-9])([0-1]{1}[1-9][0-9]{1,2})([^0-9]?)([0-9]{7,8}|[1-9]\d{6,7})([^0-9])/ 

所以在替换的时候就有$1$2$3$4$5这五个部分可以参与替换了。

其中$2各$4是实际打可拨打号码的部分,所以在链接中使用href=”tel:$2$4″

中间部分就是$2$3$4的组合了

尾部$5

这样就防止替换的座机号存在非数字时也参与拨号的情况出现了,如抓取到的号码为010-12345678或010 12345678,在拨打时就是01012345678

我不知道在拨号时区号与直拨号间有横杠或空格时能不能拨得出去,没试,也就不试。

个人感觉,严谨一些的话,还是现在这样写正则比较好。

==========================================

再次修改正则:

上一次修改后不能匹配7位和8位的电话直拨号,有错误。

这回测试了,可用,没问题了。哈哈

另附一图,关于replace的替换变量的规律的,如下:

JS使用replace()方法匹配替换手机号、座机号、带区号连接符座机号

23

JS replace方法替换字符串实例及正则表达式基础知识

1、javascript 正则对象替换创建 和用法: /pattern/flags  先简单案例学习认识下replace能干什么

正则表达式构造函数: new RegExp("pattern"[,"flags"]);

正则表达式替换变量函数:stringObj.replace(RegExp,replace Text);

参数说明:
pattern — 一个正则表达式文本
flags — 如果存在,将是以下值:
g: 全局匹配
i: 忽略大小写
gi: 以上组合 Continue reading

15

PHP中extract()的使用方法

年前年后没什么活儿,闲着没事时准备把织梦折采集功能提出来,经过改造移植进Destoon网站系统。在改造的过程中,也碰到了很多新知识来学习。

Destoon源码根目录common.inc.php文件约第80多行,源码如下:

if($_POST) extract($_POST, EXTR_SKIP);
if($_GET) extract($_GET, EXTR_SKIP);

注:不要对不能信任的数据使用 extract()

测试实例:

form.html

action.php

extract(),它的主要作用是将数组展开,键名(name)作为变量名,元素值(value)为变量值,可以说为数组的操作提供了另外一个方便的工具,比方说,可以很方便的提取$_POST或者$_GET的元素,对表单提交过来的内容不用一一赋值。

int extract ( array $var_array [, int $extract_type [, string $prefix ]] )

extract() 检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。对待非法/数字和冲突的键名的方法将根据 extract_type 参数决定。可以是以下值之一:

EXTR_OVERWRITE
如果有冲突,覆盖已有的变量。
EXTR_SKIP
如果有冲突,不覆盖已有的变量。
EXTR_PREFIX_SAME
如果有冲突,在变量名前加上前缀 prefix 。
EXTR_PREFIX_ALL
给所有变量名加上前缀 prefix 。自 PHP 4.0.5 起这也包括了对数字索引的处理。
EXTR_PREFIX_INVALID
仅在非法/数字的变量名前加上前缀 prefix 。本标记是 PHP 4.0.5 新加的。
EXTR_IF_EXISTS
仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。可以用在已经定义了一组合法的变量,然后要从一个数组例如 $_REQUEST 中提取值覆盖这些变量的场合。本标记是 PHP 4.2.0 新加的。
EXTR_PREFIX_IF_EXISTS
仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。本标记是 PHP 4.2.0 新加的。
EXTR_REFS
将变量作为引用提取。这有力地表明了导入的变量仍然引用了 var_array 参数的值。可以单独使用这个标志或者在 extract_type 中用 OR 与其它任何标志结合使用。本标记是 PHP 4.3.0 新加的。
如果没有指定 extract_type ,则被假定为 EXTR_OVERWRITE。

注意 prefix 仅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。前缀和数组键名之间会自动加上一个下划线。

extract() 的一种可能用法是将 wddx_deserialize() 返回的结合数组中的内容导入到符号表变量中去。

Example#1 extract() 例子

上例将输出:

blue, large, sphere, medium

$size 没有被覆盖,因为指定了 EXTR_PREFIX_SAME,这使得 $wddx_size 被建立。如果指定了 EXTR_SKIP,则 $mrdede_size 也不会被建立。EXTR_OVERWRITE 将使 $size 的值为“medium”,EXTR_PREFIX_ALL 将建立新变量 $mrdede_color,$mrdede_size 和 $mrdede_shape。

必须使用关联数组,数字索引的数组将不会产生结果,除非用了 EXTR_PREFIX_ALL 或者 EXTR_PREFIX_INVALID。