Vi piaciono le multe?

giugno 16, 2007

A me no 🙂

vi presento un sito che, purtroppo, ho scoperto solo oggi e che vi consiglio vivamente:
Ricorsi

ci sono un sacco di informazioni utili per evitare di pagare multe ingiuste!

Operatore site: di google, script per vedere le pagine non indicizzate

aprile 16, 2007

A richiesta posto uno schifo di script in versione super-beta.
E’ molto macchinoso da utilizzare perchè, visti gli scarsi risultati dell’operatore site: di google (che dopo aver cominciato questo script ho scoperto che non restituisce veramente tutte le pagine indicizzate ma solo la “maggior-parte”), ho smesso di implementarlo

Adesso lo pubblico perchè me lo hanno richiesto, se farete delle prove e mi dite che invece l’operatore site: è affidabile continuo a svilupparlo per renderlo qualcosa di quantomeno decente 🙂

Vi sipego quello che c’è da fare per utilizzare lo script:
Innanzitutto bisogna creare un file sitemap.txt, da mettere nella stessa cartella dello script. Questo file deve contenere tutte le pagine pubbliche del vostro sito. Insomma deve contenere gli stessi url che mettete nella sitemap di google però in questo formato:
http://www.miosito.it/
http://www.miosito.it/pagina1.html
http://www.miosito.it/pagina2.html
….

