JulianBaumueller: Verzeichnis und Dateien werden nicht erstellt

Hallo,

ich habe mir son kleines Register-Skript angefertigt, mitdem man sein Vor- und Nachnamen, sowie passwort und emailadresse in text- bzw. php-dateien schreiben lassen kann.

nun hab ich dass so:

alles felder ausgefüllt --> Submit-Button --> Script erstellt verzeichnis namens der email-adresse des users --> Script erstellt dateien "userinfo.txt" und "passwort.txt" --> in userinfo kommen vor- und nachname, sowie registerdatum- und uhrzeit blabla ..

Nun werden aber das Verzeichnis (z.B. Namens "julianbaumueller@web.de") und die beiden dateien nicht erstellt.

$uid = fopen("userinfo.txt", "w");
echo fwrite($uid, "blabla");
fclose($uid);

.. und für die passwortdatei dass selbe in hellgrün.

Vielleicht kann mir ja einer helfen.
Wer den ganzen Code will kann ihn verlangen..

Mit freundlichen Grüßen,
Julian Baumüller

  1. Achja also die beiden Textdateien sollen natürlich im verzeichnis erstellt werden:

    anstatt:
    /userinfo.txt --> /julianbaumueller@web.de/userinfo.txt

    für die passwortdatei dass selbe in dunkelgrün.

    MfG,
    JulianBaumueller

  2. Lieber JulianBaumueller,

    Nun werden aber das Verzeichnis (z.B. Namens "julianbaumueller@web.de") nd die beiden dateien nicht erstellt.

    und was sagen Deine Serverlogs bzw. Fehlerlogs dazu? Wahrscheinlich hat das übergeordnete Verzeichnis ungenügende Dateirechte für das Script...

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Lieber Felix Riesterer,

      da ich ja auch nicht mehr von '65 bin, hab ich im übergeordneten verzeichnis schon die 777 drauf.

      Mit feundlichen Grüßen,
      JulianBaumueller

      1. Lieber JulianBaumueller,

        da ich ja auch nicht mehr von '65 bin, [...]

        Du hast da so eine Gabe wesentliche Fragen einfach zu ignorieren...

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Lieber Felix Riesterer,

          Du hast da so eine Gabe wesentliche Fragen einfach zu ignorieren...

          Naja das mit der Gabe ist ja nichts neues...
          Also die Fehlermeldungen zeigen mir an, dass die Textdateien, die zu öffnen waren, nicht gefunden wurden und der chmod für die verzeichnisse sowie unterverzeichnisse war auf 777 eingestellt...

          Insofern versteh ich deine Antwort jetzt nicht so ganz..

          MfG,
          Julian Baumüller

          1. Lieber JulianBaumueller,

            Also die Fehlermeldungen zeigen mir an, dass die Textdateien, die zu öffnen waren, nicht gefunden wurden

            und wie hast Du sie öffnen wollen? PHP-Funktionsaufruf...?

            und der chmod für die verzeichnisse sowie unterverzeichnisse war auf 777 eingestellt...

            Also an Permissions sollte es nicht gelegen haben.

            Liebe Grüße,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
            1. Hallo,

              und wie hast Du sie öffnen wollen? PHP-Funktionsaufruf...?

              Na mit fopen() aber dass konnte er nich weil die dateien angeblich noch nicht vorhanden waren..
              aber normalerweise wird die datei (bei mode "w" wie bei mir) erst erstellt und dann geöffnet..
              Dass ist hier halt nich der Fall und an den Permissions kanns auch nicht gelegen haben.

              MfG,
              JulianBaumueller.

              1. Hello,

                Na mit fopen() aber dass konnte er nich weil die dateien angeblich noch nicht vorhanden waren..
                aber normalerweise wird die datei (bei mode "w" wie bei mir) erst erstellt und dann geöffnet..
                Dass ist hier halt nich der Fall und an den Permissions kanns auch nicht gelegen haben.

                Dann wäre es an der Zeit, den Echt-Code zu posten.
                Und die tatsächlichen Fehlermeldungen wären auch ganz hilfreich. Wenn keine gekommen sind, dann sorg erstmal dafür, dass Du welche bekommst.

                Vermutlich hast Du irgendwelche Pfade nicht beachtet, oder der Safe-Mode ist eingeschaltet oder es liegt eine "open-Basedir-Restriction" vor, doer das Script hat ein falsches Zeitverhalten [z.B. fclose() fehlt] oder was auch immer.

                Es gibt ca. 8 bis 10 kombinierbare Fehlermöglichkeiten.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Hallo,

                  Hier erstmal der Echt-Code:

                    
                    
                    <?php  
                    
                     $mailtext = "BlaBla,.@+-,#'... (Passwort ist nur ein Übergangspasswort)";  
                      $mailsubject = "Neuregistrierung bei 'nicht.meine.url.org'";  
                    
                      $firstname = $_POST['firstname'];  
                      $lastname = $_POST['lastname'];  
                      $email = $_POST['email'];  
                      $password = rand("10000", "99999");  
                    
                      $userdir = "seiten/include/userpanel/users/$email/";  
                      $passwortdatei = "seiten/include/userpanel/users/$email/passwort.txt";  
                      $userinfodatei = "seiten/include/userpanel/users/$email/userinfo.txt";  
                    
                      if($_POST['submit'])  
                        {  
                    
                            if(empty($firstname) || empty($lastname) || empty($email))  
                              {  
                                echo '<div id="falsebox">Bitte füllen Sie alle Felder aus!</div>';  
                              }  
                    
                            elseif(is_dir($userdir))  
                              {  
                                echo '<div id="half_falsebox">Diese eMail-Adresse ist bereits bei uns Registriert.</div>';  
                              }  
                    
                            else  
                              {  
                                mail($email, $mailsubject, $mailtext);  
                                echo '<div id="okbox">Herzlichen Glückwunsch! Sie haben sich soeben erfolgreich bei Subsession.NET registriert!</div>';  
                                echo '<div id="sentmailbox">Ihnen wurde soeben eine eMail an '.$email.' gesendet. Bitte lesen Sie diese sorgfältig durch.</div>';  
                    
                                $pwd = fopen($passwortdatei, "wb");  
                                $pwdeingabe = "$password";  
                                echo fwrite($pwd, "$pwdeingabe");  
                                fclose($pwd);  
                    
                    
                    
                                $uid = fopen($userinfodatei, "wb");  
                                $uideingabe = "$datum  
                                               $uhrzeit  
                                               $firstname  
                                               $lastname";  
                                echo fwrite($uid, "$uideingabe");  
                                fclose($uid);  
                              }  
                    
                        }  
                    
                    
                    
                  ?>  
                  
                  

                  Fehlermeldungen:

                  Warning: fopen(seiten/include/userpanel/users/asd/passwort.txt) [function.fopen]: failed to open stream: No such file or directory in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 79

                  Warning: fwrite() expects parameter 1 to be resource, boolean given in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 81

                  Warning: fclose() expects parameter 1 to be resource, boolean given in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 82

                  Warning: fopen(seiten/include/userpanel/users/asd/userinfo.txt) [function.fopen]: failed to open stream: No such file or directory in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 86

                  Warning: fwrite() expects parameter 1 to be resource, boolean given in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 91

                  Warning: fclose() expects parameter 1 to be resource, boolean given in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 92

                  Hoffe dass hilft euch weiter ;)

                  MfG,
                  JulianBaumueller.

                  1. Hi,

                    $firstname = $_POST['firstname'];
                        $lastname = $_POST['lastname'];
                        $email = $_POST['email'];

                    wozu diese Umkopiererei?

                    $password = rand("10000", "99999");

                    Die rand()-Funktion erwartet zwei numerische Parameter. Warum übergibst du Strings, die implizit erst wieder in Zahlen umgewandelt werden müssen?

                    $userdir       = "seiten/include/userpanel/users/$email/";
                        $passwortdatei = "seiten/include/userpanel/users/$email/passwort.txt";
                        $userinfodatei = "seiten/include/userpanel/users/$email/userinfo.txt";

                    Das merken wir uns mal ...

                    $pwd = fopen($passwortdatei, "wb");

                    So, und du bist sicher, dass ./seiten/include/userpanel/users/$email/passwort.txt (vom Verzeichnis des Scripts aus gesucht) existiert, obwohl du das Verzeichnis ./seiten/include/userpanel/users/$email gar nirgends angelegt hast? Und warum im Binary Mode öffnen, wenn du eh bloß textbasiert schreibst?

                    $pwdeingabe = "$password";
                                  echo fwrite($pwd, "$pwdeingabe");

                    Wozu kapselst du Stringvariablen nochmal in einen String? Und die Ausgabe der Länge von $pwdeingabe (oder false im Fehlerfall) hat einen Sinn?

                    Warning: fopen(seiten/include/userpanel/users/asd/passwort.txt) [function.fopen]: failed to open stream: No such file or directory in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 79

                    Siehe oben - das Verzeichnis ./seiten/include/userpanel/users/asd scheint nicht zu existieren.

                    Warning: fwrite() expects parameter 1 to be resource, boolean given in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 81

                    Folgefehler: fopen() hat wegen des Fehlers kein Ressourcen-Handle geliefert, sondern false; du prüfst die Fehlerbedingung aber nicht, sondern machst lustig weiter, als sei alles okay.

                    Warning: fclose() expects parameter 1 to be resource, boolean given in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 82

                    Dito.

                    Warning: fopen(seiten/include/userpanel/users/asd/userinfo.txt) [function.fopen]: failed to open stream: No such file or directory in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 86

                    Warning: fwrite() expects parameter 1 to be resource, boolean given in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 91

                    Warning: fclose() expects parameter 1 to be resource, boolean given in /users/960311/www/url.org/seiten/include/userpanel/register.php on line 92

                    Nochmal dasselbe in Grün.

                    Hoffe dass hilft euch weiter ;)

                    Hoffe, das hilft *dir* weiter.

                    Ciao,
                     Martin

                    --
                    Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Beim Universum bin ich mir aber nicht ganz sicher.
                      (Albert Einstein, deutscher Physiker)
                    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                    1. Hallo,

                      du hast in deiner Antwort geschrieben, dass ich ja ein verzeichnis öffnen will, dass garnicht existiert. (./seiten/include/userpanel/users/$email/)

                      Und da liegt ja eben mein hauptsächliches Problem.
                      Normalerweise (also so hab ich das in Erinnerung), werden die Dateien sowie Verzeichnise bei Mode "w" erstellt und dann wird in diese geschrieben.

                      Dass ist bei mir ja nicht der Fall.
                      Mein Script erstellt weiß Gott keine Dateien oder Verzeichnisse.
                      Und darum kann es auch die angegebenen Dateien nicht finden.

                      Mit freundlichen Grüßen,
                      JulianBaumueller.

                      1. Hi Julian,

                        du hast in deiner Antwort geschrieben, dass ich ja ein verzeichnis öffnen will, dass garnicht existiert. (./seiten/include/userpanel/users/$email/)

                        ja, richtig.

                        Und da liegt ja eben mein hauptsächliches Problem.
                        Normalerweise (also so hab ich das in Erinnerung), werden die Dateien sowie Verzeichnise bei Mode "w" erstellt und dann wird in diese geschrieben.

                        Und das stimmt nicht. Dateien werden neu angelegt, wenn sie nicht existieren. Verzeichnisse müssen aber vorher angelegt werden. Wenn du also, wie in deinem Testfall, eine Datei ./seiten/include/userpanel/users/ads/passwort.txt erzeugen willst, musst du zuerst das Verzeichnis ./seiten/include/userpanel/users/ads anlegen.

                        Ein Regal musst du ja auch erst aufbauen, bevor du etwas hineinräumen kannst.

                        So long,
                         Martin

                        --
                        Wenn ein Räuber eine deutsche Amtsstube überfällt, welchen Satz kann er sich dann sparen?
                        "Keine Bewegung!"
                        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                        1. Hallo,

                          cool, danke!
                          Soweit zum Lehrreichen Teil ;)

                          hast du ne ahnung wie man verzeichnise via PHP anlegen kann ? o.O

                          MfG,
                          Julian Baumüller.

                          1. Lieber JulianBaumueller,

                            hast du ne ahnung wie man verzeichnise via PHP anlegen kann ? o.O

                            jetzt aber bitte!? Die PHP-Doku kennst Du? Und Du weißt auch, wie man dort die entsprechenden Funktionen findet? Soviel Englisch wirst Du ja wohl noch zusammenkriegen, oder!?

                            Liebe Grüße,

                            Felix Riesterer.

                            --
                            ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
                            1. Klaaar, klaar.. :)

                              Hab auch gemerkt, nachdem ich den Post gesendet hab, dass mir bei der Sache jetzt eigentlich Google auch weiterhelfen könnte.. :D

                              Bin aufs mkdir() auch schon alleine gekommen aber trotzdem für jede Hilfe von euch!

                              Spitzenklasse (-:

                              MfG,
                              JulianBaumueller

                          2. Hi,

                            cool, danke!
                            Soweit zum Lehrreichen Teil ;)

                            dan dann haben wir doch schon einen guten Anfang. :-)

                            hast du ne ahnung wie man verzeichnise via PHP anlegen kann ? o.O

                            Hmm. Wie könnte das wohl gehen?
                            Vielleicht sollte man im PHP-Manual mal nach den Dateisystemfunktionen gucken?
                            Was haben wir denn da ... mkdir() klingt doch gar nicht so schlecht.

                            Das hättest du aber auch alleine finden können - zumal die Funktion genauso heißt wie das entsprechende Kommando an der Konsole (Windows wie Unix/Linux). Zufall? Sicher nicht.

                            Ciao,
                             Martin

                            --
                            Disziplin: Teppichböden wiederfinden, wenn man sie verlegt hat.
                            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                        2. Hello,

                          Und da liegt ja eben mein hauptsächliches Problem.
                          Normalerweise (also so hab ich das in Erinnerung), werden die Dateien sowie Verzeichnise bei Mode "w" erstellt und dann wird in diese geschrieben.

                          Das gilt nur für Linux und 'mkdir -p pfad/zur/datei'. PHP hat dies in mkdir übernommen mittels des 'recursive'-Flags. Das hast Du aber gar nicht gesetzt, da Du ja mkdir gar nicht benutzt :-)

                          Der gesamte Aufbau ist außerdem äußerst gefährlich für Deinen Server. Die User könnten so fast überall auf dem System (wo PHP Zugriff hat) herumschreiben, wenn der Provider geschlafen hat, auch in den Datenbereichen anderer User / Domains.

                          Du solltest immer erst

                          • Daten übernehmen
                              dazu müssen die Post-Parameter nicht umkopiert werden, sondern besser gefprüft werden
                              ob alle erwarteten Parameter gesendet wurden, ob keine unerwarteten gesendet wurden,
                              ob die erwarteten im erlaubten Wertebereich liegen

                          • gesendete Daten auswerten und die passenden Entscheidungen daraus ableiten

                          • die entschiedenen Aktionen durchführen, berechnete Daten wegschreiben, usw.

                          • aus den entstandenen Daten die Antwort berechnen
                              und ganz zum Schluss die Antwort senden

                          Versuch mal, das Script zu sortieren.
                          Das if/else gehört auf jeden Fall _vor_ die Aktionen

                          Außerdem solltest Du Benutzerdaten nicht innerhalb der Dokument Root speichern.
                          Du könntest den Nutzernamen, seine eMail und sein Passwort auch zusammen mit denen der anderen User in einer einzigen Datei speichern. Bei wenigen Usern (bis 500MB Dateigröße) bietet sich für diese Datei dann ein serialisiertes Array ("Spaltenarray") an. Darin solltest Du ca. 5.000 Userdatensätze unterbringen können.

                          Lies Dir dann als nächstes bitte die zwei Artikel durch
                          http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/
                          http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel

                          Liebe Grüße aus dem schönen Oberharz

                          Tom vom Berg

                          --
                           ☻_
                          /▌
                          / \ Nur selber lernen macht schlau
                          http://bergpost.annerschbarrich.de
                          1. Hello,

                            mmmh, das sollte eigentlich nicht an Martin, sondern an Julian gehen, aber der wird es hoffentlich noch lesen :-)

                            Liebe Grüße aus dem schönen Oberharz

                            Tom vom Berg

                            --
                             ☻_
                            /▌
                            / \ Nur selber lernen macht schlau
                            http://bergpost.annerschbarrich.de
                            1. Hallo,

                              mmmh, das sollte eigentlich nicht an Martin, sondern an Julian gehen

                              yo, das war mir eigentlich klar. ;-)

                              aber der wird es hoffentlich noch lesen :-)

                              Ich hoff's auch. Vor allem dein Hinweis, dass man bei geschickter Eingabe des Parameters, der hier als Mailadresse interpretiert wird, fast beliebige Verzeichnisse auf dem Server erreichen kann, ist IMHO sehr hilfreich.

                              Ciao,
                               Martin

                              --
                              Computer funktionieren grundsätzlich nicht richtig.
                              Wenn doch, hast du etwas falsch gemacht.
                              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(