<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Advanced Programming Stories &#187; nuSOAP</title>
	<atom:link href="http://developstories.gr/cat/nusoap/feed/" rel="self" type="application/rss+xml" />
	<link>http://developstories.gr</link>
	<description>advanced web development techniques &#38; reverse engineering stories</description>
	<lastBuildDate>Tue, 27 Jul 2010 12:57:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Google trace script</title>
		<link>http://developstories.gr/php/google-trace-script/</link>
		<comments>http://developstories.gr/php/google-trace-script/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 11:18:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[nuSOAP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[search engine optimization]]></category>

		<guid isPermaLink="false">http://developstories.gr/?p=64</guid>
		<description><![CDATA[Ένα απο τα θέματα που μας ενδιαφέρουν σχετικά με το search engine optimization, είναι το κάθε πότε κάνει crawl το google το site μας. Ειδικότερα θέλουμε να δούμε &#8211; κυρίως για εγκυκλοπαιδικούς λόγους &#8211; πόσος καιρός μεσολαβεί απο ένα crawl μέχρι την παρουσία μιας σελίδας στο index.
Με αυτές τις απορίες κατά νου αποφασίσαμε να δημιουργήσουμε [...]]]></description>
			<content:encoded><![CDATA[<p>Ένα απο τα θέματα που μας ενδιαφέρουν σχετικά με το <a href="http://developstories.gr/cat/seo/">search engine optimization</a>, είναι το κάθε πότε κάνει crawl το google το site μας. Ειδικότερα θέλουμε να δούμε &#8211; κυρίως για εγκυκλοπαιδικούς λόγους &#8211; πόσος καιρός μεσολαβεί απο ένα crawl μέχρι την παρουσία μιας σελίδας στο index.</p>
<p>Με αυτές τις απορίες κατά νου αποφασίσαμε να δημιουργήσουμε ένα απλό scriptάκι το οποίο απλά καταγράφει κάθε valid request του google. To script είναι πάρα πολύ απλό, ωστόσο ελπίζω να σας χρησιμέψει.</p>
<h3>Το Google script</h3>
<p>Καταρχήν χρειαζόμαστε ένα mysql database που θα κρατάει τα δεδομένα μας. Στην προκειμένη περίπτωση δημιουργήσαμε ένα database με όνομα &#8220;google_spy&#8221; και τρέξαμε το παρακάτω SQL για να δημιουργηθεί ο πίνακας που θα κρατάει τα δεδομένα:</p>
<pre class="brush: sql;">
CREATE TABLE IF NOT EXISTS `trace` (
  `TraceID` int(10) unsigned NOT NULL auto_increment,
  `Domain` varchar(100) NOT NULL default '',
  `Time` datetime NOT NULL default '0000-00-00 00:00:00',
  `Bot` varchar(100) NOT NULL default '',
  `Url` text NOT NULL,
  PRIMARY KEY  (`TraceID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
</pre>
<p>Παρακάτω είναι το php script που κάνει την δουλειά:</p>
<pre class="brush: php;">
&lt;?
php
define ('GOOGLE_AGENT','Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)');

//A few settings for the script:

$db_host = 'localhost';

$db_user = 'user';

$db_pass = 'password';

function googlebot($ip)  {

  $bot = 'googlebot.com';

  $name = gethostbyaddr($ip);

  if ($name == $ip) return false;

  return (strpos($name, $bot) !== false and gethostbyname($name) == $ip) ? true : false;

}

if ($_SERVER['HTTP_USER_AGENT']==GOOGLE_AGENT &amp;amp;amp;amp;&amp;amp;amp;amp; googlebot($_SERVER['REMOTE_ADDR'])) 

{

	$url='http://'.$_SERVER['HTTP_HOST'];

	if ($_SERVER['REQUEST_URI']) $url.=$_SERVER['REQUEST_URI'];

	$url_u8=iconv('Windows-1253','UTF-8',$url);

	if (crc32($url)==crc32(iconv('UTF-8','Windows-1253',$url_u8))) $url=$url_u8;

	$url=urldecode($url);

	$sql =&quot;INSERT LOW_PRIORITY INTO `google_spy`.`trace` SET `Domain`='&quot;.$_SERVER['HTTP_HOST'].&quot;',`Time`='&quot;.date('Y-m-d H:i:s').&quot;',&quot;;

	$sql.=&quot;`Bot`='&quot;.gethostbyaddr($_SERVER['REMOTE_ADDR']).&quot;',`Port`='&quot;.$_SERVER['REMOTE_PORT'].&quot;',`Url`='$url'&quot;;

	$con=mysql_connect($db_host,$db_user,$db_pass);

	mysql_query(&quot;SET NAMES 'utf8'&quot;,$con);

	mysql_query($sql,$con);

	mysql_close($con);

}

?&gt;
</pre>
<p>Για να το χρησιμοποιείσετε απλώς αλλάξτε τα settings στην αρχή ($db_host, $db_user, $db_pass) και κάντε include το script σε οποιοδήποτε site θέλετε να κρατάτε logs. Σημειώστε οτι το script κρατάει μία εγγραφή ανα visit (που προέρχεται απο το google) οπότε καλό θα είναι να σβήνετε τα δεδομένα ανα τακτά χρονικά διαστήματα.</p>
<p>Αν κάνετε κάποια μετατροπή ή δημιουργήσετε ένα όμορφο interface για το scriptάκι μήν διστάσετε να το μοιραστείτε μαζί μας <img src='http://developstories.gr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://developstories.gr/php/google-trace-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nusoap persistent connection</title>
		<link>http://developstories.gr/php/nusoap-persistent-connection/</link>
		<comments>http://developstories.gr/php/nusoap-persistent-connection/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 09:36:12 +0000</pubDate>
		<dc:creator>thek</dc:creator>
				<category><![CDATA[nuSOAP]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://developstories/?p=10</guid>
		<description><![CDATA[Ένας από του ελληνικούς καταλόγους που θέλω να καταχωρεί αυτόματα το seo tool είναι και το topsites.gr. Για μένα είναι ο καλύτερος ελληνικός κατάλογος, αλλά δεν είναι ο δημοφιλέστερος. Το topsites.gr το έχει ένας φίλος, ο Νίκος Παπανώτας, ο οποίος μου επέτρεψε να φτιάξω ένα web service, για να το χρησιμοποιήσω για την καταχώριση των [...]]]></description>
			<content:encoded><![CDATA[<p>Ένας από του ελληνικούς καταλόγους που θέλω να καταχωρεί αυτόματα το <a href="http://en.wikipedia.org/wiki/Search_engine_optimization">seo tool</a> είναι και το <a href="http://www.topsites.gr/">topsites.gr</a>. Για μένα είναι ο καλύτερος ελληνικός κατάλογος, αλλά δεν είναι ο δημοφιλέστερος. Το <a href="http://www.topsites.gr/">topsites.gr</a> το έχει ένας φίλος, ο <a href="http://www.webdigity.com/">Νίκος Παπανώτας</a>, ο οποίος μου επέτρεψε να φτιάξω ένα <a href="http://en.wikipedia.org/wiki/Web_service">web service</a>, για να το χρησιμοποιήσω για την καταχώριση των <a href="http://en.wikipedia.org/wiki/Website">web sites</a>.</p>
<p>Ξεσκονίζοντας τους κώδικες για τα web service θυμήθηκα ένα πρόβλημα που είχα συναντήσει με τον <a href="http://www.smart-publisher.gr/">smart-publisher</a>, ένα <a href="http://en.wikipedia.org/wiki/Open_source">open source</a> project που έχω αναπτύξει και ανήκει στην εταιρεία <a href="http://www.netwerk.gr/">netwerk</a> την οποίας τυχαίνει να είμαι ένα από τα ιδρυτικά στελέχη της. Ο smart-publisher είναι μια <a href="http://en.wikipedia.org/wiki/Web_application">web based</a> εφαρμογή σε <a href="http://www.php.net/">php</a> οι οποία βρίσκει τις διαφορές σε αρχεία &amp; <a href="http://en.wikipedia.org/wiki/Database">database</a> (<a href="http://www.mysql.com/">mysql</a>), ανάμεσα σε ένα <a href="http://en.wikipedia.org/wiki/Web_development">development</a> και σε ένα production server και τις κάνει <a href="http://en.wikipedia.org/wiki/Wikipedia:Upload">upload</a>. Η επικοινωνία μεταξύ των δύο servers γίνεται με web service. Επειδή το web service αυτό μεταφέρει μεγάλη πληροφορία, για να κάνει το compare και στην συνέχεια το publish, ανοίγει πολλαπλά <a href="http://en.wikipedia.org/wiki/HTTP">connections</a> με αποτέλεσμα κάποια από αυτά να κλείνουν δημιουργώντας προβλήματα. Αυτό οφείλεται στο γεγονός ότι μπορεί να κοπεί η σύνδεση είτε από το <a href="http://en.wikipedia.org/wiki/Firewall_%28networking%29">firewall</a> (πχ. προστασία για <a href="http://en.wikipedia.org/wiki/Denial-of-service_attack">dos attack</a>) στον server είτε από ένα <a href="http://en.wikipedia.org/wiki/Cisco_Systems">cisco</a> συστημένο έτσι, ώστε να προσφέρει αυξημένη προστασία στο client.</p>
<p>Για τα web service χρησιμοποιώ το <a href="http://sourceforge.net/projects/nusoap/">Nusoap</a> project, και την λύση στο παραπάνω πρόβλημα την έδωσα προσθέτοντας στο soapclient μεγαλύτερο χρόνο ανταπόκρισης στα <a href="http://en.wikipedia.org/wiki/Socket">sockets</a> (<a href="http://en.wikipedia.org/wiki/Internet_socket">timeout</a> &amp; response timeout) και κρατώντας το ίδιο connection (<a href="http://en.wikipedia.org/wiki/HTTP_persistent_connection">HTTP Persistent Connection</a>).</p>
<p><span style="text-decoration: underline;">Nosoap Definition:</span><br />
<span style="font-size: 85%;">function soapclient($endpoint,$wsdl = false,$proxyhost = false,$proxyport = false,$proxyusername = false, $proxypassword = false, $timeout = 0, $response_timeout = 30)</span></p>
<p><span style="text-decoration: underline;">Πριν:</span><br />
<span style="font-size: 85%;">$SoapClient=new soapclient($endpoint);</span></p>
<p><span style="text-decoration: underline;">Μετά:<br />
</span><span style="font-size: 85%;">$SoapClient=new soapclient($endpoint, false, false, false, false, false, <strong>10</strong>,<strong> 600</strong>);<br />
$SoapClient-&gt;<strong>useHTTPPersistentConnection</strong>(); </span></p>
]]></content:encoded>
			<wfw:commentRss>http://developstories.gr/php/nusoap-persistent-connection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
