punbb

PunBB AdSense Manager

0

Rozszerzenie do PunBB, dzięki któremu można zarządzać reklamami na forum. Pozwala na dodanie reklamy w nagłówku oraz reklamy za pierwszym postem.

http://quadric.goblix.pl/download/?did=98

punbb

PunBB SEO Optimizer

0

Rozszerzenie, do PunBB 1.4 które dba o to aby właściwie przekierowywać schematy adresów między sobą na te, które powinny być docelowo. Dodatkowo wprowadza tytuł forum do treści linka tematu, dzięki czemu adres jest bardziej szczegółowy

http://quadric.goblix.pl/download/?did=93

punbb

PunBB Image Assistant

0

Przygotowalem plugin do PunBB, dzięki któremu można w sposób łatwy i wygodny dodawać zdjęcia do postów a także używać już wcześniej wgranych.

http://quadric.goblix.pl/download/?did=97

punbb

PunBB Google Analytics Integration

0

Jakoś mnie wzięło ostatnio na robienie rozszerzeń do forum PunBB.

Tym razem: PunBB Google Analytics Integration 1.0.0

Rozszerzenie pasuje do wersji 1.4 forum PunBB

punbb

Paczka językowa do PunBB 1.4

0

Jeśli ktoś interesuje się forum PunBB http://punbb.informer.com/ to przygotowałem właśnie do najnowszej wersji polską paczkę językową.

punbb-1.4.1-lang_pack-pl-1.0.0

Dyskusja i aktualizacje na forum PunBB: http://punbb.informer.com/forums/post/142372

xampp-logo_1

XAMPP, Windows i najnowszy PHP

0

Wiele osób korzysta z pakietu XAMPP jako serwer developerski na platformie Windows. Z mojego doświadczenia mogę powiedzieć, że sprawdza się on bardzo dobrze. Przez wszystkie wersje pakietu nie miałem problemów aż do wersji 1.7.4. Niestety mimo wielu prób, szukania informacji na forum, stosowania najprzeróżniejszych rozwiązań nie udało mi się doprowadzić tego pakietu do stanu używalności. Głównym problemem jest to, że najnowsza wersja została skompilowana pod platformę VC9 (która jest przystosowana do serwera IIS), a większość pakietów jest dostępna w wersji VC6. Poza tym w wersji VC9 na serwerze Apache nie działa to ze sobą zbyt dobrze.

Do tej pory używałem wersji 1.7.3, która działa bez najmniejszych problemów, ale ma już swoje lata a potrzebny był mi nowszy PHP (w tej wersji jest to 5.3.1)

