Szerző Téma: Fájlok letöltése  (Megtekintve 4811 alkalommal)

0 Felhasználó és 1 vendég van a témában

Nem elérhető Stephard

  • Felhasználó
  • Hozzászólások: 17
  • Karma: 0
Re: Fájlok letöltése
« Válasz #38 Dátum: 2011. február 16., 11:31:50 »
Hasznos volt ez a hozzászólás? 0
Hét kimásoltam egy uj fájlba a mimetipus() függvényt, és a letoltő függvény tartalmát, a eltöltő függvény meg csak meghívja azt a fájlt.
Szal így működik.
AZért köszi mindenkinek :)

Nem elérhető Keveqiah

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 2.346
  • Kisb
  • Karma: +81
    • Keveqiah
Re: Fájlok letöltése
« Válasz #37 Dátum: 2011. február 15., 09:06:03 »
Hasznos volt ez a hozzászólás? 0
Akkor passz.. :)
Próbáld meg, hogy kicseréled ezt a rész:
Kód: PHP
  1.         $fa=fopen($url, "r");
  2.     while (!feof($fa))
  3.          {
  4.          $sor=fgetc($fa);
  5.           print $sor;
  6.         }
  7.         fclose($fa);
  8.  
erre
Kód: PHP
  1.         $handle = fopen($url, 'rb');
  2.         fpassthru($handle);
  3.         fclose($handle);
  4.  
"Gonosz vagyok. Ez ugyebár nem hit dolga."
"Egy ember halála tragédia, ezrek halála statisztika."

Nem elérhető Stephard

  • Felhasználó
  • Hozzászólások: 17
  • Karma: 0
Re: Fájlok letöltése
« Válasz #36 Dátum: 2011. február 15., 08:53:00 »
Hasznos volt ez a hozzászólás? 0
Kikommenteztem, a változók helyesek, az eregi függvény tökéletesen végzi dolgát, a fájl mégis hibásan landol a cél gépen...
Nem értem, mi lehet a probléma...
Az segíthet ha a letöltést egy másik fájlal végeztetem el?:)

Nem elérhető Keveqiah

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 2.346
  • Kisb
  • Karma: +81
    • Keveqiah
Re: Fájlok letöltése
« Válasz #35 Dátum: 2011. február 13., 20:30:40 »
Hasznos volt ez a hozzászólás? 0
szerintem az eregivel lesz a gond. használd inkább a preg_match()-t.
de ha ki kommentezed a header-eket a letölt függvényben és kiiratod a változókat, akkor megbizonyosodhatsz, hogy van e valami hibaüzenet és az adatok is megfelelőek e.
Én a típusra gondolok, hogy hibás, ugyanis akkor szokott a fájl sérülten lejönni.
"Gonosz vagyok. Ez ugyebár nem hit dolga."
"Egy ember halála tragédia, ezrek halála statisztika."

Nem elérhető Stephard

  • Felhasználó
  • Hozzászólások: 17
  • Karma: 0
Re: Fájlok letöltése
« Válasz #34 Dátum: 2011. február 13., 20:23:01 »
Hasznos volt ez a hozzászólás? 0
Az $url változó értékét egy $_GET lekérdezésből kapja
jelen esetben az értéke: ./felt/marioforever.exe (csak egy próbfájlnak  töltöttem fel)
a mimetipus függvény emghatározza a fáj típusát.
Íme:
Kód: PHP
  1. function mimetipus($fajl)
  2.   {
  3.     static $tipusok=array(
  4.         '\.jpg$|\.jpeg$'  => "image/jpeg",
  5.         '\.gif$'          => "image/gif",
  6.         '\.png$'          => "image/png",
  7.         '\.html$|\.html$' => "text/html",
  8.         '\.txt$|\.asc$'   => "text/plain",
  9.         '\.css$'          => "text/CSS",
  10.         '\.xml$|\.xsl$'   => "application/xml",
  11.         '\.pdf$'          => "application/pdf",
  12.         '\.zip$'          => "application/zip",
  13.         '\.php$|\.phps$'  => "application/php",
  14.         '\.ppt$|\.pptx$'  => "application/vnd.ms-powerpoint",
  15.         '\.doc$|\.docx$'  => "application/msword",
  16.         '\.xls$|\.xlsx$'  => "application/vnd.ms-excel",
  17.         '\.js$'           => "application/javascript",
  18.         '\.avi$'          => "video/x-msvideo",
  19.         '\.mpg$|\.mpeg$'  => "video/mpeg",
  20.         '\.wav$'          => "audio/x-wav",
  21.         '\.mp3$'          => "audio/mp3",
  22.         '\.exe$|\.msi$|\.bat$' => "application/octet-stream"
  23.     );
  24.         foreach ($tipusok as $tipus => $mime)
  25.           {
  26.             if(eregi($tipus, $fajl))
  27.               {
  28.                 return $mime;
  29.               }
  30.           }
  31.    
  32.      return 'text/plain';
  33.  
  34.   }
  35.  

