fabian.lenczewski - seo, php, grafika

(!ereg("^http://", $url)) ? $this->url = "http://" . $url : $this->url = $url;

Subscribe to RSS feed

Zmiana adresu bloga

,

Obecny adres to: http://redwork.valcomp.biz/blog/ - tematyka w miarę podobna - zapraszam.

Widok z Cisowej Góry....

[php] walidacja danych

, ,

Czasami (czyt. często) występuje potrzeba sprawdzenia poprawności wprowadzonych przez kogoś danych. Za pomocą standardowo wbudowanych funkcji (is_numeric(), is_array(), is_bool(), etc..) nie jesteśmy w stanie sprawdzić wszystkiego. Do dzieła zatem.
Data

Czas
function ivtf($ANo)
{
     if(ereg('^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$', $ANo) == True)
      {
        $date = explode(':', $ANo);
        if(
            ($date[0] < 24) AND ($date[1] < 60) AND ($date[2] < 60)
          ) return True;
        else return False;
      }
     else
      {
        return False;
      }
}

Liczba całkowita
function calkowita($ANo) {
    return ereg('^[+-]?[0-9]+$', $ANo);
}

Liczba zmiennoprzecinkowa
function zmiennoprzecinkowa($ANo) {
    return ereg('^[+-]?[0-9]*\.?[0-9]+$', $ANo);
}

Więcej o wyrażeniach regularnych.

Nie będę dalej powtarzał otoczki całych funkcji. chyba wiadomo, co i gdzie zmienić.
  • Dowód osobisty - ^[A-Za-z]{3,3}[0-9]{6,6}$
  • Kod pocztowy - ^[0-9}{2,2}-[0-9]{3,3}$
  • PESEL - ^[0-9]{11,11}$

Niektóre funkcje nie sprawdzają samej poprawności, jak np. kod pocztowy 11-111, jednak pomagają filtrować niechciane dane.
Więcej o weryfikacji danych zawierających sumy kontrolne (NIP, PESEL, IBAN, IMEI...)

Rodzi się jednak pytanie, czy funkcje działają optymalnie? - Nie.
over.

słowniki....

, ,

Słownik ze strony Marka Futregi ma jedną wadę (cały waży ponad 34 MB). Jeżeli ktoś chce operować na takim pliku... cóż - powodzenia ;D.
Przy odrobinie wysiłku można przecież stworzyć 24 pliki, w których będą wyrazy zaczynające się na takie same litery. Lepiej chyba wczytywać tylko te pliki, które potrzebujemy niżeli jeden ogromny, ogromniasty. Poniżej archiwa zip, które zawierają takowe pliki wink


Poniżej skrypt PHP, który generuje takie pliki:
$uchwyt = fopen("slowa-win.txt", "rb");
$tresc = NULL;

while (!feof($uchwyt)) {
  $tresc .= fread($uchwyt, 16384);
  ++$a;
}
fclose($uchwyt);

$tmp = explode("\n", $tresc);
$ile = count($tmp);

while ($a < $ile) {
    if((strlen($tmp[$a]) > 3)) {
        if($tmp[$a][2] != $tmp[$a-1][2]) {
            $plik = substr($tmp[$a], 0, 2) . "_max.txt";
        }
        $fp = fopen($plik, "a+");
        fputs($fp, $tmp[$a]);
        fclose($fp);
    }
    ++$a;
 }
Jeżeli macie wystarczająco dużo czasu żeby bawić się w przetwarzanie ponad 30 megowego txt w PHP - śmiało, musicie tylko zmienić jeszcze dyrektywy w php.ini odpowiadające za maksymalny czas wykonywania skryptów oraz ilośc pamięci na to przeznaczonej
max_execution_time = 3600     ; Maximum execution time of each script, in seconds
memory_limit = 64M      ; Maximum amount of memory a script may consume (8MB)
, a to może okazać się jeszcze za mało ;D

[php] Optymalizacja skryptów php

Ostatnio wpadła mi w ręce prezentacja [ zend_performance ~ 10,1 MB ] nt. optymalizacja skryptów w php i ich poprawnej budowy. Polecam.

[php] Weryfikacja nazwy elementu w drzewie XML

,

Trochę teorii:
Nazwy elementów
- muszą zaczynać się od litery, podkreślenia lub dwukropka,
- mogą się znajdować litery, cyfry, podkreślenia, kreski (myślniki), kropki i średniki,
- nie mogą natomiast pojawić się żadne białe znaki.

Oto kilka przykładowych, poprawnych znaczników XML:
<DOKUMENT>
<dokument>
<_Zapis>
<klient>
<NUMER.PRODUKTU>

Funkcja sprawdzająca poprawność nazwy:
    FUNCTION werele($nazwa) {
        RETURN EREG('^[_A-Za-z:]+[-_A-Za-z0-9.;]*$', $nazwa);
    }

