kostenloser Webspace werbefrei: lima-city


Dateidownload nur über PHP-Script

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    Ich verwende derzeit folgendes PHP-Script, um vor dem Download-Start einer Datei von meinem Server einen Download-Zähler hochzuzählen.
    <?php
    $path="./downloads/";
    
    $f = @strip_tags($_GET['f']);
    
    if ($f!="")
    {
      $dir_handle = @opendir($path) or die("Unable to open ".$path);
      while ($file = readdir($dir_handle))
      {
        if (!is_dir($file))
        {
          if ($file==$f)
          {
            rename($path.$file,$path."0:0:".$file);
            $file = "0:0:".$file;
          }
    
          $fparts = preg_split('/:/',$file);
    
          if ((count($fparts)>1) && ($fparts[2]==$f))
          {
            $dlcount = intval($fparts[0])+1;
            $frandom = hash("md5",microtime());
            $newfilename=$dlcount.":".$frandom.":".$f;
    
            rename($path.$file,$path.$newfilename);
    
            break;
          }
        }
      }
    
      if (isset($newfilename) && ($newfilename!=""))
      {
        header('Content-type: application/zip');
        header('Content-Disposition: attachment; filename="'.$f.'"');
        header("Content-Transfer-Encoding: binary");
        readfile($path.$newfilename);
      }
    
    }
    ?>


    Der Download wird dann halt zum Beispiel mit "http://domainname.at/download.php?f=dateiname.zip" gestartet.

    Der Code funktionierte für meine bisherigen Zwecke sehr gut, hatte den Zähler direkt im Dateinamen und vergab auch gleich immer einen Zufalls-Hash, um einen direkten Link auf die Datei unmöglich zu machen.
    Ich habe in letzter Zeit aber festgestellt, dass das "readfile()" Kommando von PHP bei größeren Dateien nicht zu funktionieren scheint.
    Bei meinen derzeitigen Tools, die meist nur ein paar hundert KB an Größe hatten, funktionierte der Download einwandfrei.
    Sobald die Dateien aber eine Größe von mehreren MB annehmen, und ich dann versuche, sie über das Script runterzuladen, wird zwar der Zähler hochgezählt, aber ich erhalte nur eine weiße Seite und es passiert nichts. (Download startet nicht)

    Das scheint eine Art Größenbegrenzung für PHP-Downloads zu sein?!?
    Ich habe dazu nirgends einen Parameter gefunden, den man größenmäßig anpassen könnte, sowie das in der "php.ini" ja auch mit der Upload-Größe machbar währe.

    Ich habe mir allerdings überlegt, erst mittels htaccess den direkten Zugriff auf die Datei zu Blocken....z.B.:
    <Files "dateiname.zip">
    Deny from all
    </Files>

    ....und nur den Redirect auf diese Datei mittels PHP-Script zu erlauben....
    <?php
    
       header( 'Location: http://domainname.at/downloads/dateiname.zip' ) ;
    
    ?>


    Da könnte ich dann vorher noch eine Zählfunktion einbauen.
    Würde das funktionieren, oder würde dieser Redirect als ganz normaler Zugriff via Browser gewertet werden und auch über htaccess geblockt werden?
    Wie mach ich das am besten, dass der Download nur über das PHP-Script klappt?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Um den Fehler in deinem PHP Script zu finden solltest du mal versuchen die Fehlerausgabe einschuschalten.
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!