Öngörülemeyen günlük dosyası PHP yazma

2 Cevap php

Ben bir "Tweet girişken" uygulama için her iki dakikada bir çalışan bir komut dosyası var. Özetle bu Facebook üzerine tweet'leri koyar. Her şimdi ve sonra hıçkırık ve benim hata kontrolü rağmen, sürekli olarak her iki dakikada bir (o döngü bir cron işi olarak yürütülüyor) eski tweet'leri reposts. Ben teoride benim burada ne oluyor belirlemenize yardımcı olacak bir Log.txt var, ama sorun iş çalıştıran her zaman için yazılmaktadır değildir. İşte kod:

<?php
$start_time = microtime();
require_once //a library and config
$facebook = new Facebook($api_key, $secret);
get_db_conn(); //returns $conn

$hold_me = mysql_fetch_array(mysql_query("SELECT * FROM `stats`"));
$last_id_posted = $hold_me[0]; //the status # of the most recently posted tweet

$me = "mytwittername";
$ch = curl_init("http://twitter.com/statuses/friends_timeline.xml?since_id=$last_id_posted");
curl_setopt($ch, CURLOPT_USERPWD, $me.":".$pw); 				
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xs = curl_exec($ch);
$data = new SimpleXMLElement($xs);
$latest_tweet_id = $last_id_posted;
$uid = get_uid(); //returns an array of facebookID->twittername
$user_count = count($uid);
curl_close($ch);

$total_tweets = 0;
$posted_tweets = 0;
foreach ($data->status as $tweet) { 
$name = strtolower($tweet->user->screen_name);

if (array_key_exists($name, $uid)) {
		$total_tweets += 1;
		// $name = Twitter Name
		$message = $tweet->text;
		$fbid =  $uid[$name];
		theposting($name,$message,$fbid); //posts tweet to facebook
		$this_id = $tweet->id;
		if ($this_id > $latest_tweet_id) {
			$latest_tweet_id = $this_id;
		}
	}	
}
mysql_query("UPDATE stats SET lasttweet='$latest_tweet_id'");
commit_log(); //logs to a txt file how many tweets posted, how many users, execution duration, and time of execution
?>

Yani teoride günlük bir dize "# 3326415954 yana tüm çağrıldı. # 3526415953 Güncelleme Ağustos 2009 10:41:32 Pazartesi 24.. 8 kullanıcıları. 0,086057 milisaniye sürdü. 20. tweets arasından 14 gönderildi." çizgiler. Bazen olsa da, bir anda iki veya üç saat atlayın ve aynı tweet birden fazla kopya ile bu süre içinde o olacak "spam" insanların facebook sayfaları. Benim kod kırma ne olabileceğini söyleyemem, ama benim şüphe twitter kötü XML. Tüm bu benim ucunda nispeten düşük trafik var, o yüzden benim sunucu falan yüklenme ediyorum şüpheliyim. Log.txt şu anda 50kb olduğunu ve onu yavaşlatan büyük bir dosya değil bu yüzden son, ~ 35kb at "kırdı" ... Herhangi bir düşünce mutluluk duyacağız!

2 Cevap

Ben senaryoyu geliştirmek için yapacağı ilk şey cURL hataları curl_errno & kontrol etmek curl_error. Şey sizin bozuk XML teori doğru ise oradan olacaktır yanlış gidiyor eğer şansı vardır. Ayrıca cURL ve PHP için bir zaman aşımı belirtmek isteyebilirsiniz.

Ben SimpleXML kullanılabilir kütüphane değil, ama iyi-oluşmuş değil eğer hatalı biçimlendirilmiş XML için bir onay yokmuş gibi gözüküyor, bir E_WARNING üretmek gerekir.

Bu 2 bit herhangi tehlikeli bir veriyi elminate gerekir.

Diğer işlevleri görmeden o yanlış gidiyor olabilir herhangi bir diğer potansiyel yerleri görmek için biraz zor.

Eğer veritabanı sorgu başarılı olduğunu emin olmak için test edilmelidir.

Eğer zaten satırın kalanını atıyor beri, sizin SQL seçeneğini yalnızca $last_id_posted seçmeyi deneyin.

$last_id_posted varsayılan değeri yok. ? Since_id = beklenen sonucu nedir

Db / yanıt kıvırmak ve durumunu dizgeleştirir Log dosyası içine XML ve dökümü.