**一、PHP内置的的输出换行的常量,会根据操作系统的不同来输出**
*****
~~~
PHP_EOL
~~~
**二、php:list**
*****
定义和用法
list() 函数用于在一次操作中给一组变量赋值。
注释:该函数只用于数字索引的数组,且假定数字索引从 0 开始。
list() 函数用数组中的元素为一组变量赋值。
注意,与 array() 类似,list() 实际上是一种语言结构,不是函数。
~~~
<?php
$my_array = array("Dog","Cat","Horse");
list($a, , $c) = $my_array;
echo "我在这里只用了 $a 和 $c 变量。";
?>
~~~
**三、PHP basename() 函数**
*****
~~~
basename(path,suffix)
~~~
~~~
<?php
$path = "/testweb/home.php";
//显示带有文件扩展名的文件名
echo basename($path);
//显示不带有文件扩展名的文件名
echo basename($path,".php");
?>
~~~
输出:
~~~
home.php
home
~~~
**四、PHP:glob()**
>语法
`glob(pattern,flags)`
|参数|描述|
|---|--|
|file |必需。规定检索模式。|
|size|可选。规定特殊的设定 <br/><strong>GLOB_MARK</strong> - 在每个返回的项目中加一个斜线<br/><strong>GLOB_NOSORT</strong> - 按照文件在目录中出现的原始顺序返回(不排序)<br/><strong>GLOB_NOCHECK</strong> -如果没有文件匹配则返回用于搜索的模式<br/><strong>GLOB_NOESCAPE</strong> - 反斜线不转义元字符<br/><strong>GLOB_BRACE</strong> - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'<br/><strong>GLOB_ONLYDIR</strong> - 仅返回与模式匹配的目录项<br/><strong>GLOB_ERR</strong>-停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误注释:<br/><strong>GLOB_ERR</strong> -是 PHP 5.1 添加的|
>例子 1
~~~
<?php
print_r(glob("*.txt"));
?>
~~~
>输出类似:
~~~
Array
(
[0] => target.txt
[1] => source.txt
[2] => test.txt
[3] => test2.txt
)
~~~
>例子 2
~~~
<?php
print_r(glob("*.*"));
?>
~~~
>输出类似:
~~~
Array
(
[0] => contacts.csv
[1] => default.php
[2] => target.txt
[3] => source.txt
[4] => tem1.tmp
[5] => test.htm
[6] => test.ini
[7] => test.php
[8] => test.txt
[9] => test2.txt
)
~~~
**五、PHP 判断是否为 AJAX 请求**
****
先说前端使用 jQuery 时怎么区分:
>jQuery 发出 ajax 请求时,会在请求头部添加一个名为 X-Requested-With 的信息,信息内容为:XMLHttpRequest
在后端可以使用 $_SERVER["HTTP_X_REQUESTED_WITH"] 来获取。(注意:中划线换成了下划线,不区分大小写)
***由此,我们可以这样来判断是否为 ajax 请求:***
~~~
// php 判断是否为 ajax 请求 http://www.cnblogs.com/sosoft/
if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest"){
// ajax 请求的处理方式
}else{
// 正常请求的处理方式
};
~~~
**2.给已经建好的表加上唯一性约束**
~~~
ALTER TABLE `t_user` ADD unique(`username`);
~~~
**获取所有require的文件**
*****
~~~
var_dump(get_required_files()
~~~
**六、ip相关**
~~~
PHP
echo ip2long('192.168.1.38');
输出:3232235814
MYSQL
SELECT INET_ATON('192.168.1.38');
输出:3232235814
~~~
>两个函数返回的结果是一样的,都是A*256*256*256+B*256*256+C*256+D的算法
192*256*256*256+168*256*256+1*256+38 = 3 232 235 814
>反过来,从int转换为IP地址分别是php的long2ip()和mysql的INET_NTOA()。
>mysql存储这个值是字段需要用int UNSIGNED。不用UNSIGNED的话,128以上的IP段就存储不了了。
>传统的方法,创建varchar(15),需要占用15个字节,而改时使用int只需要4字节,可以省一些字节。
>php存入时:$ip = ip2long($ip);
mysql取出时:SELECT INET_ATON(ip) FROM table ...
php取出时,多一步:$ip = long2ip($ip);
**转换以前的数据:**
1.把以前的varchar()数据转换为int型的SQL语句:
`UPDATE `hx_table` SET ip = INET_ATON(ip) WHERE INET_ATON(ip) is NOT NULL `
2.把字段更改为int型:
`ALTER TABLE `hx_table` CHANGE `ip` `ip` INT UNSIGNED NOT NULL `
3.程序做相应修改上传,完成。
@@UPDATE@@20110310:
在32位的机子上,echo ip2long('192.168.1.38');由于超过32位的最大数,导致输出负数-1062731482。
有两种方法更新为正数:
$ip_long = bindec(decbin(ip2long($ip)));
或
$ip_long = = sprintf("%u", ip2long($ip));
因此一种是修改PHP程序,使其肯定存入正数。
另一种是将mysql的这个字段使用int,非UNSIGNED,使其可以存入负数。