中山php|最优网络中山做网站 中山php建站

最优良人

2011/08/13 at 18:04

php字符串首字母转换大小写

首字母变大写:ucwords()

<?php
$foo = 'hello world!';
$foo = ucwords($foo); // Hello World!

$bar = 'HELLO WORLD!';
$bar = ucwords($bar); // HELLO WORLD!
$bar = ucwords(strtolower($bar)); // Hello World!
?>

第一个词首字母变大写:ucfirst()

<?php
$foo = 'hello world!';
$foo = ucfirst($foo); // Hello world!

$bar = 'HELLO WORLD!';
$bar = ucfirst($bar); // HELLO WORLD!
$bar = ucfirst(strtolower($bar)); // Hello world!
?>

第一个词首字母小写lcfirst()

<?php
$foo = 'HelloWorld';
$foo = lcfirst($foo); // helloWorld

$bar = 'HELLO WORLD!';
$bar = lcfirst($bar); // hELLO WORLD!
$bar = lcfirst(strtoupper($bar)); // hELLO WORLD!
?>

字母变大写:strtoupper()

字母变小写:strtolower()

标签:,
comments Comments (19)    -
2011/08/13 at 12:44

Fleaphp 关闭日志服务

fleaphp框架日志服务开启的时候回产生大量的日志文件,对于大部分寸土寸金的虚拟空间来说是个不小的压力,只要重新定义一下'logEnabled'这个配置参数,改为false就可以关闭了

标签:,
comments Comments (406)    -
2011/08/08 at 09:08

模仿蜘蛛抓取网站内容

function baiduSpider($url){
$ch = curl_init();
$user_agent = "Baiduspider+(+http://www.baidu.com/search/spider.htm)";//这里模拟的是百度蜘蛛
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $url);//这里写一个来源地址,可以写要抓的页面的首页
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
$temp=curl_exec($ch);
return $temp;
}
php必须开启curl扩展,把$url换成可以写要抓的页面就可以了

comments Comments (6)    -
2011/08/07 at 16:29

Fleaphp访问出错返回404页面的方法

配置文件里有项 : 'dispatcherFailedCallback' , 他用来设置当调度器失败时调用的方法。
应用很灵活, 举个例子, 当控制器或控制器动作不存在就跳到定制的404页面。

FLEA::setAppInf('dispatcherFailedCallback', 'onDispatcherFailed');

function onDispatcherFailed

{

redirect('404.html');

}

 

dispatcherFailedCallback的配置分2种情况,如果当前访问的控制器、动作不存:'dispatcherFailedCallback' => 'onDispatcherFailedCallback',
如果用户设置了RABC访问控制,访问无法访问的动作时:'dispatcherAuthFailedCallback' => 'onAuthFailedCallback',
上面onDispatcherFailedCallback、onAuthFailedCallback是出错的时候调用的函数,你可以在index.php种定义这2个函数就OK了。
例如:
function onAuthFailedCallback($controller,$action)
{

redirect(url('Login','Index')); // 这里是验证失败时,让用户去登录
}

标签:,
comments Comments (414)    -
2011/08/07 at 02:10

PHP显示客户端IP与服务器IP

打印客户端IP:echo $_SERVER['REMOTE_ADDR']; 或者: getenv('REMOTE_ADDR');

当时当客户端使用代理访问,那取到的是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。所以比较准确的获取客户ip的方法是:

function getip(){
if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')){
$ip = getenv('HTTP_CLIENT_IP');
}else if (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')){
$ip = getenv('HTTP_X_FORWARDED_FOR');
}else if (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')){
$ip = getenv('REMOTE_ADDR');
}else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')){
$ip = $_SERVER['REMOTE_ADDR'];
}
preg_match("/[\d\.]{7,15}/", $ip, $temp);
$ip = $temp[0] ? $temp[0] : 'unknown';
unset($temp);
return $ip;
}

打印服务器IP:echo gethostbyname(www.baidu.com);

打印服务器IP列表:echo gethostbynamel(www.baidu.com);

通过ip地址获取主机名:$hostname = gethostbyaddr('58.62.246.55');

标签:, ,
comments Comments (433)    -
2011/08/07 at 02:08

关于域名的一些常用设置的说明

建站名词解释:DNS A记录 NS记录 MX记录 CNAME记录 TXT记录 TTL值 PTR值 泛域名 泛解析 域名绑定 域名转向

