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

Autor wpisu: SongoQ, dodany: 05.05.2009 14:00, tagi: php

Aktualizując ostanio serwer miałem problem z upgrade na nowszą wersje PostgreSQLa więc opiszę swoje rozwiązanie na blogu.

Jeśli mamy już zainstalowaną wcześniejszą wersje PostgreSQLa to robimy backup.

pg_dumpall > postgres-backup.dump

Następnie wrzucamy do /etc/portage/package.keywords wpisy w celu odblokowania wersji niestabilnych.

echo "dev-db/postgresql-base ~amd64" >> /etc/portage/package.keywords
echo "dev-db/postgresql-server ~amd64" >> /etc/portage/package.keywords
echo "virtual/postgresql-server ~amd64" >> /etc/portage/package.keywords
echo "virtual/postgresql-base ~amd64" >> /etc/portage/package.keywords
echo "app-admin/eselect-postgresql ~amd64" >> /etc/portage/package.keywords

Kolejnym etapem jest usunięcie dev-db/postgresql dev-db/libpq

emerge --unmerge dev-db/postgresql dev-db/libpq

I możemy instalować nową wersję PostgreSQLa

emerge virtual/postgresql-base virtual/postgresql-server
emerge --config =dev-db/postgresql-server-8.3.5

Zostaje tylko wystartowanie bazy i dopisanie do skryptów startowych.

/etc/init.d/postgresql-8.3 start
rc-update add postgresql-8.3 default

Jeśli z jakiś przyczyn php wyrzuca, że nie chce działać to musimy przekompilować.

Related Posts

Autor wpisu: WojciechNaruniec, dodany: 01.05.2009 17:22, tagi: php, zend_framework

Wczoraj w serwisie Zend Developer Zone ukazała się informacja, że dostępny jest już Zend Framework 1.8.0. Tę wersję można nazwać przełomową - w końcu pojawiły się narzędzia wspomagające szybkie tworzenie aplikacji (RAD). Teraz wywołaniem jednej komendy można utworzyć praktycznie całą strukturę projektu.

Autor wpisu: thejw23, dodany: 20.04.2009 18:45, tagi: php

nowa wersja dostepna na SVN, zmiany, glownie zwiazane z laczeniem metod:- dodane update(), tak dla porzadku skoro jest insert()- dodane select() aby ograniczyc liczbe zwracanych pol (wczesniej zawsze *)- dodane limit(), aby fetch_x mialo mniej parametrow- uwaga: w zwiazku z powyzszym fetch zgubilo parametr $limit- load() zwraca $thisdzieki temu mozna teraz w jednej linijce np. tak:
//pobranie 2 pol z limitem 3 rekordow$users=Simple_Modeler::factory('auth_users')->select('username','email')->limit(3)->fetch_all();//zaladowanie pojedynczego rekordu z bazy, username=janek$user=Simple_Modeler::factory('auth_users')->load('janek','username');

Autor wpisu: Tomasz Sh4dow Budzyński, dodany: 14.04.2009 15:12, tagi: php

Na pewno sporo osób próbowało swoich sił w stworzeniu skryptu do zliczania odwiedzin na stronie na podstawie logów z Apache’a. W sumie nic trudnego, schemat logów jest w miarę prosty, odczytać i po sprawie. A jak wygląda sprawa przy plikach wielkości setek megabajtów lub gigabajtów ? Trzeba sprytnie to odczytywać linia po linii, przeanalizować i wywalić z pamięci. A jak mamy dwa lub więcej rdzeni w procesorze, to może by tak parę linii na raz analizować ? Sama zasada jest dość prosta. Odczytujemy mały blok pliku i wyszukujemy gdzie jest znak końca linii. Jeśli nie znajdujemy to doczytujemy jeszcze kawałek. Jeśli już znaleźliśmy to odcinamy nasz kawałek i po sprawie. Przy wyszukiwaniu usuwamy wszystkie znaki powrotu karetki, jak by się znalazł jakiś plik z „enterami” z Windowsa.

