Strefa webmastera » php skrypty

W Strefie Skryptów PHP znajdziesz sprawdzone, działające skrypty php jeżeli masz jakiś ciekawy skrypt
i chciałbyś się nim podzielić, po prostu dodaj go poprzez formularz
w tytule wiadomości napisz skrypt php
System do wyliczania PageRank dla stron www.
Działa on w oparciu o algorytmy wyliczające jakość strony WWW w przedziale od 0 do 10
To narzędzie pokaże jaki jest Pagerank Twojej strony w Google
W skrypcie wpisz adres swojej strony www i ciesz się darmowym gadżetem na swojej stronie

Page Rank

Chcesz wiedzieć cały czas jaki jest Twój pagerank ?
Za pomocą tego skryptu możesz sprawdzić jak wysoko w rankingach google jest Twoja strona.
Wartość PageRank określana jest na podstawie ilości oraz jakości odnośników które prowadzą do Twojej strony. Im wyższy jest PageRank stron które do Ciebie linkują tym mniej takich linków potrzebujesz
Utwórz plik page_rank.php i wrzuć go na serwer do głównego katalogu
A oto zawartość pliku page_rank.php
<? php
$tempurls= "http://www.int24.com.pl";       // twój adres strony
$pieces = explode("\n", $tempurls);             // znalezienie wszystkich zgłoszonych adresów URL
$size=sizeof($pieces);            // tablica wielkości wykorzystana do pętli na końcu programu

    // ustawienia - hosta i użytkownika
$googlehost='toolbarqueries.google.com';
$googleua='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5';

    // konwertować ciąg znaków do 32-bit
function StrToNum($Str, $Check, $Magic) {
    $Int32Unit = 4294967296;  // 2^32

    $length = strlen($Str);
    for ($i = 0; $i < $length; $i++) {
          $Check *= $Magic;
// jeśli liczba zmiennoprzecinkowa jest poza zakresem liczb całkowitych, (zazwyczaj +/- 2.15e+9 = 2^31),
// w wyniku konwersji do liczb całkowitych jest niezdefiniowany
// odnoszą się do http://www.php.net/manual/en/language.types.integer.php

          if ($Check >= $Int32Unit) {
               $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
// if the check less than -2^31
               $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
          }
          $Check += ord($Str{$i});
      }
      return $Check;
}

// genearate a hash for a url
function HashURL($String) {
    $Check1 = StrToNum($String, 0x1505, 0x21);
    $Check2 = StrToNum($String, 0, 0x1003F);

    $Check1 >>= 2;
    $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
    $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
    $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);

$T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
$T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );

return ($T1 | $T2);
}

// genearate a checksum for the hash string
function CheckHash($Hashnum) {
$CheckByte = 0;
$Flag = 0;

$HashStr = sprintf('%u', $Hashnum) ;
$length = strlen($HashStr);

for ($i = $length - 1; $i >= 0; $i --) {
$Re = $HashStr{$i};
if (1 === ($Flag % 2)) {
$Re += $Re;
$Re = (int)($Re / 10) + ($Re >% 10);
       }
$CheckByte += $Re;
$Flag ++;
   }

$CheckByte %= 10;
if (0 !== $CheckByte) {
$CheckByte = 10 - $CheckByte;
if (1 === ($Flag % 2) ) {
if (1 === ($CheckByte % 2)) {
$CheckByte += 9;
            }
$CheckByte >>= 1;
       }
   }

return '7'.$CheckByte.$HashStr;
}

// return the pagerank checksum hash
function getch($url) { return CheckHash(HashURL($url)); }

// zwrot formy pagerank
function getpr($url) {
global $googlehost,$googleua;
$ch = getch($url);
$fp = fsockopen($googlehost, 80, $errno, $errstr, 30);
if ($fp) {
$out = "GET /search?client=navclient-auto&ch=$ch&features=Rank&q=info:$url HTTP/1.1\r\n";
// echo "<pre>$out</pre>\n"; //debug only
$out .= "User-Agent: $googleua\r\n";
$out .= "Host: $googlehost\r\n";
$out .= "Connection: Close\r\n\r\n";

fwrite($fp, $out);

// $pagerank = substr(fgets($fp, 128), 4); // debug only
// echo $pagerank; // debug only

while (!feof($fp)) {
$data = fgets($fp, 128);
// echo $data;
$pos = strpos($data, "Rank_");
if($pos === false){} else{
$pr=substr($data, $pos + 9);
$pr=trim($pr);
$pr=str_replace("\n",'',$pr);
return $pr;
            }
       }
// else { echo "$errstr ($errno)<br />\n"; } // debug only
fclose($fp);
   }
}

