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('ò', 'ª', 'º', '', '<br>', 'Ã', 'Å', 'Å', 'ö', 'ü',
'ý', 'ä', 'Å', 'ò', 'Ã', 'ç', 'ç', 'Â', 'ž', 'â', '');
$b = array('ň', 'Ş', 'ş', ' ', ' ', 'Ö', 'Ş', 'ş', 'ö', 'ü',
'ý', 'ä', 'ň', 'ň', 'Ý', 'ç', 'Ç', '', 'ž', '', '');
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 <[email protected]> şöyle yazıyor:
Kimden: Atıf CEYLAN <[email protected]>
Konu: [Linux-programlama] Re: PHP bellek kullanımı
Kime: "Özgür yazılımlarla çeşitli dillerde yazılım geliştirme"
<[email protected]>
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
<[email protected]> 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
_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php