[英]Memory leak in php
我在理解為什么我的代碼的這一部分導致內存泄漏時遇到問題:
for($i=0; $i<count($values); $i++){
$values[$i] = addslashes($values[$i]);
}
為了將代碼放在上下文中,我有一個先前構建的數組,稱為值,該數組具有要插入數據庫中的所有值。 所有字段都是字符串,因此我需要對它們全部進行轉義,對於此應用程序,addslashes或mysql_real_escape_string是imo的不錯選擇。
現在奇怪的是,一旦我添加了上面顯示的部分,就會收到如下消息:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 24 bytes)
我知道這會導致內存泄漏,但我不知道為什么。
挖掘一下,我注釋掉了for循環中的唯一一行,僅出於好奇而保留了for語句,並且泄漏消失了。 有什么想法可能意味着什么?
PS:字符串都是UTF8編碼的,這可能是個問題嗎?
編輯:
該數組包含以下內容:
Array (
[dossier] => 002A
[permis] =>
[adresse] => 18, rue Bellevue
[ville] => Ste-Anne-des-Lacs (Québec)
[province] =>
[code_postal] => J0R 1B0
[numero_centrale] => N/A
[routes] => De la Gare, droite chemin Avila jusqu'au bout et droite chemin Ste-Anne-des-lacs sur 1,8 km et droite sur Bellevue.
)
您的數組具有字符串鍵,但是您正在檢查/分配數字鍵。 就像@nickb指出的那樣,每次添加數字鍵時, count($values)
增加1,因此會有無限循環。 因此,內存耗盡。
檢查調試器,或者更好的方法是,切換到foreach
循環或array_*
函數之一( array_walk()
, array_map()
等,具體取決於您要執行的操作)。
@Jeremy正確地指出您不應該使用addslashes()
來轉義字符串。 查看mysqli_real_escape_string()
(正如他所建議的),或者更好的是,請考慮使用PDO
。
嘗試改用array_walk 。
另外,不要指望每個循環。 在將計數放入循環條件中之前獲取計數。 由於這是針對數據庫的,因此您實際上應該使用: mysqli_real_escape_string
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.