// wygenerować graficzny pagerank
function pagerank($url,$width=40,$method='style') {
if (!preg_match('/^(http:\/\/)?([^\/]+)/i', $url)) { $url='http://'.$url; }
$pr=getpr($url);
$pagerank="PageRank: $pr/10";

// metoda graficzna
if ($method == 'image') {
$prpos=$width*$pr/10;
$prneg=$width-$prpos;
$html='<img src="http://www.google.com/images/pos.gif" width='.$prpos.' height=3 border=0 alt="'.$pagerank.'"><img src="http://www.google.com/images/neg.gif" width='.$prneg.' height=3 border=0 alt="'.$pagerank.'">';
   }
// wstępne metody stylizujące
if ($method == 'style') {
$prpercent=100*$pr/10;
$html='<div style="padding-top:6px; margin-left:34px"><div style="float:left; position: relative; width: '.$width.'px; padding: 0; background: #d9d9d9;"><strong style="width: '.$prpercent.'%; display: block; position: relative; background: red; text-align: center; color: #333; height: 3px; line-height: 40px;"><span></span></strong></div>';
   }
echo "<div style=\"background-image: url(http://www.int24.com.pl/image/page_rank.gif); width:80px; height:15px\" alt=\"$pagerank\" title=\"$pagerank\">";
echo "<div style=\"float:left; padding-left:2px; padding-top:1px\">";
echo "<font style=\"font-size:10px; font-family: Tahoma; font-weight: bold;\">";
$out='<a href="'.$url.'" title="'.$pagerank.'"></div>'.$html.'';
echo "<span style=\"margin-left: 66px; color: #800000 \">$pr</span></a></font></div></div>";

}

// do pętli na znalezienie PageRank adresu
      for ($j=0; $j<$size; $j++)
      {
      $url=$pieces[$j];
      echo pagerank($pieces[$j]);
      }
?>
A tak to wygląda w praktyce
PageRank 4/10
Tutaj możesz pobrać plik page_rank.php oraz gify
size [ 5,45 KB ]    pobrano: 5
Licznik jest programem rejestrującym każde wyświetlenie strony z możliwością wyświetlenia aktualnego stanu odwiedzin wewnątrz strony WWW, na której wstawiono specjalny kod HTML. Stan licznika prezentowany jest w postaci tekstowej...

Licznik odwiedzin

Wielu webmasterów poszukuje dobrego skryptu licznika odwiedzin, który byłby odporny na odświeżanie i przeładowanie strony. Ten licznik tekstowy służy do zliczania liczby odwiedzających twój serwis i przy każdej próbie wejścia ma twoją stronę jest pobierany numer IP użytkownika i po porównaniu z istniejącymi w bazie jest ewentualnie dodawany do danych.
Licznik posiada funkcję zliczania dziennego - tzw. licznik dzienny, oraz licznik gości online.
Dodatkowo dodany jest również licznik ile dni istnieje strona, oraz czas ładowania strony
Wklej poniższy kod na stronę, na której chcesz zliczać liczbę gości.
Kod należy wkleić na samej górze strony ! ! !
<? php
ob_start();
$start=microtime();
// kod do liczenia czasu ładowania strony
?>
Następnie wstaw na stronie poniższy kod w miejscu w którym ma być wyświetlany licznik
<?php
ob_start();
include("zlicz.php");
?>
Utwórz plik zlicz.php i wrzuć go na serwer do głównego katalogu
A oto zawartość pliku zlicz.php
<?php
ob_start();
// ========== funkcje ==========
function open($name="",$trybe="r",$value="0")
        {
if(file_exists($name))
    {
$file=fopen($name, $trybe);
flock($file, 1);
if (filesize($name)>0) return fread(fopen($name, $trybe), filesize($name)); else return $value;
flock($file, 3);
fclose($file);
    }
        }
function save($name="",$date="",$trybe="w")
    {
if(file_exists($name))
        {
$file=fopen($name, $trybe);
flock($file, 2);
fwrite($file, $date);
flock($file, 3);
fclose($file);
        }
    }
