Skip navigation.

fabian.lenczewski - seo, php, grafika

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

[php] kurs walut - trzecie podejście - cześć 1

, ,

Wiele już powstało skryptów pobierających aktualny kurs walut. Wiele z nich już nie działa, inne działają jak chcą, jeszcze inne zapewniają cachowanie danych, jeszcze inne generują wykresy itp. Każdy ma swoje podejście, które zresztą może zmieniać się z dnia na dzień. Jednak jest jedna wspólna cecha wszystkich skryptów... wszystkie one korzystają z danych NBP :smile:.

Read more...

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);
    }