Archive

Archive for the ‘mod_rewrite’ Category

Site verification over mod_rewrite or error 404 redirect

May 6th, 2008

Ένας τρόπος για να ελέγχεις αν ανήκει ένα domain σε κάποιον, είναι να του ζητήσεις να βάλει ένα αρχείο (zero byte) στον docroot του site του, όπως γίνεται στο google html verification. Αυτό είναι εύκολο να το ελέγξεις με php χρησιμοποιώντας την fopen ή την fsockopen. Τι γίνεται όμως αν υπάρχει rewrite module για να έχει friendly urls (seo) ή error 404 με redirect σε κάποια άλλη σελίδα (παλιά τεχνική – σήμερα αποφεύγεται για διάφορους λόγους). Σε αυτές τις δύο περιπτώσεις, χωρίς να υπάρχει το αρχείο, ο έλεγχος θα βρίσκει ότι υπάρχει. Η λύση είναι πολύ απλή, ανοίγουμε το connection και διαβάζουμε τα raw data. Αν δεν υπάρχει η σελίδα το connection θα αποτύχει. Αν όμως πετύχει το connection τότε θα πρέπει να μην υπάρχουν καθόλου raw data.

function url_valid($url) {
	$found=true;
	$fp=@fopen($url,"r");
	if ($fp) {
		if (fgetc($fp)) $found=false;
		fclose($fp);
	} else
		$found=false;
	return $found;
}

mod_rewrite, php ,

How to create thumbs with mod_rewrite, php and gd2

May 2nd, 2008

Σε συνεργασία με τον Παρασκευά Σμυρλάκη, υπεύθυνο του τμήματος Seo Development της εταιρείας Netwerk, σκεφτήκαμε ένα έξυπνο τρόπο για να φτιάχνεις thumbs on the fly σε μία gallery από φωτογραφίες. Εκμεταλλευτήκαμε τις δυνατότητες του mod rewrite, για να ελέγχουμε αν υπάρχει το thumb αρχείο στον δίσκο, και αν δεν υπάρχει να το κατευθύνουμε σε ένα php script που με την σειρά του το δημιουργεί.

Ποιο συγκεκριμένα έχουμε μία σελίδα που θέλουμε να δημιουργήσουμε ένα thumb στο html δίνουμε απλά την διαδρομή του thumb <img src=”/photos/thumb/demo.jpg” />.

Αυτό που χρειάζεται είναι ένα .htaccess στο folder thumb με το παρακάτω.

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /thumb.php?ph=$1&w=100&h=100&q=70 [L,QSA]

Για όσους δεν το καταλάβανε, ελέγχουμε αν είναι file ή folder με τα RewriteCond και αν δεν είναι το κατευθύνουμε με RewriteRule στο thumb.php με παραμέτρους το $ph το όνομα του αρχείου και $w & $h το μέγεθος του thumb και $q την ποιότητα του jpeg.

Το php script thumb.php κατασκευάζει το thumb μεγέθους ($w x $h), χρησιμοποιώντας το php extension για gd2. Διαβάζει από το /photos/normal/ την μεγάλη φωτογραφία δημιουργεί το thumb και το αποθηκεύει στον φάκελο /photos/thumb/ με το όνομα που έχει περάσει στην μεταβλητή $ph. Επειδή αυτό το script τρέχει μέσα από το img tag, επιστρέφει με header για jpeg και τα raw data του thumb.

<?php
header("Content-type: image/jpeg");
$imNormal=ImageCreateFromString(file_get_contents("photos/normal/".$_GET['ph']));
$imThumb=ImageCreateTrueColor($_GET['w'],$_GET['h']);
ImageCopyResampled($imThumb,$imNormal,0,0,0,0,$_GET['w'],$_GET['h'],ImageSX($imNormal),ImageSY($imNormal));
ImageJpeg($imThumb,"photos/thumbs/".$_GET['ph'],$_GET['q']);
ImageJpeg($imThumb,"",$_GET['q']);
ImageDestroy($imNormal);
ImageDestroy($imThumb);
?>

Εμείς πάντως κάναμε ένα ακόμα βήμα παραπέρα, και με δύο .htaccess καταφέραμε κάτι ακόμα ποιο advanced. Το αφήνω στην φαντασία σας.

mod_rewrite, php