// =========== ścieżki ==========
$scr[0] = "licznik/ip.txt";
$scr[1] = "licznik/dane.txt";
$scr[2] = "licznik/log.txt";
// ========== zmienne ==========
$aktu_ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($aktu_ip);
$aktu_czas = (date(G)*3600)+(date(i)*60)+date(s);      //date(G)*60+date(i); 3600 = 1h;
$czas_online = 600;      // (10 minut) = 600 sekund
$czas_opuznienia = 900;      // (15 minut) = 900 sekund
$data = date("Y-m-d", time());
$online = 1;
$zmienna = False;
$nowe_dane = '';
// =========== źródło ==========
$dane = explode(chr(1),open($scr[1]));
if(!strcmp($dane[2],$data))
{
$tab1 = explode(chr(1), open($scr[0]));
for( $x = 0; $x <= count($tab1)-2; $x+=2 )
{
if(!strcmp($aktu_ip, $tab1[$x]))
        {
if($aktu_czas - $czas_opuznienia < $tab1[$x+1]) $zmienna=True;
        }
  else
        {
if($aktu_czas - $czas_opuznienia < $tab1[$x+1])
                {
$nowe_dane .= $tab1[$x].chr(1).$tab1[$x+1].chr(1);
if($aktu_czas - $czas_online < $tab1[$x+1]) $online++;
                }
}
       }
if ($zmienna == 0)
       {
$dane[0]++;
$dane[1]++;
save($scr[1],$dane[0].chr(1).$dane[1].chr(1).$dane[2]);
$wszystko = "$dane[0] -".chr(1). "- $dane[1] -" .chr(1). "- $online -" .chr(1). date("- Y-m-d -" .chr(1). "- G:i:s -", time()) .chr(1). "- $aktu_ip -" .chr(1). "- $host -" .chr(1). $HTTP_REFERER .chr(1). $HTTP_USER_AGENT .chr(13).chr(10);
save($scr[2],$wszystko,"a");
       }
    }
else
    {
save($scr[0]);
$dane[0]++;
$dane[1] = 1;
save($scr[1],$dane[0].chr(1).$dane[1].chr(1).$data);
$wszystko = "$dane[0] -".chr(1). "- $dane[1] -" .chr(1). "- $online -" .chr(1). date("- Y-m-d -" .chr(1). "- G:i:s -", time()) .chr(1). "- $aktu_ip -" .chr(1). "- $host -" .chr(1). $HTTP_REFERER .chr(1). $HTTP_USER_AGENT .chr(13).chr(10);
save($scr[2],$wszystko,"a");
    }
$nowe_dane> .= $aktu_ip.chr(1).$aktu_czas.chr(1);
save($scr[0],$nowe_dane);
echo "<font color=\"blue\">odwiedzin: </font><font color=#ADCAFF><b>$dane[0]</b></font><br />";
echo "<font color=\"blue\">dzisiaj: </font><font color=#ADCAFF><b>$dane[1]</b></font><br />";
echo "<font color=\"blue\">on-line: </font><font color=#ADCAFF><b>$online</b></font><br />";

// LICZNIK POWSTANIA STRONY
//przekształcamy datę w przeszłości do formatu unix'owego
$data = strtotime("2008-11-25 0:00:30");    //tu wpisz datę od kiedy ma liczyć
//pobieramy bieżący czas
$teraz = time();
//różnice dzielimy przez jeden dzień czyli 60 s. * 60 m. * 24 godz.
$dni_r = ($teraz - $data) / (60 * 60 * 24);
//część całkowita z dzielenia to liczba dni
$dni_c = floor($dni_r);
//resztę z dzielenia mnożymy przez dobę
$godzin_r = ($dni_r - $dni_c) * 24;
//część całkowita z mnożenia to liczba godzin
$godzin_c = floor($godzin_r);
//resztę mnożymy przez godzinę
$minut_r = ($godzin_r - $godzin_c) * 60;
//część całkowita to liczba minut
$minut_c = floor($minut_r);
//część całkowita reszty pomnożonej przez minutę to liczba sekund
$sekund_c = floor(($minut_r - $minut_c) * 60);
echo "<font color=\"blue\">strona istnieje: </font><font color=#ADCAFF><b>$dni_c</b></font><font color=\"blue\"> dni</font><br />";

