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('ò', 'ª', 'º', '---', '
', 'Ã--', 'Åz(', 'ÅY"', 'ö', 'ü', 'ý', 'ä', 'Å^', 'ò',
'Ã?', 'ç', 'ç', 'Â', 'ž', 'âEUR', 'oe');
$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="
<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