PHP 易出問題記錄

2022-05-21 07:03:41 字數 1662 閱讀 4614

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 ...