// LICZNIK GENEROWANIA STRONY
echo "<font color=\"blue\">ładowanie: </font>";
echo "<font color=#ADCAFF><b>";
echo round(microtime()-$start, 3);
echo "</b></font><font color=\"blue\"> sek</font>";
?>
Na zakończenie utwórz 3 pliki   log.txt   ip.txt   dane.txt
wrzuć je na serwer i nadaj im prawa chmod 666
A tak to wygląda w praktyce
odwiedzin: 2375
dzisiaj: 46
on-line: 3
strona istnieje: 104 dni
ładowanie: 0.721 sek
Tutaj możesz pobrać pliki zlicz.php oraz | log.txt | ip.txt | dane.txt |
size [ 4.85 KB ]    pobrano: 3065
Przykład ten pokazuje jak napisać prosty skrypt który zlicza kliknięcia w banner lub link.
Do prawidłowego działania skryptu potrzebne jest utworzenie pliku licz_klik.txt lub jakiegokolwiek innego.
W tym pliku będą przechowywane kliknięcia...

Licznik kliknięć lub pobrania pliku

Licznik kliknięć jest komponentem, który zlicza ilość kliknięć na dany link z Twojej strony.
Może być to zarówno konkretny zasób w postaci pliku jak i odnośnik do innej strony lub adresu.
Utwórz plik licz_klik.php i wrzuć go na serwer
A oto zawartość pliku licz_klik.php
<? php
if(file_exists("licz_klik.txt")){
$file=fopen("licz_klik.txt","r");
$licznik=chop(fgets($file,100));
$licznik++;
fclose($file);
$file=fopen("licz_klik.txt","w");
fwrite($file,$licznik);
fclose($file);
}
else{$file=fopen("licz_klik.txt","w");
fwrite($file,"1");
fclose($file);
}
header("location: http://www/../pliki/ban_lista.zip");   // adres linka lub pliku, który będzie zliczany
?>
następnie utwórz plik licz_klik.txt wrzuć go na serwer i nadaj mu prawa chmod 666
w nim będzie zapisywana liczba kliknięć
Teraz wklej na stronie kod np. do buttona
<input value="Pobierz plik" type="button" onClick="self.location.href=('licz_klik.php')" />
lub link
<a href="licz_klik.php">Pobierz plik</a>
aby wyświetlić na stronie liczbę pobrań wklej kod
pobrano: <? include("adres do pliku/licz_klik.txt"); ?>
A tak to wygląda w praktyce, kliknij na "POBIERZ" i odśwież stronę
Tutaj możesz pobrać pliki licz_klik.php oraz licz_klik.txt
size [ 442 B ]    pobrano: 907
Na nasze strony wchodzi coraz więcej botów internetowych. Zaśmiecają komentarze, księgi gości, czy formularze kontaktowe. Jednak wynaleziono dosyć łatwy sposób na zatrzymanie ich niepożądanej działalności - kody CAPTCHA. Metoda ta polega na przeprowadzeniu testu, który jest w stanie rozwiązać tylko człowiek - zazwyczaj musimy przepisać kilka literek z obrazka...

Zabezpieczenie formularza tokenem

Wielu webmasterów spotyka się problemem z tzw. spamowaniem formularzy przez spamerów, oraz botami panoszącymi się w Internecie. Istnieje możliwość rozwiązania tego problemu poprzez dołączenie do formularza mechanizmów CAPTACHA tokena - obrazka z kodem, który należy przepisać do pola obok formularza
Utwórz plik process.php i wrzuć go na serwer
A oto zawartość pliku process.php
<?php
session_start();     // start sesji
$session = $_SESSION['captcha'];   // zdefiniowanie sesji
$image = $_POST['image'];
$image = md5($image);   // szyfrowanie MD5
if ($session == $image){
// dalsze instrukcje, jeśli token jest poprawny
echo "KOD POPRAWNY";
}
// dalsze instrukcje, jeśli token jest błędny tutaj możesz ustawić czy chcesz mieć tylko informację o błędnym kodzie lub usuń // przed header i powrócisz do formularza
else{
//header("Location: form.php");
echo "<div style=\"width: 100px\">";
echo "<div style=\"border: 2px solid blue; text-align: center\">";
echo "<font style=\"color: red; font-family: verdana; font-size: 12px; font-weight: bold\">BŁĘDNY KOD</font></div>";
echo "<div style=\"text-align:center\">";
echo "<input type=\"button\" value=\"Wróć\" onClick=\"history.back()\"></div></div>";
}
?>
następnie utwórz plik image.php odpowiedzialny za generowanie ciągu znaków
<?php
session_start();
// wysłanie nagłówków do przeglądarki
header ("(anti-spam-content-type:) image/jpg");