1. DNS
DNS:Domain Name System 域名管理系统 域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,这一命名的方法或这样管理域名的系统叫做域名管理系统。
DNS:Domain Name Server 域名服务器 域名虽然便于人们记忆,但网络中的计算机之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS 就是进行域名解析的服务器。
查看DNS更详细的解释

2. A记录
A (Address)记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置域名的子域名。通俗来说A记录就是服务器的IP,域名绑定A记录就是告诉DNS,当你输入域名的时候给你引导向设置在DNS的A记录所对应的服务器。
简单的说,A记录是指定域名对应的IP地址。

3. NS记录
NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。
您注册域名时,总有默认的DNS服务器,每个注册的域名都是由一个DNS域名服务器来进行解析的,DNS服务器NS记录地址一般以以下的形式出现:
ns1.domain.com、ns2.domain.com等。
简单的说,NS记录是指定由哪个DNS服务器解析你的域名。

4. MX记录
MX(Mail Exchanger)记录是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。例如,当Internet上的某用户要发一封信给 user@mydomain.com 时,该用户的邮件系统通过DNS查找mydomain.com这个域名的MX记录,如果MX记录存在, 用户计算机就将邮件发送到MX记录所指定的邮件服务器上。

5. CNAME记录
CNAME(Canonical Name )别名记录,允许您将多个名字映射到同一台计算机。通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为"host.mydomain.com"(A记录),它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL, 这两个别名的全称就"www.mydomain.com"和"mail.mydomain.com",实际上他们都指向 "host.mydomain.com"。

6. TXT记录
TXT记录,一般指某个主机名或域名的说明,如:admin IN TXT "管理员, 电话:XXXXXXXXXXX",mail IN TXT "邮件主机,存放在xxx , 管理人:AAA",Jim IN TXT "contact: abc@mailserver.com",也就是您可以设置 TXT 内容以便使别人联系到您。

TXT的应用之一,SPF(Sender Policy Framework)反垃圾邮件。SPF是跟DNS相关的一项技术,它的内容写在DNS的TXT类型的记录里面。MX记录的作用是给寄信者指明某个域名的邮件服务器有哪些。SPF的作用跟MX相反,它向收信者表明,哪些邮件服务器是经过某个域名认可会发送邮件的。SPF的作用主要是反垃圾邮件,主要针对那些发信人伪造域名的垃圾邮件。例如:当邮件服务器收到自称发件人是spam@gmail.com的邮件,那么到底它是不是真的gmail.com的邮件服务器发过来的呢,我们可以查询gmail.com的SPF记录,以此防止别人伪造你来发邮件。

7. TTL值
TTL(Time-To-Live)原理:TTL是IP协议包中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。例如,不正确的路由表可能导致包的无限循环。一个解决方法就是在一段时间后丢弃这个包,然后给发送者一个报文,由发送者决定是否要重发。TTL的初值通常是系统缺省值,是包头中的8位的域。TTL的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把TTL域减一,TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。

简单的说,TTL就是一条域名解析记录在DNS服务器中的存留时间。当各地的DNS服务器接受到解析请求时,就会向域名指定的NS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向NS服务器发出请求,而是直接返回刚才获得的记录,而这个记录在DNS服务器上保留的时间,就是TTL值。

TTL值设置的应用:
一是增大TTL值,以节约域名解析时间,给网站访问加速。
一般情况下,域名的各种记录是极少更改的,很可能几个月、几年内都不会有什么变化。我们完全可以增大域名记录的TTL值让记录在各地DNS服务器中缓存的时间加长,这样在更长的一段时间内,我们访问这个网站时,本地ISP的DNS服务器就不需要向域名的NS服务器发出解析请求,而直接从缓存中返回域名解析记录。
二是减小TTL值,减少更换空间时的不可访问时间。
更换空间99.9%会有DNS记录更改的问题,因为缓存的问题,新的域名记录在有的地方可能生效了,但在有的地方可能等上一两天甚至更久才生效。结果就是有的人可能访问到了新服务器,有的人访问到了旧服务器。仅仅是访问的话,这也不是什么大问题,但如果涉及到了邮件发送,这个就有点麻烦了,说不定哪封重要信件就被发送到了那已经停掉的旧服务器上。
为了尽可能的减小这个各地的解析时间差,合理的做法是:
第一步,先查看域名当前的TTL值,我们假定是1天。
第二步,修改TTL值为可设定的最小值,可能的话,建议为1分钟,就是60。
第三步,等待一天,保证各地的DNS服务器缓存都过期并更新了记录。
第四步,设置修改新记录,这个时候各地的DNS就能以最快的速度更新到新的记录。
第五步,确认各地的DNS已经更新完成后,把TTL值设置成您想要的值。