$tresc = ''; //definiujemy zmienna 
$uchwyt = fopen('pliczek.log', "rb");
$tresc .= fread($uchwyt, 300 ); //dopisujemy do zmiennej kawałek pliku
$tresc = str_replace("\r",'',$tresc);
if( strpos( $tresc, chr(10) ) === false ) {
    //doczytujemy jeszcze kawalek i jeszcze raz szukamy i tak aż znajdziemy
} else {
    $strpos = strpos( $tresc, chr(10) ); //znajdujemy pozycje entera
    $linia = substr($tresc, 0, $strpos); //odcinamy interesujący nas odcinek
    $tresc = substr($tresc, $strpos+1, strlen($tresc) ); //i usuwamy odcięty kawałek od pobranej treści wraz z enterem i zostawiamy do następnego odczytu
   funkcjaAnalizujaca( $linia ); //możemy coś zwracać lub nie, to jest obojętne.
}

Oczywiście to trzeba ładnie ubrać w pętelkę gdzie będziemy się kręcić aż otrzymamy EOF (End Of File). Oczywiście można to wszystko ubrać w klasę, konfigurowalne zmienne, w dodatkowe zabawki typu zliczanie ilości linii, statystyka czasów analizy poszczególnych linii i inne wesołe rzeczy. Wszystkie takie rzeczy możecie podejrzeć w skrypcie który ja przygotowałem dla własnych celów, gdzie większość tych rzeczy jest już dodana.

Teraz apropo jednoczesnym przetwarzaniu więcej niż jednej linii jednocześnie. Niestety muszę zmartwić wielu z was, działa to jedynie pod systemami *unix oraz jedynie pod konsolą czyli wywoływane z linii poleceń. Windows oraz mod-php dla apache odpadają. To już jest ograniczenie od strony php. Będziemy korzystać z modułu Process Control, który nie jest domyślnie kompilowany do PHP. Żeby nie było nieścisłości to nie jest wielowątkowość ale fork czyli rozwidlenie procesu. Główny skrypt który jest rodzicem, tworzy dziecko które jest jego kopią. U nas tylko dzieci będą analizować pojedyncze linie logów, a rodzic będzie starał się nad tym „przedszkolem” zapanować. Zasady działania forków nie będę tłumaczył, jest Manual, jest Wikipedia no i Google. Wiec ustalamy sobie maksymalną ilość dzieci. Niestety w zależności od sprzętu możecie zrobić ich więcej lub mniej. Musicie po testować różne ustawienia. Więc przykładowo będziemy pracowali z czwórką dzieci. Jako że procesy się nie komunikują między sobą wykorzystamy funkcję, która obsługuje otrzymane sygnały (pcntl_signal) a dokładniej chodzi nam o sygnał zakończenia procesu dziecka czyli SIGCHLD. Przy tworzeniu dziecka powiększamy licznik o 1 a gdy otrzymamy sygnał zamknięcia pomniejszamy. W ten sposób jesteśmy w stanie jakoś zapanować nad tym wszystkim. a oto przykład (brany gdzieś z manuala ale ten jest w miarę przejrzysty):

$child = 0;
$max=3;
function sig_handler($signo) {
    global $child; //zmienna która trzyma ilość "wyprodukowanych" dzieci
    switch ($signo) {
        case SIGCHLD:
            --$child;
            break;
        //tutaj możemy obsługiwać inne sygnały jak na przykład zamkniecie głównego skryptu, lub dowolnie wybrane przez nas sygnały
    }
}
 
pcntl_signal(SIGCHLD, "sig_handler");
 
for( $a=0; $a < 20; $a++ ) {
	$child++;
	$pid=pcntl_fork();
 
	if ($pid == -1) {
		die("Nie mozna zrobić dziecka");
	} elseif ($pid) {
 
		if ( $child >= $max ) {
			echo "Za dużo dzieci w przedszkolu \n";
			pcntl_wait($status);
		}
	} else {
		sleep( rand(1,10) );
		file_put_contents('./file.log', $a.'.', FILE_APPEND );  //zadanie do wykonania
		//dla przykładu wykonujemy zapis do pliku dla każdego dzieciaka, żeby pokazać że to naprawdę działa
		// a sleep pokaże ze czasami w różnych kolejnościach będzie to wykonywane, ze względu na rożny czas wykonania zadania
 
		exit;
	}
}

