Ankündigung

Einklappen
Keine Ankündigung bisher.

BUG: set_include_path -> require_once spinnt

Einklappen

Neue Werbung 2019

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

  • BUG: set_include_path -> require_once spinnt

    Hallo Leute,

    ich weiss nicht ob ichs zu den Einsteigern oder den Profis stellen soll, das wird sich erst im Verlauf des Threads zeigen

    Ich habe seit dem wir notgedrungen einen neuen Server hochziehen mussten ein Problem mit require_once. Und zwar sagt mir das mal gerne "No such file or directory" aber nicht immer, nur so wie es grad lust hat. Das macht es an mehreren Stellen im vorhandenen Code, wo auf verschiedene Dateien zugegriffen wird.

    Ich kann den Fehler einfach nicht reproduzieren und der passiert genau so wenn ich Ordner und Datei die Rechte 777 gebe, da kann das Problem also auch nicht liegen.

    Was meint ihr dazu?

    Gruß
    Cy


  • #2
    Wie sieht das require_once genau aus?

    Kommentar


    • #3
      Ok hier ein Beispiel von vielen:

      PHP-Code:
      require_once 'Error.php'
      der Code ist Ausnahmsweise nicht von mir, deshalb keine Klammern, aber das dürfte doch nicht stören oder?

      Kommentar


      • #4
        Klammern sind nicht bei require/include/_once nicht notwendig.
        Auf was für einem Dateisystem liegen denn aus Sicht des Servers die Dateien? Also irgendetwas wie NFS oder CIFS? Oder per SAN angebunden? Oder irgendwie entfernbar zum Beispiel per usbfs?

        Kommentar


        • #5
          Liegt alles in unterverzeichnissen von httpdocs. Keine Besonderheiten oder so. Im o.g. Fall liegt die Datei (wie man sieht) auch im selben Verzeichnis.

          Der selbe Code funktionierte ja auch gestern noch einwandfrei auf dem alten Server. Nur auf dem neuen bekomme ich abundzu mal die o.g. Fehlermeldung

          Kommentar


          • #6
            Zitat von cycap Beitrag anzeigen
            Liegt alles in unterverzeichnissen von httpdocs. Keine Besonderheiten oder so. Im o.g. Fall liegt die Datei (wie man sieht) auch im selben Verzeichnis.
            httpdocs könnte ja auch über NFS,CIFS,SAN oder sonstwas eingebunden sein. Es ist also ein lokales Dateisystem, eine Festplatte per SATA angebunden, Partition mit ext3 und das war's? Ist der gesamte Server physikalisch Eure Hardware und von Euch eingerichtet?

            Zitat von cycap Beitrag anzeigen
            Der selbe Code funktionierte ja auch gestern noch einwandfrei auf dem alten Server. Nur auf dem neuen bekomme ich abundzu mal die o.g. Fehlermeldung
            Glaube ich Dir ja. Das Problem liegt also darunter. PHP ruft auch nur die Systemfunktionen zum Einlesen der Dateien auf. Und die Fehlermeldung kommt auch nicht von PHP sondern von den Systemfunktionen. Das System meldet also immer mal wieder "diese Datei gibt es nicht".

            Kommentar


            • #7
              Ja alles physikalisch hier im Haus und mit Plesk auf Debian administriert. Dateisystem kann ich dir gerade nicht sagen, aber ich denke mal du kannst von Ext3 ausgehen.

              Kommentar


              • #8
                Versuche es mal mit absoluten bzw. kanonischen absoluten Pfaden.
                Oder evtl. ein ./ oder mal ein / vorstellen (nicht zu verwechseln mit ../!!!).
                Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                Kommentar


                • #9
                  Zitat von cycap Beitrag anzeigen
                  Dateisystem kann ich dir gerade nicht sagen, aber ich denke mal du kannst von Ext3 ausgehen.
                  Ich fürchte, wir reden aneinander vorbei Meine Frage zielt darauf ab, ob die Datenquelle/das Dateisystem "weg" sein kann, ohne dass es gleich auffällt. Bei einer eingebauten Festplatte ist das eher unwahrscheinlich. Die macht Geräusche oder es kommt Rauch aus dem Gehäuse und man kann meist garnicht mehr auf die Dateien zugreifen. Ein Ramdisk kann einfach mal weg sein. Auf einem USbBStick auch. Ein Dateisystem via Netzwerk erst recht. Aber ich nehme dann mal an, das ist es nicht, sondern eben ein Dateisystem auf einer lokalen Festplatte.

                  Der Vorschlag von Manko10 zielt darauf ab, dass sich aus irgendeinem Grund das current working directory (manchmal) ändert und deshalb die relative Pfadangabe 'Error.php' fehlschlägt. Also anstatt /home/www/app1/Error.php die Datei /home/www/app1/subdir/Error.php gesucht wird, die es aber nicht gibt. Oder war bisher in der php.ini ein anderer Wert bei include_path gesetzt? Das würde ich zuerst nochmal überprüfen.

                  Welchen Webserver habt Ihr bisher benutzt und wie war PHP da installiert? Und welchen Webserver benutzt Ihr jetzt und wie ist PHP da installiert?

                  edit: Passiert das auffällig nur bei require_once? (Oder ist es bisher nur da aufgefallen? Oder gibt es nur require_once im Code?)

                  Kommentar


                  • #10
                    Wir reden nicht aneinander vorbei, ich dachte durch meine Aussagen wäre klar geworden das sich um eine normale Festplatte handelt, mit beweglichen Teilen und so

                    Das mit dem Pfad lässt sich schlecht ausprobieren, da jede Fehlermeldung die ich gemeldet bekommen hab von einem anderen require_once kam und diese wie gesagt nicht reproduzierbar sind. Aber alle von einem require_once!!! und auch alle mit relativem pfad, aber aus unterschiedlichen Verzeichnissen.

                    Altes System: apache2 mit mod_php5 version 5.2.1
                    Neues System: apache2 mit mod_php5 version 5.2.5

                    Das mit der php.ini kann ich erst morgen prüfen.

                    [edit]
                    es gibt auch mehrere includes etc. im code

                    Kommentar


                    • #11
                      Zitat von cycap Beitrag anzeigen
                      Das mit der php.ini kann ich erst morgen prüfen.
                      Hoffentlich ist es das.
                      Ich bin gerade mal mit dem Debugger durch den Code gegangen und include,require,include_once,require_once laufen alle durch die selbe Funktion im C-Code. Warum es gerade und nur require_once betreffen sollte, kann ich nicht erkennen.

                      Kommentar


                      • #12
                        Ja ich glaube das war es. Muss mal abwarten ob jetzt nochmal irgendwann der Fehler kommt.

                        Also ich konnte noch näheres herausfinden: er hatte anscheinend Probleme wenn man aus einer Datei die selbst schon per require_once eingebunden ist nochmal require_once auszuführen. Dann kam er ins falsche Verzeichnis, er ist anscheinend dann vom Verzeichnis ausgegangen wo die zweite Datei liegt und nicht von dem wo die ursprungsdatei liegt, wie sonst.

                        Hab mal die alte php.ini mit der neuen verglichen und in der alten stand include_path = ".:.:" und in der neuen include_path = ".:"

                        Hab das jetzt mal geändert und hoffe das löst mein Problem. Da hilft nur abwarten und zuschauen.

                        Kann mir jemand sagen was die .: bedeuten?

                        Gruß
                        Cy

                        [EDIT]
                        Das wars nicht grad folgende Meldung bekommen:


                        Warning: require_once(HTMLPurifier/Strategy/Composite.php) [function.require-once]: failed to open stream: No such file or directory in /var/www/vhosts/gehdichnixan.com/httpdocs/phprojekt50/lib/html/library/HTMLPurifier/Strategy/Core.php on line 3

                        Kommentar


                        • #13
                          stimmt denn der Pfad in der Fehlermeldung?

                          die : sind Trenner von Verzeichnissen in Pfadangaben

                          und der . bedeutet "das aktuelle Verzeichnis"

                          also genau wie an der UNIX-Shell die Umgebungsvariable PATH

                          Kommentar


                          • #14
                            Zitat von nobswolf Beitrag anzeigen
                            stimmt denn der Pfad in der Fehlermeldung?
                            Naja das lässt sich jetzt so nicht sagen. Die Core.php wird eben von einer Datei aus dem Verzeichnis libary per require_once eingebunden und von der core.php soll eben die Datei Composite.php require_once'n die im selben Verzeichnis liegt wie die core.php.

                            PHP würde ja normalerweise von libary ausgehen, macht er in meinem Fall aber anscheinend nicht und somit sucht PHP in HTMLPurifier/Strategy/HTMLPurifier/Strategy/ und das gibts natürlich nicht.

                            Kommentar


                            • #15
                              ich würde alle Includes in ein Verzeichnis legen und dieses Verzeichnis im Suchpfad angeben

                              alternativ bei jedem Include den vollen Pfad, beginnend mit / angeben

                              sonst fällt man halt dauernd auf die Nase

                              Kommentar

                              Lädt...
                              X