Blog webdeveloperski Patryk yarpo Jar

Instalacja pakietu z repozytorium PEAR

Autor wiadomości Listopad 7, 2010

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:
<pre>

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
Tagged as: , Dodaj komentarz
Komentarze (0) Trackbacks (0)

Brak komentarzy.


Leave a comment

 

Brak trackbacków.