Merhaba,

Unset satırlarıdan sonra bu değişkenlerin değerlerini enrana yazdırıp silinip silinmediğini kontrol etmeyi denediniz mi acaba?

Ben, $html adlı değişkenin değerinin silinemiyor olduğundan şüpheleniyorum.

Selamlar,
Nuri Akman

15.12.2010 12:20, Atıf CEYLAN yazmış:

Hocam okudugunuz icerik 100 kb olsa ve surekli append etseniz 200 mb eder. eger kodun devami vs.. yoksa burada kesinlikle bir buglik durum var diyebilirim.

ozelden kodu ve linkleri gonderebilirseniz farkli version phpler var elimde deneyebilirim.

On Wed, 15 Dec 2010 10:03:16 +0000 (GMT), Guychmyrat Amanmyradov <[email protected]> wrote:


Merhaba. açıkçası ben de anlamadım. unsetler neden yok etmiyor. Aslında ilk önce $sonuc = ""; şeklinde denedim ama olmadı. Sonra kesin olsun diye unset yaptım. Ama bellek her while girişinde şişiyor ve kilitleniyor.

Problem bir şekilde o değerler bellekten silinememesi.

$linkObj'de herhangi bişey yok. Hadi olsa bile 250 defa çağırıldığında belleği doldurması imkansız. Çünkü orada yağtığım işlem şunlar :

    public function removeUndefinedChars($str)
    {
        $a = array('ò', 'ª', 'º', '?', '
', 'Ã?', 'Å?', 'Å?', 'ö', 'ü', 'ý', 'ä', 'Å?', 'ò', 'Ã?', 'ç', 'ç', 'Â', 'ž', 'â?', '?'); $b = array('n(', 'Ş', 'ş', ' ', ' ', 'Ö', 'Ş', 'ş', 'ö', 'ü', 'y'', 'ä', 'n(', 'n(', 'Y'', 'ç', 'Ç', '', 'z(', '', '');

        return str_replace($a, $b, $str);
    }

    public function convertToDobuleDigit($number)
    {
        $doubledigitnumbers = array(
                                     '1'=>'01',
                                     '2'=>'02',
                                     '3'=>'03',
                                     '4'=>'04',
                                     '5'=>'05',
                                     '6'=>'06',
                                     '7'=>'07',
                                     '8'=>'08',
                                     '9'=>'09'
                              );

        if(in_array($number, $doubledigitnumbers))
                return $doubledigitnumbers[$number];
        else
            return $number;
    }


Ayrıca classın başında bir değişken de tanımlamadım. Problem web sayfaları okuduğumda haliyle çok veri geliyor ve o verileri bellekten atamaması. Şimdi başka bir yöntem ile halledeceğim onu. Bir tabloya tüm linkleri yazıp tek tek çağırma yöntemini kullanmayı düşünüyorum. Böyle bir probleme neden olan şeyi anlayamadım.

--- *15/12/10 Çar tarihinde Atıf CEYLAN //* şöyle yazıyor:


    Kimden: Atıf CEYLAN
    Konu: [Linux-programlama] Re: PHP bellek kullanımı
    Kime: "Özgür yazılımlarla çeşitli dillerde yazılım geliştirme"
    Tarihi: 15 Aralık 2010 Çarşamba, 11:49

    Merhaba,

    hocam baska bir sorun vardir. bir web sayfasinin bellegi
    tasirabilecek kadar contenti olmasi cok anlamsiz.

    unset degiskeni yok eder. Yok ederken (bir bag yoksa) datayi da
    yok etmesi gerekir. dilerseniz unset yapmayin ve en sondaki
    unsetleri silip yerine degiskenleri  $sonuc = ""; gibi set edin.
    halen sorun oluyorsa $linkObj objenizi kontrol edin. recursive
    veya static islemler/degiskenler kalmis olabilir/

    On Wed, 15 Dec 2010 08:37:06 +0000 (GMT), Guychmyrat Amanmyradov
    wrote:

        Merhabalar.
        Aşağıdaki gibi kodum var. Yaptığı işlem bir gazeteden sürekli
        olarak haberleri çekip belli bir kısmını veritabanına yazmak.
        Ben değişkenleri while içinde unset yapıp tekrar oluştursam
        da sanırım bellekten silmiyor bunu. Haliyle bellek şişiyor.

        Eğer
         ini_set('memory_limit', '512M');

        kullanırsam 512 dolduruyor ve program duruyor. Bellek doldu
        diye. Eğer onu kullanmaz isem bilgisayar kullanılamaz hale
        geliyor, yani belleği dolduruyor ve sonra tüm bilgisayar
        belleği bitince duruyor.

        Bunu nasıl kontrol edebilirim acaba?

        Şimdiden teşekkürler.



           for($i = 1; $i <2000; $i++)
           {
                        $currentLink  = "";
                        $html = "";
                        $counter = 0;
                        $result[] = "";
                        $sonuc = "";

                        $currentLink =
        "http://www.abc.com/?newsId=".$linkObj->convertToDobuleDigit($i);

                        $html = file_get_html($currentLink);



                        if ( preg_match("/font
        class=\"detail-spot\">/i", $html)) {



foreach($html->find('font[class=detail-spot]') as $e)
                            {
                               $sonuc .=
        preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n",
        $e->innertext);

                            }

                            $time = date('y-m-d H:i:s',
        strtotime("now"));
                            mysql_query("insert into ztext(content,
link, time) Values('" . $linkObj->removeUndefinedChars( addslashes( $sonuc ) ). "', '".$currentLink."', '".$time."') ");


                            echo "yazilanlink :  ".$currentLink." \n\t";


                        }
                        else
                        {
                            $lastlinkok = false;
                           echo "currentlink : ".$currentLink." \n\t";
                        }

                       unset($counter);
                       unset($currentLink);
                       unset($html);
                       unset($sonuc);

                       echo
        "---------------------------------------------------";
                       echo "Using ", memory_get_peak_usage(1), "
        bytes of ram.";


           }


--
    /**
      *...@author*  Atıf CEYLAN
      * Software Developer&  System Admin
      * http://www.atifceylan.com
      */


    -----Satır İçi Eki Var-----

    _______________________________________________
    Linux-programlama mailing list
    [email protected]
    https://liste.linux.org.tr/mailman/listinfo/linux-programlama
    Liste kurallari: http://liste.linux.org.tr/kurallar.php


--
/**
  *...@author*  Atıf CEYLAN
  * Software Developer&  System Admin
  * http://www.atifceylan.com
  */


_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php
_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap