php foreach引用缺陷
<?php$array = array(1, 2, 3);
foreach ($array as &$v) {}
foreach ($array as $v) {}
print_r($array);
?>
實際輸出:
array( [0] => 1
[1] => 2
[2] => 2
)
解釋: 第一次foreach的時候$v成為了乙個引用變數($array[2]),如此,當第二次foreach的時候, 實際上只是在對這個引用變數($array[2])進行了若干次賦值而已。第一次:$array[2] = 1,此時$array各元素分別為1,2,1
第二次:$array[2] = 2,此時$array各元素分別為1,2,2
第三次:$array[2] = 2,此時$array各元素分別為1,2,2
字串與整型對比缺陷
<?php$a = 1;
$b = "1ab";
echo $a == $b;
?>
輸出:1解釋:
int $a跟string $b進行對比時,php會將string $b進行強制轉換成int,即intval($b)
而強轉規則是是從字串左側起,遇到非數字(或者小數點'.')即終止,有效部分進行強轉,
即intval('1ab') = 1;
所以$a == $b輸出1
訪問遠端http服務使用curl禁用file_get_contents
1. fopen/file_get_contents 每次請求的超時設定不穩定,會導致不同程度的夯住程序2. fopen/file_get_contents 每次請求都會重新做dns查詢,並不對 dns資訊進行快取。但是curl會自動對dns資訊進行快取。對同一網域名稱下的網頁或者的請求只需要一次dns查詢。這大大減少了dns查詢的次數。所以curl的效能比fopen /file_get_contents 好很多。
4. fopen/file_get_contents 函式會受到php.ini檔案中allow_url_open選項配置的影響。如果該配置關閉了,則該函式也就失效了。而curl不受該配置的影響。
5. curl 可以模擬多種請求,例如:post資料,表單提交等,使用者可以按照自己的需求來定製請求。而fopen / file_get_contents只能使用get方式獲取資料。
php socket通訊設計陷阱
1. 使用socket_create代替fsocketopen.fsocketopen會有比較大得概率建立連線失敗2. 大資料讀取使用socket_recv代替socket_read。socket_read在讀取大資料時,會出現讀取不全的現象
php問題記錄
1 開啟閘道器後台監控,返回500內部錯誤。排查過程 定位到是讀取redis那部分 報錯,於是記錄下php指令碼記憶體使用狀況 begin memory get usage all data all data redis pipeline function pipe use all keys,tim...
PHP開發之問題記錄
header content type text html charset utf 8 新增一行 解決亂碼 echo 中文 ip server remote addr echo ip arr array array push arr,tt arr key1 value 新增帶鍵值的資料 echo t...
php輸出問題
輸出問題 a a3df b 256 echo a echo print a echo printf a s,b d a b echo 輸出問題,一般情況用echo 它可以連續輸出,如 echo a b sffjfh echo print的輸出有返回值 print是函式 return print b ...