W tym artykule mam zamiar pokazać, jak szybko instalować przydatne pakiety z repozytorium PEAR. Jeśli jeszcze nie posiadasz zainstalowanego repo, to zobacz jak zainstalować PEAR.
Przykładowe ropozytorium
Spróbujmy pobrać Math_Complex. Pakiet pozwalający operować na liczbach zespolonych. W wierszu poleceń:
pear install Math_Complex
W wyniku pokazuje się [u mnie, może u Ciebie będzie inaczej]:
Failed to download pear/Math_Complex within preferred state "stable", latest release is version 0.8.5, stability
"beta", use "channel://pear.php.net/Math_Complex-0.8.5" to install
Cannot initialize 'channel://pear.php.net/Math_Complex', invalid or missing package file
Package "channel://pear.php.net/Math_Complex" is not valid
install failed
No, jakby nie patrzeć, coś nie tak. Spokojnie, spróbujmy tak:
pear install Math_Complex-0.8.5
W wyniku otrzymuję:
D:\programy\wamp\bin\php\php5.2.9-2>pear install Math_Complex-0.8.5
WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
Did not download dependencies: pear/Math_TrigOp, use --alldeps or --onlyreqdeps to download automatically
pear/Math_Complex requires package "pear/Math_TrigOp" (version >= 1.0)
No valid packages found
install failed
Znowu coś nie tak, ale już bliżej :). Idziemy za ciosem i robimy o co nas proszą:
D:\programy\wamp\bin\php\php5.2.9-2>pear channel-update pear.php.net
Updating channel "pear.php.net"
Update of Channel "pear.php.net" succeeded
Może teraz się uda:
pear install Math_Complex-0.8.5
Did not download dependencies: pear/Math_TrigOp, use --alldeps or --onlyreqdeps to download automatically
pear/Math_Complex requires package "pear/Math_TrigOp" (version >= 1.0)
No valid packages found
install failed
No, niestety nie. Ale jesteśmy blisko, bo już takie polecenie załatwi sprawę:
pear install --alldeps Math_Complex-0.8.5
downloading Math_Complex-0.8.5.tgz ...
Starting to download Math_Complex-0.8.5.tgz (40,930 bytes)
...........done: 40,930 bytes
downloading Math_TrigOp-1.0.tgz ...
Starting to download Math_TrigOp-1.0.tgz (1,613 bytes)
...done: 1,613 bytes
install ok: channel://pear.php.net/Math_TrigOp-1.0
install ok: channel://pear.php.net/Math_Complex-0.8.5
Łałałibi! Czas zatem wykorzystać nasz nowo zainstalowany pakiet.
Wykorzystanie pakietów z PEAR
Jak być może pamiętasz, zezwoliłeś na zmienę w pliku 'php.ini'. Dzięki temu instalowane pakiety PEAR będą dostępne na twoim lokalnym serwerze, tak jakbyś je miał w każdym katalogu. Nie musisz podawać żadnej ścieżki do nich. Oto przykład, umieść go w pliku index.php w katalogu głównym twojego serwera:
require_once '/Complex.php';
Po uruchomieniu serwera (jeśli podczas instalacji PEAR był włączony należy go zrestartować), i wpisaniu adresu "http://localhost/index.php" zobaczysz coś takiego:
Warning: require_once(Complex.php) [function.require-once]: failed to open stream: No such file or directory in F:\vhosts\mc\index.php on line 2
Fatal error: require_once() [function.require]: Failed opening required 'Complex.php' (include_path='.;c:\php\includes') in F:\vhosts\mc\index.php on line2
Co znowu?!
Konwencja nazewnicza PEAR
W PHP do wersji 5.3 nie było przestrzeni nazw. W repozytorium PEAR wprowadzono coś co pozwalało na im naśladowanie. Otóż, klasa składała się z kilku członów. Jak np. "Math_Complex". Jednak tylko "Complex" odnosi się bezpośrednio do klasy, całość wcześniej pozwala na określenie położenia danej klasy w strukturze pakietów. Czyli Math/Complex. Zobaczmy tak:
require_once 'Math/Complex.php';
Dla Wampa (być może innych serwerów też)
W przypadku mojego Wampa nadal był błąd. Okazało się, że posiadam dwa pliki 'php.ini'. Jeden w katalogu PHP, drugi w katalogu Apache. W katalogu PHP zostało dodane:
;***** Added by go-pear
include_path=".;D:\programy\wamp\bin\php\php5.2.9-2\pear"
;*****
W pliku `.../Apache/Apache2.2.11/bin/php.ini' musiałem dodać taką linię ręcznie:
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
include_path=".;D:\programy\wamp\bin\php\php5.2.9-2\pear"
Po tej zmienie i restarcie serwera wszystko działało.
Działa. Jak miło :). Tzn, póki co nie ma błędów.
Działający przykład
Jeśli wykonałeś wszystkie wcześniejsze kroki, to już ten kod powienien się wykonać:
<?php
require_once 'Math/Complex.php';
$oMc = new Math_Complex(12.3, 1.0);
echo "Jestem liczbą zespoloną. Moja część rzeczywista to: " . $oMc->getReal() . ", a część urojona wynosi " . $oMc->getIm();
Powyższy kod powinien zwrócić:
Jestem liczbą zespoloną. Moja część rzeczywista to: 12.3, a część urojona wynosi 1
|