一般操作系统的默认TTL值如下:
TTL=32 Windows 9x/Me
TTL=64 LINUX
TTL=128 Windows 200x/XP
TTL=255 Unix

8. PTR值
PTR是pointer的简写,用于将一个IP地址映射到对应的域名,也可以看成是A记录的反向,IP地址的反向解析。
PTR主要用于邮件服务器,比如邮箱AAA@XXX.com给邮箱BBB@yahoo.com发了一封邮件,yahoo邮件服务器接到邮件时会查看这封邮件的头文件,并分析是由哪个IP地址发出来的,然后根据这个IP地址进行反向解析,如果解析结果对应XXX.com的IP地址就接受这封邮件,反之则拒绝接收这封邮件。

9. 泛域名与泛解析
泛域名是指在一个域名根下,以 *.Domain.com的形式表示这个域名根所有未建立的子域名。
泛解析是把*.Domain.com的A记录解析到某个IP 地址上,通过访问任意的前缀.domain.com都能访问到你解析的站点上。

10. 域名绑定
域名绑定是指将域名指向服务器IP的操作。

11. 域名转向
域名转向又称为域名指向或域名转发,当用户地址栏中输入您的域名时,将会自动跳转到您所指定的另一个域名。一般是使用短的好记的域名转向复杂难记的域名。

标签:
comments Comments (108)    -
2011/08/07 at 02:07

PHP static静态变量

什么是static静态变量?

静态变量 类型说明符是static。

静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束(相反,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放)。静态变量虽在程序的整个执行过程中始终存在,但是在它作用域之外不能使用。

另外,属于静态存储方式的量不一定就是静态变量。 例如:外部变量(在PHP中指全局变量)虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。

静态变量可以在任何可以申请的地方申请,一旦申请成功后,它将不再接受其他的同样申请。

静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。

一、静态局部变量:

1、Static类内部变量同auto自动变量(即未加 Static 声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,2者作用域相同;两者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。换言之,Static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量。

2、函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行)。而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。

3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值。

4、当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

注:局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量。

二、静态全局变量

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。
这两者在存储方式上并无不同。

这两者的区别虽在于:
1、非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
2、静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。

从以上分析可以看出————
把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。
把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。static静态变量会被放在程序的全局存储区中(即在程序的全局数据区,而不是在堆栈中分配,所以不会导致堆栈溢出),这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。

三应用于PHP中

//--------------如何理解static静态变量-----------。
//普通局部变量
function local(){
$loc = 0; //这样,如果直接不给初值0是错误的。
++$loc;
echo $loc.'<br>';
}
local(); //1
local(); //1
local(); //1
echo '===================================<br/>';
//static静态局部变量
function static_local(){
static $local = 0 ; //此处可以不赋0值
$local++;
echo $local.'<br>';
}
static_local(); //1
static_local(); //2
static_local(); //3
//echo $local; 注意虽然静态变量,但是它仍然是局部的,在外不能直接访问的。
echo '=======================================<br>';
//static静态全局变量(实际上:全局变量本身就是静态存储方式,所有的全局变量都是静态变量)
function static_global(){
global $glo; //此处,可以不赋值0,当然赋值0,后每次调用时其值都为0,每次调用函数得到的值都会是1,但是不能想当然的写上"static"加以修饰,那样是错误的.
$glo++;
echo $glo.'<br>';
}
static_global(); //1
static_global(); //2
static_global(); //3

标签:
comments Comments (330)    -
2011/08/07 at 02:01

php过滤敏感字符的一些相关函数--魔法函数应用

一,首先,先来看一下php.ini的两个配置参数

magic_quotes_gpc "1" PHP_INI_PERDIR PHP_INI_ALL in PHP <= 4.2.3. Removed in PHP 6.0.0.

作用范围是:WEB客户服务端;
作用时间:请求开始是,例如当脚本运行时

magic_quotes_runtime "0" PHP_INI_ALL Removed in PHP 6.0.0.

作用范围是:影响从文件中读取的数据或从数据库查询得到的数据。

以下是一些常用到的方法:

get_magic_quotes_gpc(void)

本函数取得 PHP 环境配置的变量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。

  返回 0 表示关闭本功能;

  返回 1 表示本功能打开。

  当 magic_quotes_gpc 打开时,所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的溢出字符。

应用:

由于该参数不支持在php文件进行设置,如果通过本函数取得的变量magic_quotes_gpc 的值为false,我们可以
利用addslashes()人工使用反斜线引用字符串

