Ankündigung

Einklappen
Keine Ankündigung bisher.

AW Server PHP und PHP-CLI verghalten sich bei PDO unterschiedlich

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • AW Server PHP und PHP-CLI verghalten sich bei PDO unterschiedlich

    Hi,

    meine Frage würde hier in verschiedene Boards passen ich habe einfach mal dieses genommen. Hoffe das ist ok.

    Gegeben:

    Amazon Claud Server mit

    CentOS7
    Apache 2.4.6
    PHP 7.3.22

    ich muss mit PDO eine Verbindung zu einem MSSQL Datenbank Server aufbauen. Dafür habe ich php-odbc und FreeTDS installiert.

    odbc.ini:

    [ESG_PROD]
    Description = ESG Production Server
    Driver = FreeTDS
    Server = myDBServer.url
    Port = 1433
    Database = TRMworkbench
    TDS_Version = 8.0

    Dazu folgendes PHP testscript

    try
    {
    $con = new PDO("odbc:" ."ESG_PROD", "user", password"");
    if(!$con)
    {
    echo "Error connection to eSG<br>";
    }
    die("Connection established...");
    }
    catch (Exception $e)
    {
    die("Error connecting to eSG: ".$e->getMessage());
    }
    Rufe ich dieses script über einen Browser auf, dann bekomme ich eine Verbbingung und kann aus dieser auch daten lesen (mit anderem Script bereits probiert). Hier funktioniert also alles einwandfrei.

    Ich muss dieses Script aber auch über einen cronJob starten. Dafür habe ich dann php-cli installiert und versucht

    php -f scriptname.php

    Hier bekomme ich dann eine Exception:

    Error connecting to eSG: SQLSTATE[42000] SQLConnect: 18456 [unixODBC][FreeTDS][SQL Server]Login failed for user 'User'

    Dabei kommt dieser Verbindgunsversuch überhaupt nicht beim Server an. Bekomme ich beim Versuch über den Browser entsprechende Ausgaben im Log des Datenbank Servers, so gibt es bei dem fehlschlagenden Versuch gar keine Logs. Der Fehler muss also schon vorher irgendwo zwischen PHP-FreeTDS und ODBC passieren.

    Nur wo?

    Ich habe bereits verglichen. Beide male wird die gleiche php.ini benutzt und es werden die gleichen Module geladen.

    Im Moment bin ich ratlos wie ich überhaupt weiter debuggen soll.

    Eventuell hatte ja jemand von euch schonmal so ein Problem und kann helfen?

    Gruß

    Thallius
    Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

  • #2
    PHP verwendet in der Regel für CLI eine andere INI-Datei. Schon mal verglichen?

    Hat der User, unter dem PHP ausgeführt wird, überhaupt die notwendigen Rechte um eine Netzwerkverbindung zum Datenbankserver aufzubauen?

    Kommentar


    • #3
      Zitat von hellbringer Beitrag anzeigen
      PHP verwendet in der Regel für CLI eine andere INI-Datei. Schon mal verglichen?

      Hat der User, unter dem PHP ausgeführt wird, überhaupt die notwendigen Rechte um eine Netzwerkverbindung zum Datenbankserver aufzubauen?
      Wie bereits geschrieben, ja habe verglichen und ja ist die gleiche standard /etc/php.ini

      Den test habe ich als su gemacht. Sollte also eigentlich kein Rechteproblem sein.

      Gruß

      Thalias
      Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

      Kommentar


      • #4
        Zitat von Thallius Beitrag anzeigen
        Wie bereits geschrieben, ja habe verglichen und ja ist die gleiche standard /etc/php.ini

        Den test habe ich als su gemacht. Sollte also eigentlich kein Rechteproblem sein.
        "Login failed" ist übrigens eine Fehlermeldung vom Datenbankserver und nicht von PHP. Also wäre der nächste Schritt die Ursache dort zu suchen. Also Serverlogs, usw.

        Kommentar


        • #5
          Zitat von hellbringer Beitrag anzeigen

          "Login failed" ist übrigens eine Fehlermeldung vom Datenbankserver und nicht von PHP. Also wäre der nächste Schritt die Ursache dort zu suchen. Also Serverlogs, usw.
          Das ist ja das skurrile. Ich habe, wie auch schon geschrieben, die Logs des DB Servers durchsucht und da ist nichts.
          Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

          Kommentar


          • #6
            Zitat von Thallius Beitrag anzeigen
            Das ist ja das skurrile. Ich habe, wie auch schon geschrieben, die Logs des DB Servers durchsucht und da ist nichts.
            Sicher, dass es der richtige Server ist? Die Fehlermeldung muss jedenfalls von einem Server kommen. PHP denkt sich diese nicht selber aus.

            Kommentar


            • #7
              Zitat von hellbringer Beitrag anzeigen

              Sicher, dass es der richtige Server ist? Die Fehlermeldung muss jedenfalls von einem Server kommen. PHP denkt sich diese nicht selber aus.
              Wie gesagt, ich habe das Script über den Browser aufgerufen und dann bekomme ich die Logs am Server. Rufe ich direkt danach das script vom cli aus auf kommt am Server nix an. Ich verstehe es ja auch nicht. Macht vorne und hinten keinen Sinn
              Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

              Kommentar


              • #8
                Mal die Fehlermeldung "SQLConnect: 18456" in Google eingegeben?
                Das es nicht geloggt wird kann daran liegen, dass ja erst gar kein Zugang erfolgt, also schon an der Tür vor dem Logging geblockt wurde, nur eine Vermutung.

                Kommentar


                • #9
                  The generic message "Login Failed for User (Microsoft SQL Server, Error: 18456)" means you entered invalid credentials when logging into SQL Server.
                  https://channel9.msdn.com/Blogs/raw-...6-Step-By-Step

                  Kommentar


                  • #10
                    Ich kann nur dringend dazu raten, auf diesen FreeTDS Mist zu verzichten und den richtigen Treiber von Microsoft zu verwenden:

                    Code:
                    sudo pecl install sqlsrv
                    sudo pecl install pdo_sqlsrv
                    https://github.com/Microsoft/msphpsq...ses/tag/v5.8.0

                    Mit FreeTDS hatten wir auch immer diverse Phänomene und waren froh, als Microsoft vor einiger Zeit endlich die Native-Treiber auch für Linux released hat.
                    sorry, shift-taste kaputt

                    Kommentar


                    • #11
                      Zitat von Meister1900 Beitrag anzeigen
                      Ich kann nur dringend dazu raten, auf diesen FreeTDS Mist zu verzichten und den richtigen Treiber von Microsoft zu verwenden:

                      Code:
                      sudo pecl install sqlsrv
                      sudo pecl install pdo_sqlsrv
                      https://github.com/Microsoft/msphpsq...ses/tag/v5.8.0

                      Mit FreeTDS hatten wir auch immer diverse Phänomene und waren froh, als Microsoft vor einiger Zeit endlich die Native-Treiber auch für Linux released hat.
                      Klingt super. Steht auch irgendwo wie man das dann konfiguriert und anspricht mit PDO?

                      Interessant, dass man wenn man nach PHP MSSQL Connect bei Google sucht eigentlich nur die FreeTDS Lösungen findet.

                      Danke

                      Thallius
                      Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

                      Kommentar


                      • #12
                        Warum schaut man da nicht als erstes in die Microsoft-Doku?

                        https://docs.microsoft.com/en-us/sql...l-server-ver15

                        Kommentar


                        • #13
                          Ich habe auch noch diesen Link gefunden(auch über google): https://www.microsoft.com/en-us/sql-...tu/step/2.html

                          Kommentar

                          Lädt...
                          X