hörbiger: "ich dreh' durch" v2 (PHP in Shell ausführen)

Hallo Leute,

ja, ich halts nicht mehr aus. Jetzt bin ich von Anbieter X zu Anbieter Y, RootServer mit Tomcat Enterprise + Plesk.

Jetzt hatte ich so schön bei X einen Cronjob, der eine PHP-Datei aufrief. Diese Datei hat mit der Datenbank verbunden und aus der Datenbank Dinge ausgelesen und daraus ein Textfile erzeugt...

Doch jetzt bekomme ich in der Shell nur noch das hier:

PHP Warning:  Unknown(): Unable to load dynamic library '/usr/lib/php4/pgsql.so' - libpq.so.3: cannot open shared object file: No such file or directory in Unknown on line 0
Content-type: text/html
X-Powered-By: PHP/4.3.9

Wuzz up? Ich stehe wie das Schwein vorm Berg. Die Umstände sind quasi gleich: Der User der früher den Cronjob gestartet hat, war der gleiche, dem die php-Datei gehörte.

Das ist jetzt genauso!

Natürlich habe ich als erstes: dos2unix auf das PHP-File losgelassen.  In der Hoffnung das was passiert.

Dann habe ich das File dem root chowned und den Cronjob auch dem root übergeben.

Hat alles nix genützt. Was da los?

