Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

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...

Autor wpisu: sokzzuka, dodany: 27.11.2010 09:41, tagi: php

I stało się, wyśniona przez niektórych funkcjonalność – wywoływanie metody w jednej linii z konstrukcją obiektu zostało zgłoszone jako RFC.  Co to oznacza ? O ile zostanie zaakceptowane, będziemy mogli pisać tak:


new Foo()->ala()->ma()->kota();

zamiast:


$foo = new Foo();
$foo->ala()->ma()->kota();

Jak to mówią, mała rzecz a cieszy. Prawdopodobnie przejdzie, sądząc po wypowiedziach deweloperów na liście. Cieszycie się ?

Autor wpisu: batman, dodany: 26.11.2010 19:10, tagi: php

Dzisiaj na blogu Maartena Balliauwa pojawiła się ciekawa informacja dla wszystkich programistów PHP, którzy chcą zapoznać się z platformą Windows Azure.Pod egidą Microsoftu wystartował serwis Windows Azure for PHP.

W serwisie można znaleźć informacje na temat Windows Azure oraz tutoriale związane z programowaniem w PHP w oparciu o chmurę Microsoftu. Oczywiście nie mogło zabraknąć działu download pozwalającego pobrać niezbędne narzędzia oraz “forum”. Ponieważ serwis jest bardzo młody, tymczasową rolę forum przejął serwis StackOverflow.

Jeśli nie możecie doczekać się kolejnych moich wpisów z serii PHP w chmurze, zaglądajcie do Windows Azure for PHP.

Autor wpisu: sokzzuka, dodany: 26.11.2010 17:12, tagi: php

Może kogoś zdziwić ten tytuł. Co transmutacja, czyli znana z alchemii (i Diablo 2) zamiana jednego przedmiotu w inny ma wspólnego z PHP ? Ma wspólnego i to wiele. Wystarczy sobie uświadomić, że przedmioty to obiekty. To czym jest obiekt, determinuje jego klasa (a raczej podobieństwo obiektów tworzy klasę ale nie w tym rzecz). Jak wszyscy wiemy,  w języku PHP, rzutowanie możliwe jest tylko pomiędzy typami prostymi oraz object i array. Odnosząc to na świat rzeczywisty, rzutowanie jest właśnie ową „transmutacją”.Jak już wspominałem, rzutowanie jest mocno ograniczone. Może rzadko, ale zdarza się, że chcielibyśmy zmienić typ jakiegoś obiektu. Ostatnio natrafiłem się na poniekąd podobną sytuację. Chciałem zaimplementować prosty DataMapper. Tak dla małego przypomnienia jest to wzorzec projektowy, dzięki któremu możemy zapisywać obiekty w relacyjnej bazie danych oraz je stamtąd wyciągać. Czyli koniec końców jest to część składowa ORM-a. Jednak nie jest to mechanizm w stylu ActiveRecord (Doctrine 1) – zapisywane klasy nie dziedziczą z żadnej klasy bazowej.  DataMapper (Doctrine 2), dzięki refleksji, potrafi sam dowiedzieć się wszystkiego o dowolnym obiekcie i zapisać go w bazie a później odtworzyć, bez konieczności „dostosowywania” obiektu do jego wymagań.

O ile jeszcze zapisanie obiektu w bazie to pikuś, to odtworzenie go jest w pewien sposób problematyczne. Problemem jest to, że jeżeli obiekt ma w sobie prywatne pola, które mają być zapisane w bazie, natomiast nie ma żadnych metod na ustawianie ich, to obiekt zawsze będzie odtworzony w sposób niekompletny. Mały przykład dydaktyczny:

class Example {
    private $_foo = 5;
    private $_bar = 6;

    public function __get($name){
        $sField = '_'. $name;
        return $this->$sField;
    }

    public function __set($name, $value){
        throw new LogicException('This object is readonly!');
    }

    public function doSomething(){
        //...
    }
}

Jak widać, możemy pobierać zawartość pól, jednak nie możemy ich ustawiać. Po krótkim namyślę jak rozwiązać problem nie zmieniając klasy Example, można się rozmarzyć, że w innym języku może dało by się zrzutować array z danymi pobranymi z bazy na obiekt klasy Example i było by po sprawie. Jak wiadomo, w PHP się nie da.  Ale od czego mamy zakazane techniki ? Ta krótka funkcja zrealizuje to, czego nam potrzeba:

function transmutate(array $data, $className) {
    $oReflector = new ReflectionClass($className);
    $aDefaultProperties = $oReflector->getDefaultProperties();
    $aInstanceVars = array_merge($aDefaultProperties, $data);

    $aObjectPrototype = array();

    foreach ($aInstanceVars as $field => $value) {
        $sField = "\0" . $className . "\0" . $field;
        $aObjectPrototype[$sField] = $value;
    }

    $oContainer = (object) $aObjectPrototype;
    $sContainer = serialize($oContainer);

    $aContainer = explode(':', $sContainer);
    $aContainer[1] = strlen($className);
    $aContainer[2] = '"' . $className . '"';
    $sContainer = implode(':', $aContainer);

    $oResult = unserialize($sContainer);
    return $oResult;
}

Oraz przykład użycia:

$aData = array('_foo' => 7, '_bar' => 8);
$oExample = transmutate($aData, 'Example');
var_dump($oExample);
/* efekt:
object(Example)#3 (2) {
  ["_foo:private"]=>
  int(7)
  ["_bar:private"]=>
  int(8)
}
 */

Co do samej funkcji, to pomijając aspekt wyciągania informacji za pomocą refleksji. To używa ona funkcji serialize i unserialize. Jest to spowodowane tym, że PHP, odtwarzając zserializowany obiekt po pierwsze nie uruchamia jego konstruktora, a po drugie nie przejmuje się widocznością zmiennych i jest to główny klucz do sukcesu.

Podsumowując,  jest to ciekawy trik, jednak jeżeli nie piszecie DataMappera, lub nie jest to wasza ostatnia deska ratunku, nie używajcie go. Nie bez powodu jest to „zakazana” technika ;)

P.S

Od bodajże PHP 5.3.2 albo 5.3.3 można uzyskać podobny efekt (zmiana wartości zmiennych prywatnych/chronionych z zewnątrz obiektu) poprzez metodę ReflectionProperty::setAccessible.

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