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