Ankündigung

Einklappen
Keine Ankündigung bisher.

404 Error

Einklappen

Neue Werbung 2019

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

  • 404 Error

    Dieses Skript soll eine Datei in einem nicht über HTTP zu aufrufenden
    Verzeichnis aufrufen. Aber wenn ich zum Besipiel das script so aufrufe:
    meineurl.de/media.php?user=tester&file=12.jpg (existiert) bekomme ich
    eine 404 Fehlermeldung. Das liegt an dem Header-Befehl. Aber was kann
    ich da anstatt header verwenden, was funktioniert?


    PHP-Code:
    <?php
    $user
    =$_GET['user'];
    $file=$_GET['file'];

    if(isset(
    $_GET['filesize'])){
        exit;
    }

    $filepath="/srv/www/htdocs/web98/files/files/$user/$file";
    if(!
    file_exists($filepath)){
        exit;
    }

    else{
    $filesize=filesize($filepath);
    $filetype=filetype($filepath);

    $month=date("m");
    $year=date("Y");
    $date=$month $year;

    include(
    "/srv/www/htdocs/web98/files/hpworld.inc.php");
    $sql="SELECT jahr,monat FROM kundentraffic WHERE benutzername='$user'";
    $query=mysql_query($sql);
    $array=mysql_fetch_array($query);

    $jahr=$array['jahr'];
    $monat=$array['monat'];
    $datum=$monat $jahr;

    if(
    $datum != $date){
        
    $sql2="INSERT INTO kundentraffic(benutzername,jahr,monat,bytes) VALUES ('$user','$year','$month','$filesize')";
        
    mysql_query($sql2);
        
    mysql_close();
    }

    else{
        
    $sql3="SELECT bytes FROM kundentraffic WHERE benutzername='$user' AND jahr='$year' AND monat='$month'";
        
    $query3=mysql_query($sql3);
        
    $array3=mysql_fetch_array($query3);

        
    $existbytes=$array3['bytes'];
        
    $newbytes=$existbytes $filesize;

        
    $sql4="UPDATE kundentraffic SET bytes='$newbytes' WHERE benutzername='$user' AND jahr='$year' AND monat='$month'";
        
    mysql_query($sql4);
        
    mysql_close();
    }
        
    header("Content-type: $filetype");
        
    header("Location: $filepath");
        exit;
    }
    ?>

  • #2
    Wenn Dateien nicht per HTTP erreichbar sind, kannst du dorthin auch nicht mit einem Location-Header hinleiten. Du müsstest den Inhalt der Datei also mit readfile() oder file_get_contents() ermitteln.

    Kommentar


    • #3
      Zitat von xabbuh
      Wenn Dateien nicht per HTTP erreichbar sind, kannst du dorthin auch nicht mit einem Location-Header hinleiten. Du müsstest den Inhalt der Datei also mit readfile() oder file_get_contents() ermitteln.
      Danke. Gibt es eine Funktion in PHP, mit der man den MIME-typ der Datei ermitteln kann?

      Kommentar


      • #4
        Zitat von xabbuh
        Du müsstest den Inhalt der Datei also mit readfile() oder file_get_contents()...
        aber bitte nicht mit diesem script, da man sich ansonsten alles mögliche zuschicken lassen kann.

        Kommentar


        • #5
          Zitat von Clan
          Zitat von xabbuh
          Du müsstest den Inhalt der Datei also mit readfile() oder file_get_contents()...
          aber nicht mit diesem script, da man sich ansonsten alles mögliche zuschicken lassen kann.
          Wie meinst du das?

          Kommentar


          • #6
            In dem Script ist keine Prüfung drin..

            Beispiel was man machen könnte
            PHP-Code:
            $GET['file'] = '../../config.inc';
            $filepath="/srv/www/htdocs/web98/files/files/$user/$file"
            if(!
            file_exists($filepath)){ 
            }
            .
            .
            .
            readfile(...) 

            Kommentar


            • #7
              Zitat von Clan
              In dem Script ist keine Prüfung drin..

              Beispiel was man machen könnte
              PHP-Code:
              $GET['file'] = '../../config.inc;
              $filepath="/srv/www/htdocs/web98/files/files/$user/$file"; 
              if(!file_exists($filepath)){ 
              }
              .
              .
              .
              readfile(...) 
              Es können von den Usern nur bestimmte Dateien hochgeladen werden. :wink:

              Kommentar


              • #8
                es geht nicht ums hochladen sondern um das runterladen..

                manipuliere ich die url so wie beschrieben, kann ich mir einige files runterladen

                Kommentar


                • #9
                  Zitat von Clan
                  es geht nicht ums hochladen sondern um das runterladen..

                  manipuliere ich die url so wie beschrieben, kann ich mir einige files runterladen
                  Achso. dann ersetze ich mit str_replace alle ../ mit einem leerzeichen.

                  Kommentar


                  • #10
                    brauchste nicht, entweder du benutzt nicht den dateinamen sondern eine id
                    oder du verwendest z.b. dies hier:

                    http://de.php.net/manual/de/function.basename.php

                    Kommentar


                    • #11
                      So. Jetzt hab ich das Script mit basename ergänzt:
                      PHP-Code:
                      <?php
                      $username
                      =$_GET['username'];
                      $file=basename($_GET['file']);

                      if(isset(
                      $_GET['filesize'])){
                          exit;
                      }

                      $filepath="/srv/www/htdocs/web98/files/files/$username/$file";
                      if(!
                      file_exists($filepath)){
                          exit;
                      }

                      else{
                      $filesize=filesize($filepath);
                      $filetype=filetype($filepath);

                      $month=date("m");
                      $year=date("Y");
                      $date=$month $year;

                      include(
                      "/srv/www/htdocs/web98/files/hpworld.inc.php");
                      $sql="SELECT jahr,monat FROM kundentraffic WHERE benutzername='$username'";
                      $query=mysql_query($sql);
                      $array=mysql_fetch_array($query);

                      $jahr=$array['jahr'];
                      $monat=$array['monat'];
                      $datum=$monat $jahr;

                      if(
                      $datum != $date){
                          
                      $sql2="INSERT INTO kundentraffic(benutzername,jahr,monat,bytes) VALUES ('$user','$year','$month','$filesize')";
                          
                      mysql_query($sql2);
                          
                      mysql_close();
                      }

                      else{
                          
                      $sql3="SELECT bytes FROM kundentraffic WHERE benutzername='$username' AND jahr='$year' AND monat='$month'";
                          
                      $query3=mysql_query($sql3);
                          
                      $array3=mysql_fetch_array($query3);

                          
                      $existbytes=$array3['bytes'];
                          
                      $newbytes=$existbytes $filesize;

                          
                      $sql4="UPDATE kundentraffic SET bytes='$newbytes' WHERE benutzername='$username' AND jahr='$year' AND monat='$month'";
                          
                      mysql_query($sql4);
                          
                      mysql_close();
                      }
                          
                      header("Content-type: $filetype");
                          
                      readfile($filepath);
                         exit;
                      }
                      ?>
                      Weißt du obs eine PHP-funktion gibt, die den MIME-type einer Datei ermittelt. Hab bei php.net gesucht, aber nichts gefunden.

                      Kommentar


                      • #12
                        http://de2.php.net/mime_content_type

                        zudem musste noch den usernamen sichern, falls auch dies per url übergeben werden sollte..

                        PHP-Code:
                        $username=$_GET['username']; 

                        Kommentar


                        • #13
                          Zitat von Clan
                          http://de2.php.net/mime_content_type

                          zudem musste noch den usernamen sichern, falls auch dies per url übergeben werden sollte..

                          PHP-Code:
                          $username=$_GET['username']; 
                          Wie den Usernamen sichern?
                          Wenn man den falschen Username angibt, kann man die Datei nicht aufrufen,
                          da der Dateiname ja den Usernamen enthält.

                          Und obwohl ich php version 4.3.10 habe, kommt immer Fatal error: Call to undefined function: mime_content_type() in /srv/www/htdocs/web98/html/hpworld/media.php on line 17

                          Kommentar


                          • #14
                            Weiß denn niemand wie man trotzdem den MIME-typ rausfinden kann?

                            Kommentar


                            • #15
                              mime_content_type() ist nur verfügbar, wenn PHP entsprechend kompiliert wurde.

                              Kommentar

                              Lädt...
                              X