$var = get_magic_quotes_gpc()?$var:addslashes($var);

相反,如果通过本函数取得的变量magic_quotes_gpc 的值为true,我们希望字符串不被转义,那么可以利用stripslashes()去除自动添加的反斜杠

get_magic_quotes_runtime()

一般情况下,应当将其关闭,否则从数据库读取出来的数据单引号、双引号和反斜杠都会被加上\,导致显示不正常。像Discuz,PHPWind都在公共文件的头部加上一句

set_magic_quotes_runtime(0)

// Check if magic_quotes_runtime is active
if(get_magic_quotes_runtime())
{
// Deactive
set_magic_quotes_runtime(false);
}

二、对于magic_quotes_runtime,我们统一关闭它,即set_magic_quotes_runtime(0);不让从数据库读取出来的数据的单引号、双引号和反斜杠都自动被加上\。这样,对数据库的操作如下:添加数据到数据库之前,我们手动对数据进行addslashes(),而从数据库取出数据时,则作相反操作,即stripslashes()。

三、对于要序列化的内容,要保持裸数据,即要去掉转义,stripslashes(),然后在把序列化过的内容保存到数据库当中(注意,序列化过的内容是不带单引号(')、双引号(")、反斜线(\)的),示例如下:

$feedarr['body_data'] = serialize(stripslashes($body_data));

标签:,
comments Comments (345)    -
2011/08/07 at 01:42

Apache 配置虚拟服务器

1,修改本机的hosts文件,如下:  
示例:
127.0.0.1 localhost
127.0.0.1 www.test.com
127.0.0.1 test.com

2,打开Apache的安装目录,找到httpd.conf文件,分别去掉下面两行文字前面的#号。  
#LoadModule vhost_alias_module modules/mod_vhost_alias.so   
去掉#意思是启用apache的虚拟主机功能。  
#Include conf/extra/httpd-vhosts.conf  
去掉这一行的#意思是从conf/extra/httpd-vhosts.conf这个文件导入虚拟主机配置。

3,打开extra目录内的httpd-vhosts.conf文件,把默认的配置


ServerAdmin webmaster@dummy-host.localhost
DocumentRoot "/www/docs/dummy-host.localhost"
ServerName dummy-host.localhost
ServerAlias www.dummy-host.localhost
ErrorLog "logs/dummy-host.localhost-error_log"
CustomLog "logs/dummy-host.localhost-access_log common"


ServerAdmin webmaster@dummy-host2.localhost
DocumentRoot "/www/docs/dummy-host2.localhost"
ServerName dummy-host2.localhost
ErrorLog "logs/dummy-host2.localhost-error_log"
CustomLog "logs/dummy-host2.localhost-access_log common"

改成自己想要的目录和域名


ServerAdmin webmaster@dummy-host.localhost
DocumentRoot "D:/wamp/www/"
ServerName localhost
ServerAlias localhost
ErrorLog "logs/localhost-error_log"


ServerAdmin webmaster@dummy-host.localhost
DocumentRoot "D:/wamp/www/web/"
ServerName test.com (填主域名)
ServerAlias *.test.com (这里的服务器别名可以支持泛解析)
ErrorLog "logs/localhost-error_log"

如果 弄完之后 出现403错误 那 在httpd.conf里找到:

Options FollowSymLinks ExecCGI Indexes
AllowOverride None
Order deny,allow
Deny from all
Satisfy all

更改为

Options FollowSymLinks ExecCGI Indexes
AllowOverride None
# Order deny,allow
# Deny from all
# Satisfy all

标签:,
comments Comments (20)    -
2011/08/06 at 12:04

使用wordpress文章快速发布功能

wordpress后台自带文章快速发布功能这一功能,点控制板-工具-快速发布,将快速发布加入浏览器书签或是收藏夹即可。

如果使用的是Firefox,直接加入了书签即可,IE浏览器用户需要注意的是,加入收藏以后,点击会被拦截,需设置两个地方:

打开internet选项-》隐私

1设置允许弹出窗口

2将你的网站加入信任列表或者将安全级别调到最低(很容易中毒哦)

如果安装google工具条或是百度工具条的话也需要设置一下,允许你网站的弹出窗口。

这样设置好以后,在其他网页看到有用的信息,只有复制,然后点击收藏夹快速发布的链接,输入用户名密码,所复制的内容就已经在编辑器里面了,直接点击发布即可。

标签:,
comments Comments (491)    -