一:自動加載php
__autoload():html
注意:數據庫
1:spl_autoload_register() 提供了一種更加靈活的方式來實現類的自動加載。所以,再也不建議使用 __autoload() 函數,在之後的版本中它可能被棄用。api
2:在 5.3.0 版以前,__autoload 函數拋出的異常不能被 catch語句塊捕獲並會致使一個致命錯誤。從 5.3.0+ 以後,__autoload 函數拋出的異常能夠被 catch語句塊捕獲,但須要遵循一個條件。若是拋出的是一個自定義異常,那麼必須存在相應的自定義異常類。__autoload 函數能夠遞歸的自動加載自定義異常類。安全
3:自動加載不可用於 PHP 的 CLI 交互模式。app
二:文件系統函數curl
1:string basename ( string $path
[, string $suffix
] ) 記住$suffix參數函數
basename() operates naively on the input string, and is not aware of the actual filesystem, or path components such as "..". post
Note:ui
basename() is locale aware, so for it to see the correct basename with multibyte character paths, the matching locale must be set using the setlocale() function.
<?php
echo "1) ".basename("/etc/sudoers.d", ".d").PHP_EOL;
echo "2) ".basename("/etc/passwd").PHP_EOL;
echo "3) ".basename("/etc/").PHP_EOL; //basename也能夠做用於沒有文件名的路徑,這樣的話則最後的路徑段被返回
echo "4) ".basename(".").PHP_EOL;
echo "5) ".basename("/");
?>
1) sudoers 2) passwd 3) etc 4) . 5)
三:變量名中的點
一般,PHP 不會改變傳遞給腳本中的變量名。然而應該注意到點(句號)不是 PHP 變量名中的合法字符。至於緣由,看看:
<?php
$varname.ext; /* 非法變量名 */
?>
出於此緣由,要注意 PHP 將會自動將變量名中的點替換成下劃線。即獲取的時候用: $_POST['varname_ext'];
四:string http_build_query ( mixed $query_data
[, string $numeric_prefix
[, string $arg_separator
[, int $enc_type
= PHP_QUERY_RFC1738
]]] )
生成 URL-encode 以後的請求字符串
注意:
1:結果是生按url-encode編碼後的字符
2: php版本5.4後加入了$enc_type,
enc_type
默認使用 PHP_QUERY_RFC1738
。
若是 enc_type
是 PHP_QUERY_RFC1738
,則編碼將會以 » RFC 1738 標準和 application/x-www-form-urlencoded 媒體類型進行編碼,空格會被編碼成加號(+)。
若是 enc_type
是 PHP_QUERY_RFC3986
,將根據 » RFC 3986 編碼,空格會被百分號編碼(%20)。
相似:urlencoding按RFC 1738來編碼
而rawurlencoding按» RFC 3986來編碼
$name = "wang le le";
echo urlencode($name) . '<br>';
echo rawurlencode($name);
輸出:
wang+le+le
wang%20le%20le
3:Params with null value do not present in result string.
<?
$arr = array('test' => null, 'test2' => 1);
echo http_build_query($arr);
?>
will produce:
test2=1
4:關於對空格的編碼問題
例1:
When using the http_build_query function to create a URL query from an array for use in something like curl_setopt($ch, CURLOPT_POSTFIELDS, $post_url), be careful about the url encoding.
In my case, I simply wanted to pass on the received $_POST data to a CURL's POST data, which requires it to be in the URL format. If something like a space [ ] goes into the http_build_query, it comes out as a +. If you're then sending this off for POST again, you won't get the expected result. This is good for GET but not POST.
Instead you can make your own simple function if you simply want to pass along the data:
<?php
$post_url = '';
foreach ($_POST AS $key=>$value)
$post_url .= $key.'='.$value.'&';
$post_url = rtrim($post_url, '&');
?>
You can then use this to pass along POST data in CURL.
<?php
$ch = curl_init($some_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_url);
curl_exec($ch);
?>
Note that at the final page that processes the POST data, you should be properly filtering/escaping it
例2:
instead of some other suggestions that did not work for me, I found that the best way to build POST content (e.g. for stream_context_create) is urldecode(http_build_query($query))
5:void set_time_limit ( int $seconds
)
注意:
1》:當php運行於安全模式時,此功能不能生效。除了關閉安全模式或改變php.ini中的時間限制,沒有別的辦法。
2》set_time_limit()函數和配置指令max_execution_time隻影響腳本自己執行的時間。任何發生在諸如使用system()的系統調用,流操做,數據庫操做等的腳本執行的最大時間不包括其中,當該腳本已運行。在測量時間是實值的Windows中,狀況就不是如此了。