Nem elérhető Keveqiah

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 2.346
  • Kisb
  • Karma: +81
    • Keveqiah
Re: Fájlok letöltése
« Válasz #33 Dátum: 2011. február 13., 16:07:59 »
Hasznos volt ez a hozzászólás? 0
1. Nem látjuk, mi van a $url változóban.
2. nem tudjuk mit csinál a mimetipus függvény.

Ha ezeket még közlöd, lesz miből kiindulni. :) Jelenleg a közölt kód nem tartalmaz hibát.
"Gonosz vagyok. Ez ugyebár nem hit dolga."
"Egy ember halála tragédia, ezrek halála statisztika."

Nem elérhető Stephard

  • Felhasználó
  • Hozzászólások: 17
  • Karma: 0
Re: Fájlok letöltése
« Válasz #32 Dátum: 2011. február 13., 15:52:02 »
Hasznos volt ez a hozzászólás? 0
Hali!
Van ez a fájlletöltő kód:

Kód: PHP
  1. function letolt($url)
  2.   {
  3.         header('Pragma: public');
  4.         header('Expires: 0');
  5.         header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  6.         header('Content-Type: ' . mimetipus($url));
  7.         header('Content-Disposition: attachment; filename=' . basename($url) . ';');
  8.         header('Content-Length: ' . filesize($url));
  9.  
  10.         $fa=fopen($url, "r");
  11.     while (!feof($fa))
  12.          {
  13.          $sor=fgetc($fa);
  14.           print $sor;
  15.         }
  16.         fclose($fa);
  17.  
  18.   }

Meghívoma  függvényt, minden rendben is meg, ...legalábbis úgy néz ki...
De a fájl ami lejön, mindig sérült.
Namost, ha readfile()-t használok, ugyanez történik.
Ha kitörlöm a 'Content-Length' sort, akkor a php fájlok már rendesen lejönnek, egyébként csake gy darabig jönnnek le...
Exe fájlnál egy dos ablakot feldob egy pillanatra, ami azt irja ki, h. "A program nem fér el a memóriában"
Zip fájlnál pedig " nincs kibontandó fájl".
Ez mitől lehet?
egy másik programban ez tökéletesen működött.
A változók át vannak irva, a mimetipus() függvényem is definiálva van.
Egyszerűen már ötletem sincs, h. mit lehetne ezzel kezdeni...

Az lehet probléma, hogy az egész egy ob_start(); és egy ob_end_flush között van???

Nem elérhető Suttogó

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 1.778
  • Karma: +26
Re: Fájlok letöltése
« Válasz #31 Dátum: 2010. október 29., 22:01:27 »
Hasznos volt ez a hozzászólás? 0
Ez egy igencsak problémás feladat, igazából csak workaroundolni lehet.

Javaslat:
- phpval szolgálod ki a fájlt, és a php által méred hogy mennyi lett kiszolgálva
- ezt kiírod egy fájlba, amit JS-el olvasol x időközönként
- a kiolvasott értéket felrajzolod egy csíkra JSel valahogy.

Rendes letöltés százalék kijelzőhöz flashre lesz szükséged.
Ajánlott programok: Ubuntu | LibreOffice | GIMP

Nem elérhető NoNametheone

  • Tag
  • *
  • Hozzászólások: 281
  • Karma: +4
Re: Fájlok letöltése
« Válasz #30 Dátum: 2010. október 29., 14:37:10 »
Hasznos volt ez a hozzászólás? 0
Szerintem azt szeretné hogy az ő oldalán megjelenjen egy csík ami a letöltés állását(pl.50%) mutatja a felhasználónak.

pontosan.
Mindenkinek van valami jó aláírása, nekem miért nincs?

Nem elérhető t.zoli

  • Törzstag
  • **
  • Hozzászólások: 762
  • Románia én így szeretlek
  • Karma: +3
    • Játékok
Re: Fájlok letöltése
« Válasz #29 Dátum: 2010. október 29., 14:19:26 »
Hasznos volt ez a hozzászólás? 0
Szerintem azt szeretné hogy az ő oldalán megjelenjen egy csík ami a letöltés állását(pl.50%) mutatja a felhasználónak.
t.zoli a nyakatekert megoldások mestere

Nem elérhető Suttogó

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 1.778
  • Karma: +26
Re: Fájlok letöltése
« Válasz #28 Dátum: 2010. október 28., 23:26:35 »
Hasznos volt ez a hozzászólás? 0
Megnézed a kis vonalkát...

