°Ù·Ö°ÙÔ´ÂëÍø-Èý¨Õ¾±äµÃÈç´Ë¼òµ¥£¡ µÇ¼ ×¢²á Ç©µ½Áì½ð±Ò£¡

Ö÷Ò³ | ÈçºÎÉý¼¶VIP | TAG±êÇ©

µ±Ç°Î»ÖÃ: Ö÷Ò³>ÍøÕ¾½Ì³Ì>ÍøÒ³ÖÆ×÷> ½â¾öPHPÀïÅúÁ¿Êý¾ÝÂÖ»ØʱÄÚ´æºÄ¾¡ÌâÄ¿µÄ°ì·¨
·ÖÏíÎÄÕµ½£º

½â¾öPHPÀïÅúÁ¿Êý¾ÝÂÖ»ØʱÄÚ´æºÄ¾¡ÌâÄ¿µÄ°ì·¨

·¢²¼Ê±¼ä£º09/01 À´Ô´£ºÎ´Öª ä¯ÀÀ£º ¹Ø¼ü´Ê£º

Ïà¹ØѧϰÒý¼ö£ºphp±à³Ì£¨ÊÓƵ£©

±ÈÀ´ÔÚ¿ª·¢Ò»¸öPHP³ÌÐòʱÅöµ½ÁËÏÂÃæµÄ´íÎó£º

PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted

´íÎóÐÅÏ¢ÏÔʾͬÒâµÄ×î´óÄÚ´æÒѾ­ºÄ¾¡¡£Åöµ½ÕâÑùµÄ´íÎóÆð³õÈÃÎҺܾª²ï£¬µ«×ªÑÛÒ»Ï룬Ҳ²»¾ªÆ棬ÓÉÓÚÎÒÕýÔÚ¿ª·¢µÄÕâ¸ö³ÌÐòÊÇÒªÓÃÒ»¸öforeachÂÖ»ØÓï¾äÔÚÒ»¸öÓÐ4Íò±Ê¼Ç¼µÄ±íÀïÈ«±íËÑË÷¾ßÓÐÌض¨ÌصãµÄÊý¾Ý£¬Ò²¾ÍÊÇ˵£¬Ò»´ÎÒª°Ñ4ÍòÌõÊý¾ÝÈ¡³ö£¬È»ºóÖðÌõ¼ì²éÿÌìÊý¾Ý¡£²»ÑÔ¶øÓ÷£¬4ÍòÌõÊý¾ÝÈ«²¿¼ÓÔص½ÄÚ´æÖУ¬ÄÚ´æ²»±¬²Å¹Ö¡£

¾¿¾¹±à³ÌÕâô¶àÄ꣬ÎÒÒþÔ¼¼ÇµÃPHPÀ﹩¸øÓзÇÒ»´ÎÈ«²¿¼ÓÔØÊý¾ÝµÄAPI£¬ÊÇÏñ´¦ÖÃÁ÷ýÌåÄÇÑù£¬ËæÓÃËæÈ¡Ë涪¡¢Êý¾Ý²¢²»»á»ý´æÔÚÄÚ´æµÄ²éѯ°ì·¨¡£¾­¹ý¼ò±ãµÄËÑË÷£¬¹«È»ÔÚ¹Ù·½ÍøÕ¾ÉÏÑ°µ½µÄ׼ȷµÄÓÃ;¡£

Õâ¸öÎÊÌâÔÚPHPµÄ¹Ù·½ÍøÕ¾ÉϽлº³å²éѯºÍ·Ç»º³å²éѯ(Buffered and Unbuffered queries)¡£PHPµÄ²éѯȱʡģʽÊÇ»º³åģʽ¡£Ò²¾ÍÊÇ˵£¬²éѯÊý¾Ý½á¹û»áÒ»´ÎÈ«²¿ÌáÈ¡µ½ÄÚ´æÀ﹩PHP³ÌÐò´¦Öá£ÕâÑù¸øÁËPHP³ÌÐò¶îÍâµÄ¹¦Ð§£¬±È·½Ëµ£¬ÔËËãÐÐÊý£¬½«Ö¸ÕëÖ¸ÏòijһÐеȡ£¸üÖØÒªµÄÊdzÌÐò¿ÉÒÔ¶ÔÊý¾Ý¼¯Öظ´Í£Ö¹¶þ´Î²éѯºÍ¹ýÂ˵ȲÙ×Ý¡£µ«ÕâÖÖ»º³å²éѯģʽµÄȱÏݾÍÊǺÄËðÄڴ棬Ҳ¾ÍÊÇÓÿռ任Ëٶȡ£

Ïà¶ÔµÄ£¬±ðµÄÒ»ÖÖPHP²éѯģʽÊÇ·Ç»º³å²éѯ£¬Êý¾Ý¿âЧÀÍÆ÷»áÒ»ÌõÒ»ÌõµÄ·µ»ØÊý¾Ý£¬¶ø²»ÊÇÒ»´ÎÈ«²¿·µ»Ø£¬ÕâÑùµÄ½á¹û¾ÍÊÇPHP³ÌÐòºÄËð½ÏÉÙµÄÄڴ棬µ«È´ÔöÌíÁËÊý¾Ý¿âЧÀÍÆ÷µÄѹÁ¦£¬ÓÉÓÚÊý¾Ý¿â»á²»¶ÏµÈºòPHPÀ´È¡Êý¾Ý£¬²»¶Ïµ½Êý¾ÝÈ«²¿È¡Íê¡£