Hörby

  1. hallo,

    Jetzt bin ich von Anbieter X zu Anbieter Y, RootServer mit Tomcat Enterprise + Plesk.
    Jetzt hatte ich so schön bei X einen Cronjob, der eine PHP-Datei aufrief. Diese Datei hat mit der Datenbank verbunden und aus der Datenbank Dinge ausgelesen

    Deine Datenbank bei "Anbieter X" war PostgreSQL. Es ist mittlerweile selten, daß "Anbieter" diese Datenbank zur Verfügung stellen. Was sagt denn dein neuer Anbieter, welche Datenbank du benutzen darfst?

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hi,

      Deine Datenbank bei "Anbieter X" war PostgreSQL. Es ist mittlerweile selten, daß "Anbieter" diese Datenbank zur Verfügung stellen. Was sagt denn dein neuer Anbieter, welche Datenbank du benutzen darfst?

      Selbst wenn die php-Datei nur <? ?> beinhält, kommt der fehler!

  2. Hallo !

    Was da los?

    Na das

    PHP Warning:  Unknown(): Unable to load dynamic library '/usr/lib/php4/pgsql.so' - libpq.so.3: cannot open shared object file: No such file or directory in Unknown on line 0

    :-)

    Der dynmaische Linker/Loader findet die shared lib nicht.

    libpq.so.3

    • Ob's libpq.* auf dem System gibt mittels

    find /usr/lib -name 'libpq.*.so'

    ( oder ueber anderen shlib Verzeichnissen - die stehen i.A: in /etc/ld.so.conf o.ae )

    feststellen. Sonst installieren.

    • In das Verzeichnis wechseln und nen softlink auf libpq.so.3 erstellen
    • ldconfig -v | grep libpq

    Das sollte eds gewesen sein.

    Bloss nicht wild 'rumchown' :-)

    Gruss

    Holger

    1. Na Stop mal.

      Hier läuft ganz normal ein Apache mit mySQL und PHP. Nix besonderes, aber das aktuellste.

      find /usr/lib -name 'libpq.*.so'

      Nada.

      find ./ -name 'libpq.*.so' als root im serverroot auch nicht!

      feststellen. Sonst installieren.

      Muss doch eigentlich alles laufen, da ja der Apache mit PHP einwandfrei funktioniert.

      • In das Verzeichnis wechseln und nen softlink auf libpq.so.3 erstellen
      • ldconfig -v | grep libpq

      Dazu komme ich nicht. Diese Datei existiert scheinbar nicht.

      H.

      1. Hallo  !

        Sorry, das Muster war auch falsch - einfach 'libpq*'.

        Muss doch eigentlich alles laufen, da ja der Apache mit PHP einwandfrei funktioniert.

        DEN Schluss wuerde ich nicht ziehen:

        Hat PHP unter Apache Zugriff auf Postgres ?
        Wie ist das verifiziert worden?
        Aus einem PHP-Skript unter Apache mit nem einfachen SELECT ?

        PHP hat u.U. jeweils eine Konfigurationsdatei fuer cli, cgi, apache(mod_php)
        in /etc/php oder /etc/php<VERSIONSNUMMER>.Kann sein dass das postgres-modul nur in der Kommandoteilenversion (cli) steht.

        Der LD_LIBRARY_PATH koennte auch noch ne Rolle spielen.
        Hast Du mal einen Datenbankzugriff mit PHP auf der Kommandozeile versucht ?

        Und bist Du wirklich ganz sicher, dass Postgres ueberhaupt auf dem Rechner installiert ist ?

        Es waere naterlich eine eigentueliche Paketierung wenn das fehlt aber das PHP-Modul da ist, aber sowas kann's geben.

        Viel Erfolg !

        Gruss

        Holger

        1. Hello,

          Sorry, das Muster war auch falsch - einfach 'libpq*'.

          Habe ich gemerkt.

          ... DEN Schluss wuerde ich nicht ziehen:
          Hat PHP unter Apache Zugriff auf Postgres ?

          Also ich nutze ausschließlich eine installierte Datenbank: mySQL. Mehr nicht! Funktioniert wunderbar!

          Wie ist das verifiziert worden?

          Keine Ahnung.

          Aus einem PHP-Skript unter Apache mit nem einfachen SELECT ?

          selbst der Aufruf nur des Kommandozeilen-Befehls "php" erzeugt diesen fehler. ABER: sage ich php, dass es keine php.ini nehmen soll, gibts null Fehler! Allerdings auch null Datenbankfunktionen - nichts.

          PHP hat u.U. jeweils eine Konfigurationsdatei fuer cli, cgi, apache(mod_php) in /etc/php oder /etc/php<VERSIONSNUMMER>.Kann sein dass das postgres-modul nur in der Kommandoteilenversion (cli) steht.

          VOLLTREFFER! Mega! Ich hoffe, nicht zuviel zu versprechen, aber die Fehlermeldung ist weg!

          Ich habe folgendes getan: etc/php.d/pgsql.ini

          ; Enable pgsql extension module
          ; extension=pgsql.so

          Der LD_LIBRARY_PATH koennte auch noch ne Rolle spielen.
          Hast Du mal einen Datenbankzugriff mit PHP auf der Kommandozeile versucht ?

          Das funktioniert dann.

          Und bist Du wirklich ganz sicher, dass Postgres ueberhaupt auf dem Rechner installiert ist ?

          japp.

          Es waere naterlich eine eigentueliche Paketierung wenn das fehlt aber das PHP-Modul da ist, aber sowas kann's geben.

          ???

          Ich sag bescheid, wenns geht...

        2. Nix!

          Vergiss es. Ich geh ins Bett!

          Jetzt:

          PHP Warning:  Unknown(): open(/var/lib/php/session/sess_b5e897258bb2f25fde183d1c076d23a1, O_RDWR) failed: Permission denied (13) in Unknown on line 0
          PHP Warning:  Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0

          Da scheint was mit den Rechten nicht zu stimmen. Weil das existiert auch. Das scheint ein grundsätzliches Rechteding zu sein.

          Was solln das sein. Man!

          wenn ich php so aufrufe, dass es auch definitiv die aktuelle php.ini nimmt ( -cpath/php.ini ) dann gehts auch nicht...

          Geht alles nicht. So ein Müll!

          H.

          1. Vergiss es. Ich geh ins Bett!

            Nein! Doch nicht! Jetzt funktionierts. Musste das Sessionverzeichnis noch chmodden - und fertig!

            Jetzt gehts!

            H.

  3. NACHTRAG:

    als superuser: find ./ -name '*pgsql.so*' im serverrot gesucht, gefunden in usr/lib/php4/

    Also die Datei ist da. Doch:

    cannot open shared object file

    Dies weist darauf hin, dass diese Datei irgendwo freigegeben werden muss. Meine Anfängerfrage:

    • WAS?
    • WIE?
    • WO?

    Gell? :)

    Ich hab kein' Plan! Ehrlich! Google spuckt dürftiges aus. Kann aber auch was übersehen haben... Trotzdem. Ich steh im Wald!

    H.

    [config: i86,tomcat,apache,plesk]