De tényleg, mire gondolsz pontosan? Hol akarod meghatározni hogy hol tart és mire akarod használni?
Ajánlott programok: Ubuntu | LibreOffice | GIMP

Nem elérhető NoNametheone

  • Tag
  • *
  • Hozzászólások: 281
  • Karma: +4
Re: Fájlok letöltése
« Válasz #27 Dátum: 2010. október 24., 21:02:13 »
Hasznos volt ez a hozzászólás? 0
ezt nem tom hova kell írni ugyhoghy ide jön.. bár ide tuti nem jó.. :D nah az a lényeg hogy valahogy lehet tudni hogy egy letöltődő fájl mennyinél tart?
Mindenkinek van valami jó aláírása, nekem miért nincs?

Nem elérhető Rimelek

  • Adminisztrátor
  • Őstag
  • *****
  • Hozzászólások: 9.031
  • Karma: +288
    • rimelek.hu
Re: Fájlok letöltése
« Válasz #26 Dátum: 2010. augusztus 13., 09:08:00 »
Hasznos volt ez a hozzászólás? 0
Ha már fejmosás, akkor kollektíven mindenki kap.

http://phpstudio.hu/forum/index.php/topic,6.msg83783.html#msg83783

És akinek nem inge nem veszi magára

És innentől erre ne reagáljunk ebben a témában. Köszönöm!
Fájlok letöltése továbbra is a téma címe.
« Utoljára szerkesztve: 2010. augusztus 15., 01:58:49 írta Rimelek »
Egyszerűen létezem, és lézengek a Földön,
mint idióta szellem, kinek kastélya a börtön.

Nem elérhető materally

  • Tag
  • *
  • Hozzászólások: 216
  • <?php echo "PHP Fun"; ?>
  • Karma: +9
    • http://konyvjelzo.uw.hu
Re: Fájlok letöltése
« Válasz #25 Dátum: 2010. augusztus 13., 08:42:12 »
Hasznos volt ez a hozzászólás? 0
03. Dreamweaver Code részben: <a href="download.php?f=PDF/02.pdf">PDF 02</a>
 

Ciki, hogy Dreamweavert használsz :D

De most Rimelek professzortól kapsz egy kis "nagy" fejmosást :P Ezt megnézem :D
http://konyvjelzo.uw.hu - Tedd könnyebbé az életed!

Nem elérhető NagyMarcell

  • Felhasználó
  • Hozzászólások: 13
  • Karma: 0
Re: Fájlok letöltése
« Válasz #24 Dátum: 2010. augusztus 13., 08:21:31 »
Hasznos volt ez a hozzászólás? 0
Segíts magadon az isten is megsegít. Hát egy értelmes precíz ember rajtam kívül itt nincs. Na akkor leírom, hogy lehet megoldani a bajomat.
Ráadásul ez a script még egy download.txt fájlba elmenti az ip címeket, meg, hogy melyik fájlt mikor töltötték le. Hát persze, hogy nem Magyarországról érkezett a segítség.

01. PDF mappa benne a .htaccess

Kód: Apache configuration
  1. <Files ~ "\.pdf$">
  2.         Order Deny,Allow
  3.         Deny from All
  4.         Allow from localhost
  5. </Files>

02. PDF mappában a 02.pdf

03. Dreamweaver Code részben: <a href="download.php?f=PDF/02.pdf">PDF 02</a>

download.php

<?php

###############################################################
# File Download 1.31
###############################################################
# Visit http://www.zubrag.com/scripts/ for updates
###############################################################
# Sample call:
#    download.php?f=phptutorial.zip
#
# Sample call (browser will try to save with new file name):
#    download.php?f=phptutorial.zip&fc=php123tutorial.zip
###############################################################

// Allow direct file download (hotlinking)?
// Empty - allow hotlinking
// If set to nonempty value (Example: example.com) will only allow downloads when referrer contains this text
define('ALLOWED_REFERRER''domainnév.hu');

// Download folder, i.e. folder where you keep all files for download.
// MUST end with slash (i.e. "/" )
define('BASE_DIR','PDF');

// log downloads?  true/false
define('LOG_DOWNLOADS',true);

// log file name
define('LOG_FILE','downloads.log');