Jak więc posiadać dobrze działający pakiet XAMPP z najnowszą wersją PHP?

  1. Ściągnij i zainstaluj wersję 1.7.3, która działa bez najmniejszych problemów http://sourceforge.net/projects/xampp/files/XAMPP%20Windows/1.7.3/ chyba, że już posiadasz ten pakiet.
  2. Ściągnij paczkę PHP dla Windows (obecnie najnowsza wersja 5.3.6 jest dostępna tylko w wersji VC9 a nam potrzebna VC6, więc ściągnij stąd http://windows.php.net/downloads/releases/archives/ pakiet o nazwie php-5.3.5-Win32-VC6-x86.zip
  3. Wypakuj pakiet php-5.3.5-Win32-VC6-x86.zip gdzieś na dysk
  4. Przekopiuj zawartość wypakowanego katalogu do C:\xampp\php
  5. Podmień stary plik php.ini na nowy php.ini-development lub php.ini-production
  6. Ciesz się XAMPP’em z najnowszym PHP
img_68644c77ea5d1f6ae

PHP 5.3.3 i konstruktor

0

Podczas pracy nad frameworkiem napotkałem na bardzo dziwny błąd (jak mi się wtedy wydawało). Miałem klasę “Index” i metodę “index”. Podczas tworzenia instancji klasy ciągle mi się uruchamiała automatycznie ta metoda. Doszedłem chyba po 2 godzinach do tego, że to nie błąd tylko feature. Już tak dużo czasu minęło, że zapomniałem, że PHP traktuje metody o takiej samej nazwie jak klasa jako jej konstruktor. Trochę mnie to załamało, bo moje MVC jest oparte o takie założenie, a twórcy PHP zostawili taką możliwość jako wsteczną kompatybilność.

Na szczęście doczytałem, że od wersji PHP 5.3.3 zmieniło się zachowanie szukania konstruktorów i teraz tego typu metoda traktowana jest jako zwykła metoda a nie jako konstruktor. Uff!

ArDrone

0

Jako pasjonat zabawek i technologi…

…a zresztą, zobaczcie sami.

Wydajność dostępu do pól klasy

0

Przedstawiona teoria dotyczy wielu języków interpretowanych… m.in PHP i Python.

Jeżeli posiadasz złożone klasy zawierające wiele pól (czy to statycznych i dynamiczny) i w swoich metodach wykorzystujesz je dosyć często, np w ten sposób:

	public static function fetchAll($query = null, $args = array())
	{
		$sql = 'SELECT ' . static::$_columns . ' FROM ' . static::$_table . (isset(static::$_joinLeft[static::$_table]) ? static::$_joinLeft[static::$_table] : null);

		if ($query) {
			$sql .= ' WHERE ' . $query;
		}

		$collection = array();

		if (empty(self::$_selectQuery[static::$_table]) || self::$_selectQuery[static::$_table] != $sql) {
			self::$_selectStatement[static::$_table] = Database::getInstance(static::$_database)->prepare($sql);
			self::$_selectQuery[static::$_table] = $sql;
		}

		foreach($args as $k => $v) {
			self::$_selectStatement[static::$_table]->bindValue($k+1, $v);
		}

		self::$_selectStatement[static::$_table]->execute();

		// --

 		return $collection;
	}

to w takim przypadku system będzie każdorazowo musiał odpytać do pamięci o to pole. Niestety ale tak to działa. Można znacznie przyspieszyć wykonywanie tego kodu poprzez stworzenie lokalnej wartości, tak aby nie było konieczności każdorazowego odwoływania się do klasy. Zrobiłem szybki test w którym stworzyłem 4 klasy:

class A {

	public static $_a = 4;

	public function a() {

		$a = self::$_a;
		$b = self::$_a;
		$c = self::$_a;
		$d = self::$_a;
		$e = self::$_a;
		$f = self::$_a;

	}
}

class B {

	public static $_a = 4;

	public function a() {

		$local = self::$_a;
		$a = $local;
		$b = $local;
		$c = $local;
		$d = $local;
		$e = $local;
		$f = $local;

	}
}

class C {

	public $_a = 4;

	public function a() {

		$a = $this->_a;
		$b = $this->_a;
		$c = $this->_a;
		$d = $this->_a;
		$e = $this->_a;
		$f = $this->_a;

	}
}

class D {

	public $_a = 4;

	public function a() {

		$local = $this->_a;
		$a = $local;
		$b = $local;
		$c = $v;
		$d = $v;
		$e = $local;
		$f = $local;

	}
}

Jak widać nie robią one nic niesamowitego, ale robią w zasadzie to samo… tylko, że w różny sposób:

Test polegał na utworzeniu instancji i wywołaniu na każdej instancji 1 mln razy metody a()

Wyniki są następujące:

dla Windows

A: static 1.1116s
B: static with local 0.6764s
C: dynamic 0.9799s
D: dynamic with local 0.6258s

Jak widać, poprzez utworzenie zwykłej zmiennej, która ma dostęp lokalny uzyskujemy prawie 2x przyspieszenie wykonywania kodu.

PHP 5.3 – dirname(__FILE__) vs __DIR__

0

Jedną z najczęstszych optymalizacji kodu jest ładowanie plików z lokalizacji bezwzględnej gdyż ogranicza to konieczność przeszukiwania przez PHP ścieżek include_path. Skrypt, który wykonuje:

require 'd:/www/frame/dev/Core.php';

zadziała szybciej niż

require 'Core.php'

Dlatego przy dyrektywach require i include można najpierw zbadać położenie skryptu aby opracować ścieżkę dostępu. Najczęściej stosuje się polecenie:

$path = dirname(__FILE__);

w rezultacie otrzymamy katalog w którym znajduje się obecnie uruchomiony skrypt. W bardzo wielu systemach jest to używane. Jednakże od wersji PHP 5.3 istnieje stała __DIR__, która zwraca dokładnie to co powyższy kod. Dlaczego warto jej używać? Szybki benchmark:

ile trwa wywołanie po 1 mln razy:

__DIR__ 0.1562s
dirname(__FILE__) 0.4114s

Wynik nie powinien nikogo dziwić, zatem myślę, że warto się na tę stałą przestawić.

Go to Top