Ankündigung

Einklappen
Keine Ankündigung bisher.

[gelößt #16] mkdir funktioniert teilweise auf dem neuen Server nicht

Einklappen

Neue Werbung 2019

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

  • [gelößt #16] mkdir funktioniert teilweise auf dem neuen Server nicht

    Ich habe ein sehr merkwürdiges Problem, wir sind auf einen neuen Server Ubuntu 14.04 mit php 5.6 umgezogen.
    Die PHP-Skripte sind bis auf die config.php zu 100% übernommen worden und auf zwei anderen Servern läuft die Software Problemlos.

    mkdir funktioniert im selben Verzeichnispfad in der selben PHP-Session mal problemlos und mal nicht!?

    Kann es sein das es eine Sicherheitseinstellung Aufgrund der include-Tiefe gibt?

    Denn der einzige Unterschied den ich sehe ist:

    Browser -> Resquest -> class.php -> mkdir => OK
    Browser -> Resquest -> class.php -> include_once "diverse.php"; -> mkdir => Fehler

    Hat jemand eine Idee woran es liegen könnte?

    Lösung bzw. mein Fehler.

  • #2
    "Fehler" klingt sehr trivial... Was für ein Fehler kommt denn?!
    Fragwürdig ist auch, warum man auf einen neuen Server umzieht und auf PHP 5.6 setzt?

    [MOD: verschoben von PHP-Fortgeschritten]
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Zitat von Arne Drews Beitrag anzeigen
      "Fehler" klingt sehr trivial... Was für ein Fehler kommt denn?!
      Fragwürdig ist auch, warum man auf einen neuen Server umzieht und auf PHP 5.6 setzt?
      Wir haben den Anbieter gewechselt und das Projekt ist nicht gerade klein, des weiteren bekommen wir unter 7.2 diverse Fehler, welche in der nächsten Zeit nach und nach behoben werden und dann gehts auf 7.x.

      Unter 5.6 läuft es bis auf das mkdir in einer Unterfunktion problemlos, so wie schon seit ein paar Jahren auf den anderen Systemen.

      Browser -> Resquest -> class.php -> mkdir => funktioniert
      Browser -> Resquest -> class.php -> include_once "diverse.php"; -> mkdir => Fehler: permission denied

      Danke für den Einsteiger, programiere PHP schon seit über 15 Jahren, aber das mkdir mal funktioniert und mal nicht, das hatte ich noch nie.

      Ich habe mir die Pfade beider Versionen loggen lassen, beide Verzeichnispfade sind komplett gleich, dennoch funktioniert es nicht bei beiden gleich!?

      Deshalb liegt meine Vermutung bei einer Servereinstellung und deshalb meine Frage hier.

      Kommentar


      • #4
        permission denied sagt doch eindeutig das versucht wird eine Aktion (hier mkdir) auszuführen wofür das PHP-Skript nicht die Rechte hat. Aus der vollständigen Fehlerausschrift kannst du sicher entnehmen welche Zeile und welches Verzeichnis das betrifft.

        Am Rande: Um unter Fortgeschritten zu posten sollte auch das Thema "fortgeschritten" sein und nicht nur die Einschätzung des Kenntnisstandes des Fragestellers..

        Kommentar


        • #5
          Eventuell wäre ein Beispielcode hilfreich?

          Kommentar


          • #6
            Zitat von jspit Beitrag anzeigen
            permission denied sagt doch eindeutig das versucht wird eine Aktion (hier mkdir) auszuführen wofür das PHP-Skript nicht die Rechte hat. Aus der vollständigen Fehlerausschrift kannst du sicher entnehmen welche Zeile und welches Verzeichnis das betrifft.
            Das ist korrekt, das Problem ist:

            Das selbe Verzeichnis, die selben Rechte, die selbe Sesssion, aber mkdir funktioniert bei diesen beiden nicht genauso:

            Browser -> Resquest -> class.php -> mkdir => funktioniert
            Browser -> Resquest -> class.php -> include_once "diverse.php"; -> mkdir => Fehler: permission denied

            Und auf meinem lokalen System, sowie auf dem alten Server funktioniert der selbe Code seit Monaten problemlos.

            Kennt jemand eine Apache/PHP-Einstellung die bei höherer Include-Tiefe die Rechte reduziert?

            Kommentar


            • #7
              Zitat von jprangenberg Beitrag anzeigen
              Eventuell wäre ein Beispielcode hilfreich?
              Ursprünglich:
              mkdir( $pfad);

              gestestet:

              mkdir( $pfad, 0777, true);

              $old = umask(0);
              mkdir( $pfad);
              umask($old);

              $old = umask(0);
              mkdir( $pfad, 0777, true);
              umask($old);

              Kommentar


              • #8

                Kleines Log:
                10.15.18 09:38:25 'copy_project( ){'
                10.15.18 09:38:25 ''/var/www/html/tour/' is_dir: 1 is_writable: 1'
                10.15.18 09:38:25 ''/var/www/html/tour/aachen/181015-lindig' is_dir: 0 is_writable: 0'
                10.15.18 09:38:25 '>'/var/www/html/tour/aachen/181015-lindig' is_dir: 0 is_writable: 0'
                10.15.18 09:38:25 'error: mkdir(/var/www/html/tour/aachen/181015-lindig)'
                10.15.18 09:38:25 '>'/var/www/html/tour/aachen/181015-lindig' is_dir: 1 is_writable: 1' Code: diverse.php

                PHP-Code:
                trace">'".$dest."' is_dir: ".(is_dir($dest) ? 1:)." is_writable: " . (is_writable($dest) ? 1:0));        
                if( 
                mkdir($dest0777true)){            
                     
                trace"error: mkdir($dest)");            
                     
                trace">'".$dest."' is_dir: ".(is_dir($dest) ? 1:)." is_writable: " . (is_writable($dest) ? 1:0)); 
                Die letzte Log-Zeile ist sehr eigenartig, trotz Fehler und nicht existierendem Verzeichnis ist beides true!?

                Kommentar


                • #9
                  Da hilft wieder mal nur debuggen, irgendwelche Unterschiede müssen da vorhanden sein sagt mir mein Bauchgefühl. Mal für jedes mit mkdir zu erstellende Verzeichnis den Pfad, das aktuelle Arbeitsverzeichnis ( getcwd() ) und die Rechte ( fileperms() ) ausgeben lassen.

                  edit:
                  PHP-Code:
                  if( mkdir($dest0777true)){            
                       
                  trace"error: mkdir($dest)"); 
                  mkdir liefert true bei Erfolg! Hier düfte ein ! fehlen oder ?

                  Kommentar


                  • #10

                    10.15.18 09:48:27 'newProject: /var/www/html/tour//aachen/181015-lindig'
                    10.15.18 09:48:27 '/var/www/html/tour/aachen/181015-lindig'
                    10.15.18 09:48:27 '+'/var/www/html/tour/' is_dir: 1 is_writable: 1'
                    10.15.18 09:48:27 '+'/var/www/html/tour/aachen/181015-lindig' is_dir: 0 is_writable: 0'
                    10.15.18 09:48:27 '+'/var/www/html/tour/aachen/181015-lindig' is_dir: 1 is_writable: 1'

                    PHP-Code:
                    trace"+'".$this->getRoot()."' is_dir: ".(is_dir($this->getRoot()) ? 1:)." is_writable: " . (is_writable($this->getRoot()) ? 1:0));
                    trace"+'".$dir."' is_dir: ".(is_dir($dir) ? 1:)." is_writable: " . (is_writable($dir) ? 1:0));
                    if( 
                    mkdir$dir)){      
                              
                    trace"+'".$dir."' is_dir: ".(is_dir($dir) ? 1:)." is_writable: " . (is_writable($dir) ? 1:0)); 

                    Kommentar


                    • #11
                      Zitat von jspit Beitrag anzeigen
                      Da hilft wieder mal nur debuggen, irgendwelche Unterschiede müssen da vorhanden sein sagt mir mein Bauchgefühl. Mal für jedes mit mkdir zu erstellende Verzeichnis den Pfad, das aktuelle Arbeitsverzeichnis ( getcwd() ) und die Rechte ( fileperms() ) ausgeben lassen.
                      Es gibt nur zwei Unterschiede:

                      1) funzt => Klasse
                      2) fail => globale Funktion und ein include tiefer

                      Kommentar


                      • #12
                        Code:
                        10.15.18 10:04:26 'copy_project( ){'
                        10.15.18 10:04:26 'getcwd: /var/www/html/tourcms, fileperms(/var/www/html/tour/aachen/):16895'
                        10.15.18 10:04:26 ''/var/www/html/tour/aachen/' is_dir: 1 is_writable: 1'
                        10.15.18 10:04:26 ''/var/www/html/tour/aachen/181015-lindig' is_dir: 0 is_writable: 0'
                        10.15.18 10:04:26 'getcwd: /var/www/html/tourcms, fileperms: '/var/www/html/tour/aachen/181015-lindig''
                        10.15.18 10:04:26 '>'/var/www/html/tour/aachen/181015-lindig' is_dir: 0 is_writable: 0'
                        10.15.18 10:04:26 'error: mkdir(/var/www/html/tour/aachen/181015-lindig)'
                        10.15.18 10:04:26 '>'/var/www/html/tour/aachen/181015-lindig' is_dir: 1 is_writable: 1'

                        Code:
                        10.15.18 10:07:32 'newProject: /var/www/html/tour//aachen/181015-lindig'
                        10.15.18 10:07:32 '/var/www/html/tour/aachen/181015-lindig'
                        10.15.18 10:07:32 'getcwd: /var/www/html/tourcms, fileperms(/var/www/html/tour/aachen/):16895'
                        10.15.18 10:07:32 ''/var/www/html/tour/aachen/' is_dir: 1 is_writable: 1'
                        10.15.18 10:07:32 ''/var/www/html/tour/aachen/181015-lindig' is_dir: 0 is_writable: 0'
                        10.15.18 10:07:32 '+'/var/www/html/tour/aachen/181015-lindig' is_dir: 1 is_writable: 1'

                        Kommentar


                        • #13
                          Hast du das umask aus Beitrag #7 da irgendwo im Code mit drinnen?
                          Laut Handbuch soll das nicht verwendet werden.

                          Kommentar


                          • #14
                            [QUOTE=toosten;n1540352]
                            Code:
                            10.15.18 10:04:26 'error: mkdir(/var/www/html/tour/aachen/181015-lindig)'
                            10.15.18 10:04:26 '>'/var/www/html/tour/aachen/181015-lindig' is_dir: 1 is_writable: 1'
                            [CODE]

                            Da kann ich mir kein Reim drauf machen. Du gibst /var/www/html/tour/aachen/181015-lindig als Error aus und die 2.Zeile sagt dann das dies ein gültiges + schreibbares Verzeichnis ist?
                            Hast du edit #9 gesehen ?
                            Eventuell spielt dir auch is_writable() einen Streich, da es gecached wird. s. clearstatcache()

                            Kommentar


                            • #15
                              [QUOTE=jspit;n1540355]
                              Zitat von toosten Beitrag anzeigen
                              Code:
                              10.15.18 10:04:26 'error: mkdir(/var/www/html/tour/aachen/181015-lindig)'
                              10.15.18 10:04:26 '>'/var/www/html/tour/aachen/181015-lindig' is_dir: 1 is_writable: 1'
                              [CODE]

                              Da kann ich mir kein Reim drauf machen. Du gibst /var/www/html/tour/aachen/181015-lindig als Error aus und die 2.Zeile sagt dann das dies ein gültiges + schreibbares Verzeichnis ist?
                              Hast du edit #9 gesehen ?
                              Ich auch nicht!

                              Jetzt kommt es noch lustiger:

                              Ich habe jetzt in der Methode der class.php das mkdir hinzugefügt, welches erst in der Funktion erstellt werden soll, das hat geklappt.

                              D.h. Ich kann in der class.php mkdir nutzen, aber wenn ich von da aus eine funktion aus einem weiteren include nutze, dann funktioniert mkdir nicht mehr - das kann ich gar nicht glauben ...

                              Kommentar

                              Lädt...
                              X