TomIRL: PEAR in Webprojekt integrieren.

Hallo liebe Forumsgemeinde,
Ich habe für ein paar kleinere Programmierungen einige PEAR Klassen verwendet. Lokal auch kein Problem alles schön installiert ging auch so weit.
Nun sollte diese Projekt auf einem Server zum Einsatz kommen, der kein PEAR installiert hat. Ich habe keine ROOT, und der Provider hat PEAR erst in einem höheren Paket im Einsatz.
Nun dachte ich mir es sollte ja auch kein Problem sein PEAR in das Projekt einzubinden, habe ich schon mehrfach gesehen.
Also PEAR runtergeladen und auf die Platte gemacht.
Fogendes zu meinen Skripten hinzugefügt:
ini_set('include_path', '/blablablub/pear')
Dies habe ich sowohl absolut also mit vollständigen Serverpfad als auch relativ probiert. Ergebnis ist kann die üblichen
require_once 'config/config2 nur noch in jenem Includ Verzeichnis ausführen, außerdem scheint verschiedenes anderes nicht zu funktionieren, wobei ich die Fehler der Reihe beheben möchte.

Hat jemand einen Tip für mich wie man so etwas lösen kann?
Habe ich etwas übersehen?
TomIRL

  1. hi,

    Fogendes zu meinen Skripten hinzugefügt:
    ini_set('include_path', '/blablablub/pear')

    Du hast jetzt also den include-Pfad auf genau ein Verzeichnis gesetzt; ggf. vorher vorhandene weitere Pfade hast du damit überschrieben.

    Ergebnis ist kann die üblichen require_once 'config/config2 nur noch in jenem Includ Verzeichnis ausführen

    Natürlich, du hast den Pfad ja ... siehe oben.

    Hat jemand einen Tip für mich wie man so etwas lösen kann?

    Vielleicht mal den include_path nicht überschreiben, sondern erweitern?
    (Dazu bspw. vorher mit ini_get() aktuelle Einstellung auslesen, und mit ini_set() diesen Wert plus deine Erweiterung für's PEAR-Verzeichnis neu setzen. Oder das ganze, sofern möglich, gleich per .htaccess machen.)

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Vielleicht mal den include_path nicht überschreiben, sondern erweitern?
      (Dazu bspw. vorher mit ini_get() aktuelle Einstellung auslesen, und mit ini_set() diesen Wert plus deine Erweiterung für's PEAR-Verzeichnis neu setzen. Oder das ganze, sofern möglich, gleich per .htaccess machen.)

      Ahja der Mechanismus mit dem überschreiben war mir nicht ganz klar.
      PEAR schlägt folgendes vor, funktioniert aber bei mir nicht, wobei ich nicht weis was mit PATH_SEPARATOR gemeint ist.

      <?php
      ini_set('include_path', '~/pear/lib' . PATH_SEPARATOR . ini_get('include_path'));
      ?>

      TomIRL

      1. Moin,
        Außerdem, Ich finde die ganze Seite nicht mit den Konfigurationsmöglichkeiten über ini_set () bzw. was nur über die php.ini einzustellen geht bzw. was über.htaccess geht oder über die Skripte selbst.
        TomIRL

        1. hi,

          Außerdem, Ich finde die ganze Seite nicht mit den Konfigurationsmöglichkeiten über ini_set () bzw. was nur über die php.ini einzustellen geht bzw. was über.htaccess geht oder über die Skripte selbst.

          Auf der Seite, die ich dir bereits verlinkt hatte, der obere Punkt im Menü oben links: List of php.ini directives

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. echo $begrüßung;

        PEAR schlägt folgendes vor, funktioniert aber bei mir nicht, wobei ich nicht weis was mit PATH_SEPARATOR gemeint ist.

        PATH_SEPARATOR ist eine Konstante, die je nach System auf dem das Script läuft, den entsprechenden Separator für die einzelnen Path-Elemente enthält. Also : für Unix, ; für Windows, etc.

        ini_set('include_path', '~/pear/lib' . PATH_SEPARATOR . ini_get('include_path'));

        ~ ist typischerweise die Unix-Abkürzung für das Home-Verzeichnis. Wenn dein Script unter der Kennung apache ausgeführt wird, so wird der sicherlich ein anderes Home-Verzeichnis haben als der User dem der Webspace gehört, sprich: du.
        Die Verzeichnisangaben müssen entweder absolut ( ~/... zählt dazu) oder relativ zum gestarteten Script angegeben werden.

        echo "$verabschiedung $name";

        1. Hi,

          PATH_SEPARATOR ist eine Konstante, die ...

          ... IIRC erst ab Version 4.3 existiert. Bei systemunabhängigen Scripts sollte man sie also vorher ggf. selbst definieren!

          DIRECTORY_SEPARATOR gibt's hingegen schon ein wenig länger (4.0.irgendwas).

          Gruß, Cy-"mein ältestes Produktiv-PHP ist die 4.1.2"-baer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
          1. echo $begrüßung;

            PATH_SEPARATOR ist eine Konstante, die ...
            ... IIRC erst ab Version 4.3 existiert.

            Ja, anscheinend ist das so. PHP 4.2.3 kennt diese Konstante noch nicht. Und die deutsche Version der Handbuchseite kennt sie auch noch nicht.

            echo "$verabschiedung $name";

      3. hi,

        PEAR schlägt folgendes vor,
        ini_set('include_path', '~/pear/lib' . PATH_SEPARATOR . ini_get('include_path'));
        funktioniert aber bei mir nicht,

        D.h.?
        Was zeigt ini_get() für den include_path anschließend an?

        wobei ich nicht weis was mit PATH_SEPARATOR gemeint ist.

        Bei der von mir bereits verlinkten Beschreibung zu include_path steht doch, dass das Trennzeichen für mehrere Pfade je nach Betriebssystem unterschiedlich ist - Unixe benutzen den Doppelpunkt, Windowsen das Semikolon.
        Und die von PHP dafür bereitgestellte Konstante PATH_SEPARATOR wird bei der Beschreibung von set_include_path() erwähnt (und war dort über die seiteninterne Suchfunktion auch leicht ausfindig zu machen). Dort steht übrigens ein Beispielcode ganz ähnlich zu deinem oben genannten.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hallo Tom,

    ini_set('include_path', '/blablablub/pear')

    Ich verwende immer:

    ini_set('include_path', dirname(__FILE__).'/include/pear'.PATH_SEPARATOR.ini_get('include_path'));

    PEAR würde hier im Unterverzeichnis include/pear liegen. dirname(__FILE__) liefert den Namen des Verzeichnisses der aktuellen Datei (absolut) - d.h. wenn /var/www/tomirl/htdocs/index.php aufgerufen wird, so enthält dirname(__FILE__) den Wert '/var/www/tomirl/htdocs'.

    Wenn Du es *ganz* korrekt machen willst, kannst Du übrigens:

    ini_set('include_path', dirname(__FILE__).str_replace('/', DIRECTORY_SEPARATOR, '/include/pear').PATH_SEPARATOR.ini_get('include_path'));

    machen. ;-) Funktioniert allerdings auch ohne diese Modifikation.

    Viele Grüße,
    Christian

  3. Zunächst mal vielen Dank,
    Ich habe das Problem lösen können!
    Christians lösung funktionierte auf Anhieb auf einem Server mit PHP5. Das ursprüngliche Problem lag tatsächlich in einer antiken Version von PHP4 wie von Cybaer beschrieben.
    Dann gab es bei meiner Version noch Probleme mit den Pfadangaben.
    Außerdem habe ich viel gelesen und viel gelernt.:-)
    Danke TomIRL

    1. Hi,

      antiken Version von PHP4 wie von Cybaer beschrieben.

      Hmm, meine Anmerkung war eigentlich ganz allgemein gedacht. =:-)

      Ich hätte dich direkt drauf hingewiesen, wenn Du gleich angegeben hättest, mit welcher PHP-Version Du es zu tun hast.

      Außerdem habe ich viel gelesen und viel gelernt.:-)

      Gleich die PHP-Version anzugeben hoffentlich auch! ;-)

      Gruß, Cybaer

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      1. Hi,

        antiken Version von PHP4 wie von Cybaer beschrieben.

        Hmm, meine Anmerkung war eigentlich ganz allgemein gedacht. =:-)

        Ich hätte dich direkt drauf hingewiesen, wenn Du gleich angegeben hättest, mit welcher PHP-Version Du es zu tun hast.

        Außerdem habe ich viel gelesen und viel gelernt.:-)

        Gleich die PHP-Version anzugeben hoffentlich auch! ;-)

        Das ist relativ unerheblich.
        Ich habe da eine ganze Reihe von Konfigrationen zur Auswahl.
        Wenn es irgenwo nicht läuft, dann komme ich von alleine mit der Version, bzw. mit dem Manual zurecht.
        Aber bei mir lief es anfänglich nirgendwo.
        Was mit og 2. Urachen zu tun hatte. :-)
        Tom