ugrás a tartalomhoz

PEAR DB modul nem ad életjelet

Gal Kristof · 2006. Május. 5. (P), 11.29
Kezdetben próbáltam feltenni a PEAR DB modult. (A PEAR-rel most ismerkedek, tapasztalat zéró.) Kikövetkeztettem, hogy kell hozzá a PEAR alapcsomag. :) (Jött a hibaüzenet, hogy nem találja a PEAR.php-t) Feltettem a PEAR alapcsomagot, a hibaüzenet megszünt a DB include-nál. A hiba itt jön.

Látszólag rendben beolvassa mind a PEAR-t mind a DB modulját, de mintha nem működne. Ha connect-elni próbálok, akkor szinte bármit írok be user-nek, pass-nek, as iserror-ral nem hoz hibát, bár egyszer kiírt valamit, amikor direkt hibát próbáltam előállítani (rendes DB error a modulból, erre rájöttem azért). Végül arra is rájöttem, hogy a connect hívásánál egyszerűen lehal, nem megy tovább, viszont hibát sem ír ki. Mi a fene lehet?
 
1

hiba megjelenítése

Hodicska Gergely · 2006. Május. 5. (P), 11.54
PHP-ban állítsd be:
display_errors = On
error_reporting = E_ALL

PEAR-nek pedig még a legelején mondj egy ilyet:
PEAR::setErrorHandling(PEAR_ERROR_PRINT);

Ezek után meg kell jelenie a hiba okának.


Felhő
2

nem, nem és nem

Gal Kristof · 2006. Május. 5. (P), 12.09

set_include_path('/home/****/pear/PEAR');
require_once ( '/home/****/pear/db/DB.php' );

PEAR::setErrorHandling(PEAR_ERROR_PRINT);

ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', 1);

$user = 'foo';
$pass = 'bar';
$host = 'localhost';
$db_name = 'clients_db';

$dsn = "mysql://$user:$pass@$host/$db_name";

$db = DB::connect($dsn);

if (DB::isError($db)) {
        die ($db->getMessage());
}
$db->disconnect();
most már csak ennyi az egész kód, de semmi jelet nem ad magáról, érthetetlen. a megadott adatok (user, pass, stb) természetesen rosszak, hibát kéne jeleznie.

azért tuti, hogy megy maga a modul, mert ha pl. a mysql helyére valami baromságot írok, akkor rendes PEAR DB-s hibát ír ki, de semmi más hibánál nem jelez, sőt leáll a connect függvény hívásánál, de nem ad hibaüzit.
3

akkor debug

Hodicska Gergely · 2006. Május. 5. (P), 12.51
Akkor egy ötletem lenne még egy saját hibakezelő beizzítása. Elképzelhető, hogy a hibát okozó kódrészletet közvetlenül, vagy közvetve megelőzi egy @, ezért nincs hibaüzenet. A hibakezelő ellenben ezt is megkapja. PEAR_ERROR_CALLBACK-et kell ehhez megadnod, meg egy függvényt a setErrorHandling-nál.
Ha nem jön be, akkor nincs más választásod, mint hogy debugolnod kell a cuccot. Szépen menj lefele a hívási láncban, amíg meg nem találod, hogy melyik utasításnál hasal el. Aztán majd valszeg jön a homlokra csapás. :) Ehhez (a debughoz, nem a homlokcsapáshoz) használhatsz valamilyen debuggert is, akár egy Zend Studio próbaverziót is.


Felhő
4

előfordulhat ilyen?

Gal Kristof · 2006. Május. 5. (P), 13.02
jó, na de az hogy lehet, hogy a legújabb PEAR DB modulban ilyen előfordul? nem értem.
5

látatlanban...

Hodicska Gergely · 2006. Május. 5. (P), 13.14
...erre nem nagyon tudok mit válaszolni. Nem tudhatom, hogy milyne környezetben, mivel próbálkozol. Szóval passz. Ha a connect() uátn mondjuk teszel egy echo 1-et, és az nem ír ki semmit, és van saját hibakezelőd, és az sem hívódik meg, akkor ott valami nagyon gyanús dolog lehet. Pl. jártam már úgy, hogy egy nem jól forgatott Oracle esetében az ocilogon függvény nem tért vissza, és mivel ez külső erőforrással való babrálás, ilyenkor az PHP sem timeoutol. Egy tippnek kapásból mondanám is, hogy keresd meg, hogy hol adja ki a mysql_connect utasítást, és ez elé, meg mögé tegyél valami kiíratást, és nézd meg, hogy mi történik.


Felhő
6

fejlemény

Gal Kristof · 2006. Május. 5. (P), 13.19
belemásztam a db.php fájlba, és rájöttem, hogy a connect-nek van egy opcionális paramétere (egy tömböt lehet átadni) amiben pl. van egy debug nevű kapcsoló, és ahogy látom, ha ennek az értéke nincs beállítva vagy 3nál kisebb akkor @-al hív meg egy require parancsot. most a debugot átállítottam és látok fényt az alagút végén :)

edit: ahogy nézem, ez - bár nem egyértelműen sztem - de a dokumentációban is le van írva. :) azért furcsa, hogy alapból letilt egy ilyen szintű hibát.
7

kezdjük előlről

Gal Kristof · 2006. Május. 5. (P), 13.53
most már ad életjelet, de unknown error van. szeretném, ha egy rutinosabb PEAR-es megmondaná jól installáltam-e fel a cuccot.

go-pear.php elindítása a szerverre másolása után.

root könyvtár megadása a public könyvtáron kívül eső részre.

látszólag sikeres felinstallálás, a lépések végrehajtása.

DB modul bemásolása egy szintén nem public könyvtárba.

set_include-ok megadása a az alap PEAR és a DB modul helyére.

a DB.php include-olása.

ezután a megfelelő jelszó, db név, stb megadása után a DSN összeállítása és ezzel a connect() hívása. minden stimmel, unknown error.

van valakinek hasonló tapasztalata, vagy másszak bele a lelke legaljára...?

4.3-as a PHP és 4.1-es a MySQL, gyanakszom ezekre is, mert mintha úgy adná meg, hogy 4.0-ás sql alatt mysql 4.1 vagy felette viszont már mysqli kell, ez utóbbihoz viszont már PHP5
8

PEAR modul telepítés

Poetro · 2006. Május. 5. (P), 15.32
Ha már fentvan a PEAR akkor lennie kell egy pear futtatható fájlnak (.bat, .sh). Ezzel érdemes modulokat telepíteni.
# pear intall DB

illetve frissíteni:
# pear upgrade DB
# pear upgrade-all
9

off

Gal Kristof · 2006. Május. 5. (P), 16.02
csak ftp hozzáférésem van. nem egyértelmű számomra, hogy magán a szerveren, a szolgáltató felől nem kell valaminek fent lennie?
10

Próba

Poetro · 2006. Május. 5. (P), 18.00
Próbáld ki saját gépeden a PEAR-t.
Telepítsd fel, telepíts minden modult, ami kelleni fog, és az egész PEAR könvytár tartalmát másold fel a szerverre. Így mennie kell.
11

nem kell trükk

Gal Kristof · 2006. Május. 5. (P), 18.17
ezek szerint a szolgáltató szerverén elég csak úgymond felmásolni a cuccot egy helyre, és hivatkozni rá? semmi install nem kell azon az oldalon?
12

Igen

Poetro · 2006. Május. 5. (P), 18.38
Így van. De előbb persze saját gépeden próbáld ki, hogy minden klappol.