**一、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,使其可以存入負數。