Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu php Kanał ATOM (tag: php)

Autor wpisu: Śpiechu, dodany: 05.12.2010 21:32, tagi: zend_framework, php

Dzisiaj będzie coś dla wielbicieli Zend Frameworka. A dokładniej coś, z czym mamy do czynienia przetwarzając jakikolwiek formularz, czyli walidatory. Walidacja, a więc sprawdzanie czy wprowadzone przez użytkownika dane odpowiadają pewnemu schematowi jest obok filtracji, czyli wyrzucaniu zbędnych/niebezpiecznych rzeczy z danych chyba najważniejszą sprawą przy tworzeniu witryn WWW.

Zend Framework dysponuje zestawem kilkudziesięciu walidatorów, które można łączyć w łańcuchy przy walidowaniu poszczególnych pól formularza, np. pytając o wiek użytkownika pole musi zawierać wyłącznie liczby, czyli aż prosi się o Zend_Validate_Digits, a następnie należy sprawdzić czy podana liczba znajduje się w jakimś ludzkim przedziale, tzn. powiedzmy pomiędzy 1 a 100, co załatwi za nas Zend_Validate_Between.

Co w przypadku jeżeli musimy dopasowywać coś, czego nie przewidzieli twórcy ZF? Możemy napisać własny walidator.

Każdy walidator musi implementować interfejs Zend_Validate_Interface, czyli dwie publiczne metody:

  • isValid($value) — zwracająca buliona prawda/fałsz
  • getMessages() — zwracająca tablicę komunikatów co jest nie tak z wartością testowaną w isValid(). Komunikaty zwracane są w postaci kod_błędu => komunikat_w_ludzkiej_formie

W celu uniknięcia babrania się obsługą błędów i komunikatów twórcy ZF stworzyli abstrakcyjną klasę Zend_Validate_Abstract, która zrobi za nas większość brudnej roboty. Pozostanie nam tylko napisanie właściwej logiki co ma być sprawdzane i ewentualnie jaki błąd zgłaszany.

Na potrzeby swojej aplikacji napisałem własny w miarę uniwersalny walidator, który sprawdzi czy klucz podstawowy danej tablicy istnieje. Może mieć zastosowanie jeżeli ktoś sprawdza czy np. identyfikator wybranej przez użytkownika kategorii istnieje w bazie.

Poniżej przedstawiem kod z objaśnieniami po co coś jest. Po przeczytaniu stwierdzicie, że pisanie walidatorów to fajna zabawa :-)

<?php
// rozszerzamy klasę abstrakcyjną dla walidatorów
class Spiechu_Validators_IsIdExists extends Zend_Validate_Abstract {     
 
  // definiujemy kody błędów i jakieś wartości dla nich
  const IDNOTEXISTS = 'idnotexists';
  const EMPTYSTRING = 'emptystring';
  const NULLVALUE = 'nullvalue';
 
  // definiujemy tablicę komunikatów błędów dla poszczególnych kodów
  // zwracam uwagę na '%value', które może być w locie zamienione na sprawdzaną wartość
  protected $_messageTemplates = array(
    self::IDNOTEXISTS   => "id '%value%' not exists",
    self::EMPTYSTRING  => 'given value is empty',
    self::NULLVALUE     => 'given value is null'
  );
 
  // zmienna typu Zend_Db_Table_Abstract, której klucz będziemy testować
  protected $_table;
 
  public function __construct(Zend_Db_Table_Abstract $table) {
    $this->_table = $table;
  }
 
  public function isValid($value) {
 
    // sprawdzamy czy zmienna nie jest nulem, a jeżeli tak to ustawiamy błąd
    if ($value === null) {
      $this->_error(self::NULLVALUE);
      return false;
    }
 
    // to samo dla pustego stringa
    if ($value === '') {
      $this->_error(self::EMPTYSTRING);
      return false;
    }
 
    $value = (int) $value;
 
    // ustawiamy wartość dla ewentualnego komunikatu %value%
    $this->_setValue($value);
 
    // metoda find szuka po kluczu podstawowym i zwraca rowset wyników
    $foundRows = $this->_table->find($value);
 
    // jeżeli nic nie znaleziono tzn. że sprawdzany klucz nie istenieje w tabeli bazy
    if (count($foundRows) == 0) {
      $this->_error(self::IDNOTEXISTS);
      return false;
    }
    else {
      return true;
    }
  }
}