[php][optymalizacja] metoda złotego podziału

,

<?

    $_POST['a'] =  -10;
    $_POST['b'] =   10;
    $e          = 0.001;
    $k          = 0.61803398;

    function oblicz($x) {
        return ($x - 3.1415) * ($x - 3.1415);
    }

    $_POST['ciecie_lewe']  = $_POST['b'] - $k * ($_POST['b'] - $_POST['a']);
    $_POST['ciecie_prawe'] = $_POST['a'] + $k * ($_POST['b'] - $_POST['a']);

    $_POST['wartosc_lewa']  = oblicz($_POST['ciecie_lewe']);
    $_POST['wartosc_prawa'] = oblicz($_POST['ciecie_prawa']);
    $i++;

    while(($_POST['b'] - $_POST['a']) > $e) { $i++;

        if (oblicz($_POST['ciecie_lewe']) < oblicz($_POST['ciecie_prawe'])) {
            $_POST['b'] = $_POST['ciecie_prawe'];
            $_POST['ciecie_prawe'] = $_POST['ciecie_lewe'];
            $_POST['wartosc_prawa'] = oblicz($_POST['ciecie_prawe']);
            $_POST['ciecie_lewe'] = $_POST['b'] - $k * ($_POST['b'] - $_POST['a']);
            $_POST['wartosc_lewa']  = oblicz($_POST['ciecie_lewe']);
        } else {
            $_POST['a'] = $_POST['ciecie_lewe'];
            $_POST['ciecie_lewe'] = $_POST['ciecie_prawe'];
            $_POST['wartosc_lewa'] = oblicz($_POST['ciecie_lewe']);
            $_POST['ciecie_prawe'] = $_POST['a'] + $k  * ($_POST['b'] - $_POST['a']);
            $_POST['wartosc_prawa'] = oblicz($_POST['ciecie_prawa']);
        }

    $_POST['ciecie_srodek'] = ($_POST['a'] + $_POST['b']) / 2;
    }

    echo "<b>". $_POST['ciecie_srodek'] . "</b> za <b>" . $i . "</b> razem.";

?>

[php][optymalizacja] metoda połowienia [?]

,

Jeden z algorytmów na wyznaczanie minimum funkcji.
# autor: Fabian Lenczewski
#  data: 2007-04-04
# Uniwersytet w Białymstoku, Instytut Informatyki

 function oblicz($x) {
   # przykładowa funkcja
   return ($x - 3.1415) * ($x - 3.1415);
 }

 # granice przedziału
 $_POST[a] = -10;
 $_POST[b] = 10;
 # epsilon
 $e = 1.3;

# echo "Max. ilosc kroków: ". $il_krokow = ($_POST[b] - $_POST[a]) / $e . "\n";

    for($i = 1; $i<$il_krokow; $i++) {

        $_POST[l] = $_POST[b] - $_POST[a];

        $_POST[ciecie_srodek] = ($_POST[a] + $_POST[b]) / 2;
        $_POST[ciecie_lewe]   = $_POST[a] + $_POST[l] / 4;
        $_POST[ciecie_prawe]  = $_POST[b] - $_POST[l] / 4;

        $_POST[wartosc_lewa]   = oblicz($_POST[ciecie_lewe]); 
        $_POST[wartosc_srodek] = oblicz($_POST[ciecie_srodek]);
        $_POST[wartosc_prawa]  = oblicz($_POST[ciecie_prawe]);

        if ($_POST[wartosc_lewa] > $_POST[wartosc_srodek]) {

            $_POST[a] = $_POST[ciecie_srodek];

        } else if ($_POST[wartosc_prawa] <= $_POST[wartosc_srodek]) {

            $_POST[a] = $_POST[ciecie_lewe];
            $_POST[b] = $_POST[ciecie_prawe];

        } else {

            $_POST[b] = $_POST[ciecie_srodek] ;

        }
    }

    echo $_POST[ciecie_srodek];

[php] Weryfikacja wprowadzonej daty

, ,

# IS VALID DATE FORMAT, RRRR-MM-DD
function ivdf($ANo)
{
     if(ereg('^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$', $ANo) == True)
      {
        $date = explode('-', $ANo);
        if (checkdate($date[1], $date[2], $date[0])) {
            return True;
        } else {
            return False;
        }
      }
     else
      {
        return False;
      }
}

[php] Usuwanie liczb, cyfr, znaków kropki z ciągu

, ,

Bez słowa komantarza wink
    function del_numeric($data){
            return $data = preg_replace('/[0-9.]/', '', $data);
    }
dodane:
można też pozostawić liczby w analogiczny sposób:
    function save_numeric($data){
            return $data = preg_replace('/[^0-9.]/', '', $data);
    }