Ankündigung

Einklappen
Keine Ankündigung bisher.

fopen geht nicht, ich glaube ich bin dumm.

Einklappen

Neue Werbung 2019

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

  • fopen geht nicht, ich glaube ich bin dumm.

    Hi. Ich verwende in meinem Script 2 mal fopen auf 2 Textdateien. Eine ziehe ich vorher von einem FTP-Server ins lokale Verzeichnis und öffne es dann. Die andere habe ich einfach erstellt und im Verzeichnis eingefügt.

    So. Die vom FTP kann ich ohne Probleme öffnen. Die andere findet er nicht. Sie liegt aber in dem gleichen Verzeichnis wie die andere Datei vom FTP. Auch das Script ist in dem Verzeichnis.

    Dann habe ich einfach mal alles rausgenommen von der ersten fopen Routine, nur noch die der selbsterstellten Datei drin gelassen. Geht immer noch nicht.

    Dann habe ich einfach mal mit der Routine die nun lokale FTP-Datei geöffnet, was dann ging!

    Letztendlich steht also fest, die vom FTP-gezogene Datei lässt sich so öffnen, die selbst eingefügte nicht. Die CHMOD-REchte sind beide gleich (644).

    Warum kann ich die Datei nicht öffnen? HILFE!!!!

    Linuxei..



    PS:

    http://de2.php.net/fopen habe ich schon geschaut. Aber konnte mir auch nicht helfen, da ich ja die Datei lokal habe und eine andere im gleichen Verzeichnis funktioniert...

    Hiermit rufe ich die Datei auf. Hatte auch schon mal rb anstatt r versucht. Aber alles ohne Erfolg. Ich möchte nur die Datei zeilenweise auslesen...

    Code:
        $fh = fopen("aaa.txt", "r"); // Datei öffnen
          
        
        if (is_resource($fh))
         {
          while ($zeile = fgets($fh))
            {
             echo $zeile, ' 
    ';
            }
            
          fclose($fh);
          
         }
        else // Sonst Fehlermeldung
         {
          echo "OhHoh";
         }


    Und hier noch die Fehlermeldung:


    Warning: fopen(aaa.txt): failed to open stream: No such file or directory in /homepages/42/d113425235/htdocs/phpkit/eigenes/counterstrike/css1stats.php on line 285
    OhHoh


  • #2
    Schau dir mal bitte fgets() im Handbuch an ...

    Kommentar


    • #3
      Der Fehler liegt bei fopen. Ich kann so die andere Datei auslesen. Kein Problem. Aber bei selbsterstellten/hochkopierten funktioniert es nicht. Findet dann die Datei nicht.

      Die Zeile 185 ist die erste Zeile im Codefeld. Habe die Schleife jetzt auch mal leer gemacht, es passiert aber nichts. Und wie gesagt, mit der anderen Datei geht es. Alles wird ausgegeben. Und sie liegt im gleichen Verzeichnis und beide haben CHMOD 644. Alles gleich. Habe die Datei auch schon unterschiedlich hochgeladen. Binär und Ascii. Mit Smartftp. Nichts.

      Kommentar


      • #4
        Ich kann so die andere Datei auslesen. Kein Problem. Aber bei selbsterstellten/hochkopierten funktioniert es nicht.
        Wie sind die "funktionierenden" Dateien denn auf das System gekommen?
        PHP-Code:
        <?php
        $direntries 
        glob('./*');
        foreach(
        $direntries as $direntry) {
            
        $bIsFile is_file($direntry);
            echo 
        $direntry'ist ',  ($bIsFile) ? 'eine Datei.':'ein Verzeichnis.';
            if (
        $bIsFile) {
                echo 
        ' fopen ';
                
        $fh fopen($direntry'r'); // Datei öffnen
                
        echo (!$fh) ? 'gescheitert':'erfolgreich';
            }
            echo 
        "
        \n"
        ;
        }
        ?>

        Kommentar


        • #5
          Hi

          Mit dieser Zeile:

          PHP-Code:
          <?php
          copy
          ("ftp://User:Passwort@url/hlds/cstrike/cfg/mani_admin_plugin/mani_ranks.txt","aaa.txt");
          ?>

          Diese Datei wird immer kopiert und macht auch keinen Fehler. Die eingene Datei habe ich mit dem Editor erstellt und als Textdatei gespeichert. Kann die Datei auf dem Server auch umbennen. Geht immer, die selbsterstellte geht nie. Kann man irgendwie etwas veranstalten, das die Datei "nicht sichtbar" markiert wird? Und wenn ja, wie bekomme ich das weg.

          Ist echt seltsam. So ein Sch..... hält echt auf.

          Kommentar


          • #6
            Es sollte mit den Dateirechten gegessen sein. Die stehen wirklich auf 0644?
            Wem gehören die Dateien, wlcher Gruppe sind sie zugeordnet?
            Unter welchem Account/welcher Gruppe läuft das Skript?

            Kommentar


            • #7
              Hm.... Ich versuche zu antworten so gut es geht.

              Also es steht im SmartFTP unter CHMOD:

              644 (ist nur dreistellig)
              Owner: Read und Write. Execute und Set UID nicht.
              Group: Read. Write, Execute und Set GID nicht
              Public: Read. Write, Execute und Sticky nicht.

              Habe auch schon mal alles gesetzt. Ging aber nicht. (Set GID und Set UID kann ich nicht aktivieren)

              User = die 1und1 Nummer, also mein Benutzername zum einloggen.
              Group = ftpusers

              bei der Datei vom FTP genau das gleiche.

              Ebenfalls die PHP-Datei. Gleiche Rechte und Zuordnung.

              Kommentar


              • #8
                Die Worte hör' ich wohl, allein der rechte Glauben fehlt.

                Einfach mal durchtesten.
                PHP-Code:
                <?php
                $direntries 
                glob('./*');
                foreach(
                $direntries as $direntry) {
                    
                $s stat($direntry);
                    echo 
                'Name: '$direntry"
                \n"
                ;
                    if (!
                $s) {
                        echo 
                'stat failed';
                    }
                    else
                    {
                        echo 
                'mode: '$s['mode'], "
                \n"
                ,
                                
                'perm:'sprintf('0%03o', ($s['mode']&0777)), "
                \n"
                ,
                                
                'uid: '$s['uid'], "
                \n"
                ,
                                
                'gid: '$s['gid'], "
                \n"
                ;
                    }
                    echo 
                "\n<hr />\n";
                }
                ?>
                Das sollte dann ja für alle Dateien (bis auf den Namen) das gleiche anzeigen.

                Kommentar


                • #9
                  So! Ich denke, ich habe den Fehler. Die Datei sucht er im Verzeichnis /phpkit/.... OH MANN!!!! Da hat er die Andere auch liegen. So ein Mist.... TUT MIR LEID!!! Habe im Grundverzeichnis / geschaut, nix. Und im Verzeichnis des Scriptes (/phpkit/eigenes/counterstrike/XXXXXXx.XXX). Alles ging nicht. Das er es dazwischen ablegt, wußte ich nicht. Muss ich auch erst mal verstehen. Wie bringe ich die Dateien denn wohl in mein Verzeichnis?

                  Ist ja so aufgebaut, mein Verzeichnisbaum zu meinem Ordner:
                  /phpkit/eigenes/counterstrike/XXXXXXx.XXX

                  muss ich dann Dateien so ansprechen?:

                  ./eigenes/counterstrike/xxxxxxx.xxx

                  Ich danke dir aber, weil dein Script mir indirekt geholfen hat. Die Datei (aaa.txt) kam nämlich nicht vor in der von deinem Script erstellten Auflistung. Und er hat nur Verzeichnisse aus /phpkit aufgelistet. Darum habe ich da mal genauer geschaut. Und so auch gefunden.

                  ICH DANKE DIR!!!! Hatte ich aber schon richtig getippt in der Überschrift..... "Ich glaube, ich bin dumm..... "

                  Ich hoffe, ich darf weiterhin Fragen stellen..

                  Linuxei

                  Kommentar


                  • #10
                    Das war nach der Fehlermeldung auch stark zu vermuten

                    Es gibt das sogenannte aktuelle Arbeitsverzeichnis (current working directory, cwd). Mittels getcwd kann man es abfragen, mit chdir ändern, beides beschrieben bei http://de3.php.net/dir
                    Relative Pfadangaben (also auch reine Dateinamen) beziehen sich immer auf das cwd.
                    IdR ist das cwd bei Bearbeitungsbeginn das Verzeichnis, in dem sich das (vom Webserver aufgerufene) Hauptskript befindet.
                    http://www.irgendw.as/skript.php -> /home/www/htdocs/skript.php -> cwd=/home/www/htdocs/
                    Wenn ein weiteres Skript per include/require eingebunden und abgearbeitet wird, ändert sich das cwd nicht.
                    include 'dir1/worker.php' bindet also /home/www/htdocs/dir1/worker.php ein aber cwd bleibt /home/www/htdocs/.
                    steht in worker.php also fopen('test.txt', 'r'), wird nach /home/www/htdocs/test.txt gesucht, nicht nach /home/www/htdocs/dir1/test.txt

                    Kommentar


                    • #11
                      Ok

                      Ich werde mir das mal anschauen. Also langsam durchlesen. ^^

                      Ich danke dir für deine Mühe! =)

                      Linuxei

                      Kommentar

                      Lädt...
                      X