Tyle mechanizmu, który czyta plik. Jeśli chodzi o analizę pliku to już zależy co my tam robimy. Jako że kiedyś przymierzałem się do jakiegoś dużego analizatora to wykombinowałem takie małe wyrażenie regularne. Znając życie albo posiada błędy albo można go jeszcze zoptymalizować. Może i kiedyś przy tym usiądę ale chyba nie dziś. A oto ten malutki tasiemiec.

preg_match('/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) ([^\s]+) ([^\s]+) \[(\d{2}\/[a-zA-Z]{3}\/\d{4}:\d{2}:\d{2}:\d{2} [+|-]\d{4})\] "(?:(POST|GET|PUT|DELETE|CONNECT|OPTIONS|HEAD|TRACE) ((?:http:\/\/|\/)?[^\s]*(?:\/[^\/\s]*)?) (HTTP\/\d\.\d))" ([1-5]\d{2}) (-|\d+) "([^"]*)" "([^"]*)"/', $linia, $match);
list($calosc, $ip, $niemampojecia, $http_user, $data, $method, $url, $http_protocol, $http_code, $transfer, $referrer, $user_agent) = $match;

Oczywiście można to po swojemu wykorzystać. Ja osobiście, najczęściej zliczam wykorzystany transfer przez daną domenę. A jeśli chcecie zobaczyć jak tą całą opowieść ubrałem w skrypt to zapraszam do ściągnięcia pliku gdzie jest spakowany skrypt główny oraz przykładowe rozszerzenie do analizy logów ‘Combined’ z Apache. Należy pamiętać, że skrypt który zlicza transfer z logów, nie powinien działać w trybie „pseudo-wielowątkowy”, ponieważ transfer jest zliczany w pamięci php, czyli jest zapisany w zmiennych. Jeśli ktoś ma ochotę to może przerobić tak skrypt aby zliczał transfer w pliku, w bazie danych lub innym zewnętrznym nośniku.

Autor wpisu: Zyx, dodany: 05.04.2009 09:42, tagi: php

Niedawno, przy okazji wpisu o integrowaniu Doctrine z ZF-em obiecałem, że następnym razem napiszę o współdziałaniu Open Power Template'a 2. Dlatego dzisiejszy wpis będzie poświęcony właśnie temu zagadnieniu. Integracja obu tych bibliotek jest o tyle prosta, że rozwijany jest port, który pozwala szybko połączyć jedno z drugim, lecz należy pamiętać, iż w przeciwieństwie do większości innych rozwiązań, nie bazuje on na zwykłym rozszerzeniu klasy Zend_View, lecz na wymianie całej warstwy widoku.

Autor wpisu: Zyx, dodany: 25.03.2009 11:07, tagi: php

Siedzę sobie ostatnio i dłubię przy oficjalnym porcie bibliotek OPL dla Zend Frameworka, a ponieważ OPL na dzień dzisiejszy składa się właściwie wyłącznie z Open Power Template'a, moje zadanie sprowadza się do przeprojektowywania obsługi literki V w zendowej implementacji MVC. Muszę powiedzieć, że inwencja programistów jest naprawdę powalająca, a to, co wyczyniają, by wyświetlić trochę kodu HTML, byłoby całkiem silną nominacją do konkursu jak maksymalnie skomplikować prostą czynność.

Autor wpisu: nospor, dodany: 24.03.2009 13:37, tagi: php

Wzorzec obserwator to moim zdaniem jeden z ciekawszych wzorców jakie wymyślono. Korzystam z niego od dłuższego czasu i muszę powiedzieć jest bardzo przydatny. Bardzo pomaga w wyodrębieniu funkcjonalności oraz zapobiega wrzucania wszystkiego do jednego wora.
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.