// generowanie liczb losowych do wykorzystania w naszym szyfrowaniu
$enc_num = rand(0, 9999); // numer ten jest szyfrowany
$key_num = rand(0, 24); // używany ciąg znaków wykorzystany na obrazku

// użyj losowy ciąg cyfr i liter przy użyciu Md5
// ilość wyświetlanych znaków w naszym przypadku 5
$hash_string = substr(md5($enc_num), $key_num, 5);
$hash_md5 = md5($hash_string);

// przypisanie do sesji
$_SESSION['captcha'] = $hash_md5;

// tworzą zestaw obrazów jako tło pod tokenem
$bgs = array("imag/back1.jpg", "imag/back2.jpg", "imag/back3.jpg");

// wybiera obraz tła przy użyciu funkcji podręcznej array_rand
$background = array_rand($bgs, 1);

// ustawia jako tło losowo wybrany gif
$img_handle = imagecreatefromjpeg($bgs[$background]);

// kolor czcionki, tekstu
$text_colour = imagecolorallocate($img_handle, 0, 0, 0);

// wielkosc czcionki, tekstu
$font_size = 5;

// pobierz wymiary poziome i pionowe obrazu tla
$size_array = getimagesize($bgs[$background]);
$img_w = $size_array[0];
$img_h = $size_array[1];

// pozycja pozioma
$horiz = round(($img_w/2)-((strlen($hash_string)*imagefontwidth(5))/2), 1);

// pozycja pionowa
$vert = round(($img_h/2)-(imagefontheight($font_size)/2));

// umieść wygenerowany tekst na tle
imagestring($img_handle, $font_size, $horiz, $vert, $hash_string, $text_colour);

// tworzenie obrazu
imagejpeg($img_handle);

// usuwanie obrazu
imagedestroy($img_handle);
?>
Na zakończenie utwórz plik form.php i wrzuć na serwer
<form method="post" action="process.php">
<img src="image.php" id="captcha_image" border="0" /><br />
<input type="text" name="image" /><br />
<input type="submit" value="Wyślij" />
<input type="button" value="Odśwież" onClick="document.getElementById('captcha_image').src ='image.php?'+Math.random()" />
</form>
A tak to wygląda w praktyce
Tutaj możesz pobrać pliki process.php | image.php | form.php | gify |
size [ 17,7 KB ]    pobrano: 437
To narzędzie moze być bardzo pomocne jesli masz problemy z osobą notorycznie próbującą używać Twojej witryny w niewłaściwy i nieuprawniony sposób próbując dostać się do zastrzeżonych danych, pobierania plików, spamowania forów lub innych nadużyć...

Banowanie adresu IP

Zdarza się ze na naszą stronę trafiają wredne typy i przeklinają, lub co gorsze
mamy Księgę Gości lub Shoutbox i zasypywane są SPAMEM.
Na takich nie ma rady, trzeba ich zbanować. Jak to zorbić popatrz poniżej
Wklej poniższy kod na każdą stronę, którą chcesz zabezpieczyć przed niechcianymi użytkownikami.
Kod należy wkleić na samej górze strony ! ! !
<? php
ob_start();
include("ban_lista.php");
ob_end_flush();
?>
Utwórz plik ban_lista.php i wrzuć go na serwer do głównego katalogu
A oto zawartość pliku ban_lista.php
<? php
ob_start();
$ip = getenv('REMOTE_ADDR');
$zablokowane_ip = array(
'12.13.94.227',
'222.255.237.61',
'XXX.XXX.XXX.XXX');
if (in_array($ip, $zablokowane_ip))
{
echo "<div style=\"text-align:center; margin-top:50px; border:3px solid yellow\"><br />";
echo "<font color=\"red\"><strong>IP - BAN</strong></font><br /><br />";
echo "<font color=\"blue\"><strong>Twoje IP zostało ZBANOWANE</strong></font><br /><br />";
echo "<img src=\"fuck.gif\" border=\"0\" alt=\"FUCK OFF !!! SPAM\" title=\"FUCK OFF !!! SPAM\">";
echo "</div>";
exit();
}
?>
W miejsce XXX.XXX.XXX.XXX wpisz numery IP które chcesz zbanować
A tak to wygląda w praktyce
IP BAN
Twoje IP zostało ZBANOWANE

FUCK OFF !!! SPAM
Tutaj możesz pobrać plik ban_lista.php z ponad 11500 numerami IP spamerów
size [ 250 KB ]    pobrano: 150