Poi, visto che il mio hosting provider mi fa usare fopen solo per i files locali (penso sia un limite di molti) bisogna creare il file prova.html che deve essere creato così:
andate su google, cercate site: http://www.miosito.it/
adesso vedrete i risultati 10 per pagina, meglio vederne 100: sull’indirizzo che si è creato nela barra (http://www.google.it/search?q=site:http://www.miosito.it/&blablabla…blablabla) aggiungete alla fine questo: &num=100
invio, adesso avete 100 risultati per pagina
Clickate con il destro sulla pagina e visualizzate l’html/sorgente della pagina, copiate e incollate con blocco note sul vostro prova.html, andate all’eventuale pagina 2 dei risultati e fate lo stesso, incollando l’html della pagina 2 sotto quello della pagina 1
Salvate prova.html e mettetelo nella stessa cartella dello script e di sitemap.txt

Adesso lanciate lo script, verranno visualizzate: le pagine indicizzate, le pagine di sitemap.txt e infine la differenza…
adesso gentilmente fate così: prendete una decina delle pagine che lo script da per “non indicizzate”, andate su google e cercate il titolo di quella pagina… fatemi sapere se ste pagine ci sono oppure no!
se mi dite che non ci sono continuo a sviluppare questo script, promesso! 😀

ecco lo script:

<?
$site = "http://www.tuosito.it&quot;;

$indexed = array();
$start = $_GET[‘start’];
if($start == "") $start = 0;
$findme = "<a href=\"" . $site;
$findme2 = "class=l";

$page = "prova.html";
$handle = fopen($page, "r") or die("1");
$n = 1;
print("<b>Pagine su google:</b><br>");
if ($handle) {
while (!feof($handle)) {
$string = fgets($handle, 4096);

$pos1 = strpos($string, $findme);
if($pos1 > 0) {
$string1 = substr($string, $pos1+9);
$pos2 = strpos($string1, $findme2);
unset($key);
$key = substr($string1, 0, $pos2-2);
$indexed[] = $key;
echo htmlentities($key);
print(" – $n<br>");
$n++;
}

}
fclose($handle);
}

print("<br><br><br>$n<br><br><br><b>Pagine su sitemap.txt:</b><br>");
$total = array();
$i = 0;
$handle = fopen("sitemap.txt", "r");
if ($handle) {
while (!feof($handle)) {
$string = fgets($handle, 4096);
$string = trim($string);
$i++;
print("$string – $i<br>");
$total[] = $string;
}
fclose($handle);
}

$result = array_diff($total, $indexed);

print("<b>Pagine su sitemap non su google:</b><br><pre>");
print_r($result);

Visualizzare il percorso completo degli utenti nel sito

aprile 9, 2007

Questo script in php/mysql è nato per uso personale, ma visto che mi è stato chiestoe che ho letto su un forum che qualcuno non sapeva come fare lo posto.
Il suo funzionamento è semplicissimo, infatti è veramente scarno! I dati prodotti sono visualizzati senza grafica come l’elenco di tutte le pagine viste, una dopo l’altra ordinate così:
– Giorno ora ingresso, refer, pagina entrata (per ogni singola visita)
– Giorno ora visualizzazione, pagina successiva
– Giorno ora visualizzazione, pagina successiva

in fondo presenta un riepilogo del numero di visite e pagine viste, quante da google e quante da alcuni altri motori e un riepilogo del periodo di riferimento con Giorno: visite, pagineviste | Giorno: visite, paginevista….

Questo è il codice per il database:
potete copiarlo e incollarlo sul vosto database manager (phpmyadmin per esempio)

CREATE TABLE sito_hits (
id int(11) NOT NULL auto_increment,
visit int(11) NOT NULL default ‘0’,
`data` int(11) NOT NULL default ‘0’,
page varchar(250) NOT NULL default ”,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
# ——————————————————–

#
# Struttura della tabella `sito_visits`
#

CREATE TABLE sito_visits (
id int(11) NOT NULL auto_increment,
ip varchar(250) NOT NULL default ”,
giorno int(11) NOT NULL default ‘0’,
`time` int(11) NOT NULL default ‘0’,
refer varchar(255) NOT NULL default ”,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Questo è il codice di vedi-stats.php, che servirà a visualizzare le statistiche:
modificare i parametri di connessione al database, qui sulla seconda riga

<table><?
$link = mysql_connect("DATABASE-HOST", "DATABASE-USER", "DATABASE-PASS");
mysql_select_db("DATABASE-NAME", $link);
$time = mktime();
$time -= 172800;
$query = mysql_query("select sito_visits.ip, sito_visits.giorno, sito_visits.refer, sito_hits.page, sito_hits.time from sito_visits right join sito_hits on sito_visits.id = sito_hits.visit where sito_visits.time>’$time’ order by sito_visits.time DESC");
$current = 0; $visits = 0; $hits = 0; $google = 0; $alice = 0; $arianna = 0; $day = 0;

$v= array();
$h = array();

while($array = mysql_fetch_assoc($query)) {

if($day != $array[giorno]) { print("<tr><td colspan=’4′><hr></td></Tr>"); $day = $array[giorno]; } else { $day = $array[giorno]; }
if($current == $array[ip]) {
$i = $array[time];
$h[$i] = 1;
$hits++;
?>

<tr>
<td><font size=’-1′><?= date("d.m.Y", $array[giorno]); ?></td>
<td><font size=’-1′><?= date("G:i:s", $array[time]); ?></td>
<td><font size=’-1′><?= $array[page] ?></td>

<td><font size=’-1′><?= $array[ip] ?></td>
</tr>
<?
} else {
$current = $array[ip];
$visits++; $hits++;
$i = $array[time];
$v[$i] = 1;
if($array[refer] != "") {
if(eregi(‘google’, $array[refer])) $google++;
if(eregi(‘alice.it’, $array[refer])) $alice++;
if(eregi(‘arianna.libero.it’, $array[refer])) $arianna++;

}
?>
<tr>
<td><?= date("d.m.Y", $array[giorno]); ?></td>

<td><?= date("G:i:s", $array[time]); ?></td>
<td><?= substr($array[refer], 0, 115) ?></td>
<td><?= $array[page] ?></td>
</tr>
<?
} }
?>

</table>
<?
unset($query, $array);
$query = mysql_query("select sito_visits.ip, sito_visits.refer, sito_hits.time from sito_visits right join sito_hits on sito_visits.id = sito_hits.visit where sito_hits.time<=’$time’ order by sito_visits.time DESC");
while($array = mysql_fetch_assoc($query)) {

if($current == $array[ip]) {
$i = $array[time];
$h[$i] = 1;
$hits++;
} else {
$current = $array[ip];
$visits++; $hits++;
$i = $array[time];
$v[$i] = 1;
if($array[refer] != "") {
if(eregi(‘google’, $array[refer])) $google++;
if(eregi(‘alice.it’, $array[refer])) $alice++;
if(eregi(‘arianna.libero.it’, $array[refer])) $arianna++;

}
} }

$tempo = mktime()-1171407600;
$giorni = $tempo / 86400;
$visora = $visits / $giorni;
$gooora = $google / $giorni;
$aliora = $alice / $giorni;
$ariora = $arianna / $giorni;
$hitora = $hits / $giorni;
$giorno = number_format($giorni, ‘0’);

?>
<table cellpadding=’5′>
<caption>14 febbraio <?= number_format($giorni, ‘2’, ‘,’,”) ?></caption>
<tr><td><b>Visits</td><td><?= $visits ?></td><td align=’right’><?= number_format($visora, ‘2’, ‘,’,”) ?></td></tr>

<tr><td><b>Google</td><td><?= $google ?></td><td align=’right’><?= number_format($gooora, ‘2’, ‘,’,”) ?></td></tr>
<tr><td><b>Alice</td><td><?= $alice ?></td><td align=’right’><?= number_format($aliora, ‘2’, ‘,’,”) ?></td></tr>

<tr><td><b>Arianna</td><td><?= $arianna ?></td><td align=’right’><?= number_format($ariora, ‘2’, ‘,’,”) ?></td></tr>
<tr><td><b>Hits</td><td><?= $hits ?></td><td align=’right’><?= number_format($hitora, ‘2’, ‘,’,”) ?></td></tr></table><br><br>

<?
$da = 1171407600;
$a = mktime();
$n = 0;
for($time = $da; $time <= $a; $time += 86400) {
$n++;
$aparz = $time + 86400;
print(" | <b>$n</b>:");
$query = mysql_query("select count(id) from visits where time<=’$aparz’ and time>’$time’");
$dvisits = mysql_result($query, 0);
$query = mysql_query("select count(id) from hits where time<=’$aparz’ and time>’$time’");
$dhits = mysql_result($query, 0);
print("$dvisits , $dhits");
}

Questo è il codice da inserire in stats.php, che andrà inclusa in ogni pagina che volete monitorare:

$link = mysql_connect("DATABASE-HOST","DATABASE-USER","DATABASE-PASS") or die("1");
mysql_select_db("DATABASE-NAME", $link) or die("2");
$time = mktime();
$g = date("d", $time);
$m = date("m", $time);
$a = date("Y", $time);
$giorno = mktime(0,0,0,$m,$g,$a);
$ip = $_SERVER[‘REMOTE_ADDR’];
$page = $_SERVER[‘PHP_SELF’];
$query = mysql_query("select id from sito_visits where ip=’$ip’ and giorno=’$giorno’");
if(mysql_num_rows($query) &gt; 0) {
$id = mysql_result($query, 0);
mysql_query("insert into sito_hits values(”,’$id’,’$time’,’$page’)"); } else {
$refer = $_SERVER[‘HTTP_REFERER’];
$refer = substr($refer, 7);
mysql_query("insert into sito_visits values(”,’$ip’,’$giorno’,’$time’,’$refer’)");
$id = mysql_insert_id();
mysql_query("insert into sito_hits values(”,’$id’,’$time’,’$page’)"); }

Ridimensionare le immagini in PHP, script per creare thumbnail

aprile 1, 2007

Questo script in PHP vi permette di fare l’upload di un immagine e di creare il rispettivo thumbnail con dimensioni proporzionali a quelle originali (basta scegliere la larghezza).

Lo script è abbastanza modificabile e la funzione di generazione dell’immagine ridimensionata è estraibile (e quindi utilizzabile nei vostri scripts).

Un ringraziamento va a A35G per la correzione dello script!

Ecco il codice (fate copia-incolla sul vostro notepad):

<?
# MODIFICARE le 4 variabili qui sotto con le impostazioni del vostro server e il nome del file (31 righe più giù) all’interno del form html

#ATTENZIONE: per funzionare lo script avrà bisogno che le cartelle qui sotto siano accessibili il scrittura, settate gli opportuni permessi

$imgpathbig = "/path/dove/appoggiare/immagine/grande/"; # path assoluto dove lo script appoggerà l’immagine che inviate

$imgurlbig = "http://indirizzo.com/cartella/immagine/grande/&quot;; # url dell’immagine grande, se volete che questa venga visualizzata

$imgpathsmall = "/path/dove/appoggiare/immagine/grande/"; # path assoluto dove lo script creerà l’immagine ridimensionata

$imgurlsmall = "http://indirizzo.com/cartella/immagine/ridimensionata/&quot;; # url dell’immagine piccola

/*
COMPATIBILITA’
$_FILES in 4.1.0, prima $HTTP_POST_FILES
is_uploaded_file, move_uploaded_file, in 4.0.3
rand, senza chiamata a srand in 4.2.0. Se inferiore aggiungere srand((double) microtime() * 1000000);
imagecreatetruecolor in 4.0.6
*/

#questo è un form essenziale per inviare allo script le immagini.
if($_POST["submit"] != "Ridimensiona") {
?>
<html>
<head>

<style>
body{font-family:verdana;font-size:12px}
table{font-family:verdana;font-size:12px}
h1{font-family:verdana;font-size:20px;font-weight:bold}
</style>
<title>Ridimensiona immagine</title>
</head>
<body>
<center>
<h1>Ridimensiona immagine</h1>

<!– MODIFICARE nome-script.php con il nome del file che avete creato –>
<form action="nome-script.php" method="post" enctype="multipart/form-data">
<table border="1" cellpadding="10">

<tr>
<td><b>Immagine: (jpg o png)</b></td>
<td align="right"><input type="file" name="img" size="20"></td>

</tr>
<tr>
<td><b>Larghezza: (in pixel)</b></td>
<td align="center"><input type="text" name="width" size="5" value="150"></td>

</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Ridimensiona"></td>

</tr>
</table>
</form>
<p><i>Script realizzato da</i> <a href="https://fdalesio.wordpress.com/">Francesco D’Alesio</a></p>

</body>
</html>
<?

} else {
#Salve, sono lo script, io comincio da qui e vi spiego cosa faccio…

#Assegno alla variabile width il valore scritto nel form e controllo che sia un numero
$width = $_POST[width];
if(!is_numeric($width)) { print("<center><b>La larghezza deve essere un numero intero"); exit; }

#Controllo se il file è stato inviato; controllo se il file è un immagine jpg o png e assegno alla variabile ext l’estensione giusta
if (!is_uploaded_file($_FILES["img"]["tmp_name"])) { print("<center><b>Errore nell’upload del file"); exit; }
if($_FILES["img"]["type"] == "image/jpeg" || $_FILES["img"]["type"] == "image/pjpeg") { $ext = "jpg";
} elseif($_FILES["img"]["type"] == "image/png") { $ext = "png";
} else { print("<center><b>L’immagine pu&ograve; essere solo jpeg o png"); exit; }

#Genero un nome per il file inviato casualmente, questo perchè se lo script viene utilizzato da più persone c’è il rischio che si operi sugli stessi files contemporaneamente.
#Se lo utilizzate per "uso personale" potete anche saltare. Mettete il commento (#) davanti alla riga qui sotto e toglietelo da quella successiva.
$nomefile = rand(1, 100);
#$nomefile = $_FILES["img"]["name"];

#Definisco il path delle due immagini
$filebig = $imgpathbig . $nomefile . "." . $ext;
$filesmall = $imgpathsmall . "TN" . $nomefile . "." . $ext;

#Sposto il file inviato dal form nella directory scelta e con il nome definito sopra
move_uploaded_file($_FILES["img"]["tmp_name"], $filebig) or die("<center>Errore durante l’upload del file");

#Genero l’immagine ridimensionata
function makethumb($name, $thname, $width) {
#Vedo se il file è jpg o png e creo un immagine di conseguenza
$data = GetImageSize($name);
switch ($data[2]) {
case 1: #copy($name,$thname);
return;
break;
case 2:
$im = @imagecreatefromjpeg($name);
break;
case 3:
$im = @imagecreatefrompng($name);
break;

}
#Assegno alle variabili w e h rispettivamente la larghezza e l’altezza dell’immagine originale
$w=ImageSX($im);
$h=ImageSY($im);
#Creo un divisore per mantenere le proporzioni dell’immagine
$div = $w / $width;
#Calcolo l’altezza dell’immagine ridimensionata
$nh = $h / $div;
#Creo l’immagine ridimensionata
$ni=ImageCreatetruecolor($width,$nh);
ImageCopyResized($ni,$im,0,0,0,0,$width,$nh,$w,$h);
if($data[2] == 2) ImageJPEG($ni,$thname,100);
if($data[2] == 3) ImagePNG($ni,$thname,100);
}

#Richiamo la funzione
makethumb($filebig, $filesmall, $width);
#Cancello l’immagine grande, se volete mantenerla nella cartella che avete specificato sopra mettete un commento (#) davanti a questa riga
#unlink($filebig);
#Mostro l’immagine ridimensionata
?>

<html><head><title>Immagine ridimensionata</title>
<center>
Immagine piccola<br>
<img src="<?= $imgurlsmall ?>TN<?= $nomefile ?>.<?= $ext ?>" alt="Immagine ridimensionata">

<?
#Se volete, sotto l’immagine ridimensionata, posso farvi vedere anche l’immagine grande (se avete impostato in cima al file la variabile imgurlbig). Per farla visualizzare dovete togliere il commento dalla riga sotto e mettere il commento davanti a unlink($filebig), 8 righe sopra
print("<br><br>Immagine grande<br><img src=’$imgurlbig$nomefile.$ext’ alt=’Immagine grande’>");
}
?>

Se trovate dei bug o avete problemi per farlo funzionare commentate pure..

Redirect 301 di molte pagine

marzo 30, 2007

Ultimamente ho dovuto affrontare questo problema per uno dei miei siti:

il sito ha oltre 450 pagine, tutte .php, e dovevo cambiare dominio. Era quindi necessario fare un redirect 301 di tutte le pagine verso le stesse pagine sul nuovo dominio. Farlo a mano sarebbe stato un suicidio!

Così ho creato uno script che, installato nella directory principale del sito, cercava tutti i files php, li apriva e li modificava inserendo il codice per il redirect alla stessa pagina sul nuovo dominio.

Spero possa esservi utile; non è sicuramente il top della programmazione ma per me ha funzionato!

Se avete suggerimenti su come migliorarlo scrivetemi pure..

Ci sono due variabili da impostare: nuovourl, che contiene l’URL del nuovo sito, senza lo slash finale (nel caso in cui dovete redirectare solo una sottocartella potete mettere l’url della sottocartella, sempre senza lo slash finale); ext, che contiene l’estensione dei file da modificare (nel caso avete delle estensioni tipo php4, o html che vengono eseguiti come files php).

Basta chiacchiere, ecco lo script

<?
# solo queste prime due variabili sono da modificare.
#se dovesse avere problemi con la scrittura dei file è possibile togliere il commento dalla riga 41 per effettuare un chmod prima dell’apertura del file.
$nuovourl = “http://www.nuovosito.com&#8221;; #url del nuovo sito o cartella destinazione, senza slash finale
$ext = “.php”; #estensione dei file da modificare

$file = $_SERVER[‘PATH_TRANSLATED’];
print(“<b>Path dello script:</b> $file<br>”);
$script = basename($file);
print(“<b>Nome file script:</b> $script<br>”);
$filelenght = strlen($script)+1;
$path = substr($file, 0, -$filelenght);
print(“<b>Path directory da modificare:</b> $path<br>”);

function walk_dir($path)
{
if ($dir = opendir($path)) {
while (false !== ($file = readdir($dir)))
{
if ($file[0]==”.”) continue;
if (is_dir($path.”/”.$file))
$retval = array_merge($retval,walk_dir($path.”/”.$file));
else if (is_file($path.”/”.$file))
$retval[]=$path.”/”.$file;
}
closedir($dir);
}
return $retval;
}
$array = walk_dir($path);
?><pre><? #print_r($array);
reset($array);
$n = 0;
while (list($key, $abspath) = each($array)) {
if($abspath != $file) {
print(“<b>Path file da modificare:</b> $abspath – “);
$relpath = str_replace($path, “”, $abspath);

if(strpos($relpath, $ext) > 0) {
#chmod($abspath, 0777) or die(“impossibile modificare i permessi”);
$handle2 = fopen($abspath, “w”) or die(“impossibile aprire il file in scrittura”);
$url = $nuovourl . $relpath;
fputs($handle2, “<?
Header( \”HTTP/1.1 301 Moved Permanently\” );
Header( \”Location: $url\” );
?>
“) or die(“impossibile scrivere sul file”);
fclose($handle2);
print(“<b>reindirizzato a </b>$url – OK<br>”);
$n++;
}

}
}
print(“<br><br>$n file modificati”);

Per far funzionare lo script è necessario che vi siano i permessi per scrivere nelle cartelle.

Lo script in automatico cerca in tutte le sottocartelle dove viene installato, se non dovete reindirizzare tutto l’unica cosa che mi viene in mente (apparte modificare lo script per le vostre esigenze) è quella di installarlo via via nelle sottocartelle che dovete reindirizzare così da lasciare fuori quelle che non vanno modificate. Oppure potere scaricare i files che non vanno modificati via ftp, far andare lo script e ri-uploadare i files che dovevano rimanere così.

Alla prossima

I programmi che uso

marzo 29, 2007

Scrivo questo rapido post per segnalarvi dei programmi che secondo me sono ottimi

  • Notepad ++: è un editor di testo che supporta molti linguaggi di programmazione (gratis)
  • FileZilla: Client FTP, veramente efficace e molto personalizzabile (gratis)
  • ZoneAlarm: Firewall, mi permette di evitare di utilizzare antivirus e simili. Da un discreto controllo sui programmi che vogliono accedere ad internet e su chi vuole accedere DA internet (gratis)

Aggiungo anche che wordpress è veramente un ottimo software per i blog!