ºÜÃ÷ÏÔ£¬»º³å²éѯģʽÊÊÓÃÓÚСÊý¾ÝÁ¿²éѯ£¬¶ø·Ç»º³å²éѯ˳ӦÓÚ´óÊý¾ÝÁ¿²éѯ¡£

¹ØÓÚPHPµÄ»º³åģʽ²éѯ´ó¼Ò¶¼ÖªµÀ£¬ÏÂÃæÁоٵÄÀý×ÓÊÇÔõÑùÊ©Ðзǻº³å²éѯAPI¡£

·Ç»º³å²éѯ°ì·¨Ò»: mysqli

<?php
$mysqli  = new mysqli("localhost", "my_user", "my_password", "world");
$uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);

if ($uresult) {
   while ($row = $uresult->fetch_assoc()) {
       echo $row['Name'] . PHP_EOL;
   }
}
$uresult->close();
?>

·Ç»º³å²éѯ°ì·¨¶þ: pdo_mysql

<?php
$pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

$uresult = $pdo->query("SELECT Name FROM City");
if ($uresult) {
   while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
       echo $row['Name'] . PHP_EOL;
   }
}
?>

·Ç»º³å²éѯ°ì·¨Èý: mysql

<?php
$conn = mysql_connect("localhost", "my_user", "my_pass");
$db   = mysql_select_db("world");

$uresult = mysql_unbuffered_query("SELECT Name FROM City");
if ($uresult) {
   while ($row = mysql_fetch_assoc($uresult)) {
       echo $row['Name'] . PHP_EOL;
   }
}
?>

°Ù·Ö°ÙÔ´ÂëÍøÍøÓÑͲۣº

Õâ¸ö¶«Î÷Ó¦µ±ÓÃÉú³ÉÆ÷

ÕâÖÖд·¨ ¿ÉÒÔÖ±½Ó¿ªµôÁË

´¦ÖôóÊý¾Ý²»³ÉÄÜÒÀÕÕÄÇÖÖд·¨Ð´µÄ

PHPÖÐÎÄÍøÍøÓÑС³Â¸ø³öÁËÒ»¸ö׼ȷµÄ·½Ê½

<?php

if (!function_exists('getYieldBigData')) {
    /**
     * ʹÓÃÉú³ÉÆ÷·µ»ØÉú³ÉÆ÷¶ÔÏó
     * @param array $data
     * @return Generator
     */
    function getYieldBigData($data = [])
    {
        foreach ($data as $tmp_data) {
            yield $tmp_data;
        }
        unset($tmp_data);
    }
}


if (!function_exists('foreachBigData')) {
    /**
     * ÂֻشóÁ¿Êý¾ÝʹÓÃÉú³ÉÆ÷À´ÖÆÔìÖµ
     * @param array $data
     * @return array|false
     */
    function foreachBigData($data = [])
    {
        if (0 == count($data)) {
            return false;
        }
        $tmp = [];
        foreach (getYieldBigData($data) as $v) {
            $tmp[] = $v;
        }
        unset($v);
        return $tmp;
    }
}

//µ÷È¡°ì·¨
/**
 * @var $data array
 */
$data = [];
/**
 * @var $ret array
 */
$ret = foreachBigData($data);

return $ret;

С°×Ò²ÄÜ¿´µÃ¶®¹þ£¡

0.png

ÈçÉÏ£¬´ËÖÖ·½Ê½¿ÉÒÔµ½´ï100Íò/´Î£¡

±¾ÎÄÀ´×Ô°Ù·Ö°ÙÔ´ÂëÍøphpͼÎĽ̳ÌƵµÀ£¬Ô­×÷Õߣº Õ½ÉñÎò¿Õ £¬°Ù·Ö°ÙÔ´ÂëÍø¶þ´Î±à×ë¡£

ÒÔÉϾÍÊǽâ¾öPHPÀï´óÁ¿Êý¾ÝÂÖ»ØʱÄÚ´æºÄ¾¡ÎÊÌâµÄ°ì·¨µÄ¾ßÌåÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢°Ù·Ö°ÙÔ´ÂëÍøÆäËüÏà¹ØÎÄÕ£¡

´òÉÍ

´òÉÍ

È¡Ïû

¸ÐлÄúµÄÖ§³Ö£¬ÎÒ»á¼ÌÐøŬÁ¦µÄ!

ɨÂëÖ§³Ö
ɨÂë´òÉÍ£¬Äã˵¶àÉپͶàÉÙ

´ò¿ªÖ§¸¶±¦É¨Ò»É¨£¬¼´¿É½øÐÐɨÂë´òÉÍŶ

°Ù·Ö°ÙÔ´ÂëÍø ½¨Òé´òÉÍ1¡«10Ôª£¬ÍÁºÀËæÒ⣬¸ÐлÄúµÄÔĶÁ£¡

¹²ÓÐ150ÈËÔĶÁ£¬ÆÚ´ýÄãµÄÆÀÂÛ£¡·¢±íÆÀÂÛ
êdzƣº ÍøÖ·£º ÑéÖ¤Â룺 µã»÷ÎÒ¸ü»»Í¼Æ¬
×îÐÂÆÀÂÛ

±¾ÎıêÇ©

¹ã¸æÔÞÖú

ÄܳöÒ»·ÖÁ¦ÊÇÒ»·Ö°É£¡

¶©ÔÄ»ñµÃ¸ü¶àÄ£°å

±¾ÎıêÇ©

¹ã¸æÔÞÖú

¶©ÔÄ»ñµÃ¸ü¶àÄ£°å