Wszystko działa na tyle automagicznie, że tworząc jakiś element formularza wystarczy dodać stworzony walidator np. tak:

$formElement = new Zend_Form_Element_Select('pole_formularza');
$formElement->setRequired(true)
  ->setLabel('Jakaś etykieta')
  ->setMultiOptions($dane_do_wyboru)
  ->addValidator(new Spiechu_Validators_IsIdExists(new Sprawdzana_Tabela()));

Autor wpisu: Zyx, dodany: 02.12.2010 13:15, tagi: php

Doctrine to obecnie chyba najpopularniejsza biblioteka ORM dla PHP 5.2.x, chętnie wybierana zarówno przez zwykłych programistów, jak i twórców frameworków. Od jakiegoś czasu trwają prace nad zupełnie nową wersją 2.0, która została zaprojektowania od nowa i przyniosła znaczące uporządkowanie architektury. Od kilku miesięcy biorę aktywny udział w jej testowaniu i debugowaniu, dlatego przez ten czas udało mi się wyrobić już pewien sensowny osąd na jej temat, który chciałbym zaprezentować, by już teraz pomóc w odpowiedzi na pytanie "czy warto się przesiadać".

Autor wpisu: matipl, dodany: 01.12.2010 08:09, tagi: php

Zend FrameworkNo proszę, mimo czarnego listopada w Polsce na sam koniec miesiąca ukazała się połatana wersja Zend Frameworka oraz WordPressa.

Wczoraj wieczorem ukazała się wersja Zend Framework 1.11.1 (changelog) zawierająca wyłącznie łaty na znalezione błędy – łącznie 80. Nowa wersja ZF rozwiązuje m.in. problem z routingiem, poprawia obsługę YAML, włącza obsługę memcached w Zend_Cache_Backend.

Tego samego polskiego wieczoru ukazała sie poprawiona wersja WordPressa z linii 3.0 – WordPress 3.0.2. Tak jak w ZF skupiono się tutaj wyłącznie na łataniu znalezionych błędów. W sumie poprawiono 10 błędów (lista zmian), w tym dość ważny – poprawienie problemu zabezpieczeń, w przypadku gdy użytkownik z poziomem Autor mógł zdobyć dostęp do serwisu. Obecnie nie ma jeszcze aktualizacji dla polskiej wersji.

Wszystkim dotychczasowym użytkownikom ZF 1.11 oraz WordPress 3.0 zalecam aktualizację.

Autor wpisu: Wojciech Sznapka, dodany: 30.11.2010 22:07, tagi: php

On thursday 25th of November 2010 I passed Zend Certified Engineer exam for PHP 5.3 thanks to certification program in company where I work - XSolve. It's quite new exam, because of PHP 5.3, so I will describe my feelings and recomend you some helpful sources.

Autor wpisu: Daniel Burchardtt, dodany: 29.11.2010 21:50, tagi: php

Ping – nazwa programu używanego w sieciach komputerowych TCP/IP (takich jak Internet) służącego do diagnozowania połączeń sieciowych. Pozwala na sprawdzenie czy istnieje połączenie pomiędzy hostami testującym i testowanym. Umożliwia on także określenie jakości połączenia między nimi poprzez mierzenie liczby zgubionych pakietów oraz czasu potrzebnego na ich transmisję, czyli pomiaru latencji pakietów zwanej lagami.

http://pl.wikipedia.org/wiki/Ping

Interpretując definicję z Wikipedii, ping jest to nic innego jak komunikat pomiędzy dwoma miejscami w sieci.

W tym przypadku ping spełnia funkcje informacji wyszukiwarek itp. serwisów o nowych treściach na naszych stronach. Treścią taką może być np. nowy wpisy czy kategoria.

Gdzie pingować?

Pingowanie powinno następować do serwisów agregujących treści oraz serwerów rpc wyszukiwarek. Musi zawierać rodzaj pingu, tytuł pingowanego adresu oraz jego adres. W moim przypadku jest to www.katalog.hapart.pl, nowo tworzony katalog stron.

Przykładowa lista serwerów rpc do pingowania:

http://rpc.pingomatic.com/

http://blogsearch.google.ae/ping/RPC2

http://blogsearch.google.at/ping/RPC2

http://blogsearch.google.bg/ping/RPC2

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: batman, dodany: 29.11.2010 08:00, tagi: php

