Letöltés

A php programozásról.
Fórum szabályok
Ha elakadtál, és programkódod is van, mindenképpen nyiss neki egy új témát.
Könnyebb úgy segíteni, hogyha elkülönülnek a témakörök és problémák egymástól. PHP kódokhoz használjátok a
Rolend23
Tag
Hozzászólások: 13
Csatlakozott: 2013.01.27. 18:34

Letöltés

Hozzászólás Szerző: Rolend23 »

Heló :)

Lenne egy kis problémám egy letöltő progival. A feltöltés jó fel megy a fájl a helyére és az adatbázisba is bekerülnek az adatok.
A letöltés is jó egy darabig a fájl lejön csak nem lehet megnyitni a fájlok amiket letöltenék az .pdf vagy .doc lenne utána néztem már a MIME szabványoknak is meg melyik fájlhoz vagy is kiterjesztéshez mi kell de nem jó. Az Office nem nyitja meg a doksit az Adobe Reader meg hibát jelez "A fájl sérül vagy nem megfelelő formátum (vagy hibásan dekódolt e-mail csatolmány)." Már át néztem pár dolgot elég sokszor de nem tudok rá jönni mi a baja.

Ez a letöltő kódja :

Kód: Egész kijelölése

//Jegyzet letöltése   
if(isset($_GET['jegyzetle'])) {
    $fajlom = $_GET['jegyzetle'];
    $sql2 = mysql_query("SELECT * FROM szoveges_fajlok WHERE dokumentum_id='$fajlom' "); 
    $dnn2 = mysql_fetch_assoc($sql2);
    
  $forbidden = Array("php", "php3", "php4", "php5");
  $folder = "feltoltesek/dokumentumok";
  $pathInfo = pathinfo($dnn2['fajl_helye']);
  $fileName = $pathInfo['basename'];
  $filePath = $folder."/".$fileName;  
  if (is_readable($filePath) && is_file($filePath) && !in_array($pathInfo['extension'], $forbidden)) {
    $disposition = "atachment"; //inline: az oldalon leht olvasni
    $mimeType = "application/pdf";
    session_write_close(); 
    if (isset($_SERVER['HTTPS'])) {
      header("Pragma: ");
    }
    header("Content-Type: $mimeType");
    header('Accept-Ranges: bytes');
    header("Content-Transfer-Encoding: binary\n");
    header("Content-Disposition: $disposition; filename=\"".trim(htmlentities($fileName))."\"");
    header("Content-Length: ".(string)(filesize($filePath)));
    header('Cache-Control: public, must-revalidate, max-age=0');
    header('Pragma: no-cache');  
    header("Connection: close");
    $bufferSize = 16 * 1024;
    $handler = @fopen($filePath, "rb");
    while (!feof($handler)) {
      @fread($handler, $bufferSize);
      @flush();
    }
    @fclose($handler);
    exit;
  }
}
Ez úgy műkszik, hogy egy linkkel elküldöm a fájl azonosítóját és ha megkapja az értéket a ?jegyzetle akkor elindul egy lekérdezés és szűri az azonosítóval és az adatbázisban lévő fájl helyét lekérdezem. és utána ezt darabolgatom a név meg kiterjesztés ..stb. És megadom a fájl helyét külön.

A kód nem önálló munkám csak találtam és kicsit babráltam vele.

A segítséget előre is köszi. Ha valamit nem mondtam el szólj.

csigi
Tag
Hozzászólások: 124
Csatlakozott: 2011.10.31. 16:22

Re: Letöltés

Hozzászólás Szerző: csigi »

A szerveren található fájl és a letöltött mérete megegyezik?

Szerintem az alábbi sort:

Kód: Egész kijelölése

header("Content-Length: ".(string)(filesize($filePath))); 
cseréld erre:

Kód: Egész kijelölése

header("Content-Length: ".(filesize($filePath))); 

Válasz küldése