// Allowed extensions list in format 'extension' => 'mime type'
// If myme type is set to empty string then script will try to detect mime type 
// itself, which would only work if you have Mimetype or Fileinfo extensions
// installed on server.
$allowed_ext = array (

  
// archives
  
'zip' => 'application/zip',

  
// documents
  
'pdf' => 'application/pdf',
  
'doc' => 'application/msword',
  
'xls' => 'application/vnd.ms-excel',
  
'ppt' => 'application/vnd.ms-powerpoint',
  
  
// executables
  
'exe' => 'application/octet-stream',

  
// images
  
'gif' => 'image/gif',
  
'png' => 'image/png',
  
'jpg' => 'image/jpeg',
  
'jpeg' => 'image/jpeg',

  
// audio
  
'mp3' => 'audio/mpeg',
  
'wav' => 'audio/x-wav',

  
// video
  
'mpeg' => 'video/mpeg',
  
'mpg' => 'video/mpeg',
  
'mpe' => 'video/mpeg',
  
'mov' => 'video/quicktime',
  
'avi' => 'video/x-msvideo'
);



####################################################################
###  DO NOT CHANGE BELOW
####################################################################

// If hotlinking not allowed then make hackers think there are some server problems
if (ALLOWED_REFERRER !== ''
&& (!isset($_SERVER['HTTP_REFERER']) || strpos(strtoupper($_SERVER['HTTP_REFERER']),strtoupper(ALLOWED_REFERRER)) === false)
) {
  die(
"Internal server error. Please contact system administrator.");
}

// Make sure program execution doesn't time out
// Set maximum script execution time in seconds (0 means no limit)
set_time_limit(0);

if (!isset(
$_GET['f']) || empty($_GET['f'])) {
  die(
"Please specify file name for download.");
}

// Nullbyte hack fix
if (strpos($_GET['f'], "\0") !== FALSE) die('');

// Get real file name.
// Remove any path info to avoid hacking by adding relative path, etc.
$fname basename($_GET['f']);

// Check if the file exists
// Check in subfolders too
function find_file ($dirname$fname, &$file_path) {

  
$dir opendir($dirname);

  while (
$file readdir($dir)) {
    if (empty(
$file_path) && $file != '.' && $file != '..') {
      if (
is_dir($dirname.'/'.$file)) {
        
find_file($dirname.'/'.$file$fname$file_path);
      }
      else {
        if (
file_exists($dirname.'/'.$fname)) {
          
$file_path $dirname.'/'.$fname;
          return;
        }
      }
    }
  }

// find_file

// get full file path (including subfolders)
$file_path '';
find_file(BASE_DIR$fname$file_path);

if (!
is_file($file_path)) {
  die(
"File does not exist. Make sure you specified correct file name."); 
}

// file size in bytes
$fsize filesize($file_path); 

// file extension
$fext strtolower(substr(strrchr($fname,"."),1));

// check if allowed extension
if (!array_key_exists($fext$allowed_ext)) {
  die(
"Not allowed file type."); 
}

// get mime type
if ($allowed_ext[$fext] == '') {
  
$mtype '';
  
// mime type is not set, get from server settings
  
if (function_exists('mime_content_type')) {
    
$mtype mime_content_type($file_path);
  }
  else if (
function_exists('finfo_file')) {
    
$finfo finfo_open(FILEINFO_MIME); // return mime type
    
$mtype finfo_file($finfo$file_path);
    
finfo_close($finfo);  
  }
  if (
$mtype == '') {
    
$mtype "application/force-download";
  }
}
else {
  
// get mime type defined by admin
  
$mtype $allowed_ext[$fext];
}

// Browser will try to save file with this filename, regardless original filename.
// You can override it if needed.

if (!isset($_GET['fc']) || empty($_GET['fc'])) {
  
$asfname $fname;
}
else {
  
// remove some bad chars
  
$asfname str_replace(array('"',"'",'\\','/'), ''$_GET['fc']);
  if (
$asfname === ''$asfname 'NoName';
}

// set headers
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: $mtype");
header("Content-Disposition: attachment; filename=\"$asfname\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " $fsize);

// download
// @readfile($file_path);
$file = @fopen($file_path,"rb");
if (
$file) {
  while(!
feof($file)) {
    print(
fread($file1024*8));
    
flush();
    if (
connection_status()!=0) {
      @
fclose($file);
      die();
    }
  }
  @
fclose($file);
}

// log downloads
if (!LOG_DOWNLOADS) die();

$f = @fopen(LOG_FILE'a+');
if (
$f) {
  @
fputs($fdate("m.d.Y g:ia")."  ".$_SERVER['REMOTE_ADDR']."  ".$fname."\n");
  @
fclose($f);
}

?>

Ilyen egyszerűen kellene leírni valamit.
A védett oldalra, ha belépek akkor csak a linkre klikk után nyílik meg a 02.pdf.
Ha beírom, hogy domainnév.hu/PDF/02.pdf nem nyílik meg a pdf fájl.
Ha kimásolom a http://domainn
« Utoljára szerkesztve: 2010. augusztus 13., 08:35:39 írta NagyMarcell »