Styczność z serwerem Microsoftu miałem jeszcze w czasach, w których nazywał się on PWS (Personal Web Server). Wówczas korzystałem z niego jako serwera dla aplikacji pisanych w ASP (jeszcze przed erą .NET). Pamiętam, że serwer ten był dosyć awaryjny, co było jednym z powodów przesiadki na Apache i PHP. Kolejne podejścia do IIS, który wyparł PWS, nie były już tak traumatyczne, niemniej przyzwyczajenie do Apache wygrywało za każdym razem i IIS nie miał okazji zagościć u mnie na dłużej. W związku z serią PHP w chmurze, zacząłem zgłębiać tajniki IIS 7.5 i szczerze przyznam, iż miło mnie zaskoczył.

Instalacja PHP

Instalacja PHP na serwerze IIS jest niezwykle banalna i całkowicie zautomatyzowana. Wystarczy uruchomić Web Platform Installer (Web PI), przejść do zakładki Platforma sieci Web –> Struktury i środowiska wykonawcze. W sekcji PHP należy zaznaczyć PHP Manager for IIS oraz PHP 5.2.13 (nie jest to wymagane).

webpi

Ponieważ wymienione wcześniej elementy mam już zainstalowane, są one wyszarzone na powyższym screenie.

Po ukończeniu instalacji w Menedżerze IIS (Start –> Narzędzia administracyjne –> Menedżer IIS) powinna zostać dodana funkcja PHP Manager.

php-manager

Z poziomu PHP Manager mamy możliwość zmienić wszystko, co wiąże się z PHP. Dzięki ładnemu opakowaniu, wszystkie operacje, nawet rejestracja nowej wersji PHP oraz jej zmiana, są dziecinnie proste.

php-manager-options

Ostatnim etapem instalacji PHP na serwerze IIS jest wskazanie miejsca instalacji PHP (jeśli w Web PI wybraliśmy instalację PHP, wówczas nie musimy już nic robić). Można to zrobić klikając w link Register new PHP version. W oknie dialogowym, które się pojawi wystarczy wskazać miejsce instalacji PHP.

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Daniel Burchardtt, dodany: 27.11.2010 17:27, tagi: php

DNS (ang. Domain Name System, system nazw domenowych) to system serwerów, protokół komunikacyjny oraz usługa zapewniająca zamianę adresów znanych użytkownikom Internetu na adresy zrozumiałe dla urządzeń tworzących sieć komputerową. Dzięki wykorzystaniu DNS nazwa mnemoniczna, np. pl.wikipedia.org, może zostać zamieniona na odpowiadający jej adres IP, czyli 91.198.174.232

http://pl.wikipedia.org/wiki/Domain_Name_System

W czasie, gdy DNS był projektowany nikt nie pomyślał o tym, że zakres znaków [a-z0-9] będzie niewystarczający. W 2003 roku pierwsze domeny najwyższego poziomu (ang. TLD – Top-Level Domain) .info, .jp, .kr, .lt, .pl, .se itd. zaczęły rozszerzać zestaw znaków używanych w nazwach domen. Aktualnie większość TLD obsługuje domeny IDN.

IDN

Co to jest IDN? Jest to umiędzynarodowiona nazwa domeny (ang. IDN – internationalized domain name), gdzie nazwa domeny zawiera w sobie znaki spoza ASCII.

Niestety, obsługa domen IDN następuje po stronie klienta co oznacza, że przed wysłaniem adresu do serwera musi zostać zamieniona na ciąg ASCII. Kodowanie nazwy domeny do ASCII wykonuje się za pomocą algorytmu o nazwie Punycode.

Punycode

Punycode jest zdefiniowany w RFC 3492 dzięki czemu możemy przeanalizować jego działanie. Niestety analizowanie całej specyfikacji algorytmu zajmie dużo czasu, a tego nigdy za wiele :)

W sieci dostępna jest biblioteka o nazwie IDNA Convert, której mam zamiar użyć. Dostępna jest tutaj, a tutaj znajduje się strona projektu.

IDNA Convert

Biblioteka posiada dwie główne metody encode() oraz decode(), które odpowiednio realizują zamianę z IDN do ASCII oraz ASCII do IDN.

Przykładowa implementacj

<?php
require_once('idna_convert.class.php');

$IDN = new idna_convert();
echo $IDN->encode('http://www.świat.pl');
?>

Wynikiem będzie

http://www.xn--wiat-k5a.pl

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.