Jump to content
php.lv forumi

php un faila lejupielaade


Recommended Posts

lieta taada, ka ir forma, kuraa nospiezhot pogu, jaaparaadaas tam logam "save as..." un jaavar lejupielaadet failu, probleema ir tajaa, ka tas fails saakumaa neeksistee (nevar izveidot linku uz to) bet peec pogas nospieshanas peec tiem formas datiem skripts gjeneree failu (izveidot failu ir siikums, bet nevaru izdomaat kaa peec tam palaist to saglabaashanu).

ceru ka saprastaat domu :(

Link to post
Share on other sites

sākumā tev japalaizj headers, kas pasaka, ka tas ir attachments, pēc tam vienkārši jānolasa fails un jāizvada tajā pašā php failā.

 

tas headers bija kautkas uz

header('COntetn-Disposition: attachment; filenam="faila nosaukums";');

Link to post
Share on other sites

ideja apmeeram taada...

header('Content-Type: octet/stream'); //lai neber uz ekraana, bet liek seivot
header('Content-Disposition: attachment; filename="'.$faila_nosaukums.'"'); //lai php faila nosaukuma vietaa raada taadu kaadu gribi
header('Content-Length: '.$faila_izmeers); //lai browsers raada cik nokachaats :)
echo $faila_saturs; //pats saturs - izvadiishanu sagudro kaa eertaak...

Link to post
Share on other sites

oki, ja nu kaadam noder - izveidoju shaadu eertu funkciju

function GetFile($file){
header('Content-Type: octet/stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: '.filesize($file));
@readfile($file);
die();
}

Link to post
Share on other sites

hm, ideālā pasaulē mēs dzīvojam, ka varam tā vienkārši bez pārbaudēm par failu ņemt un grūzt ārā apmeklētājam.

 

Vēl tikai pietrūka pāris rindiņas un būtu vispār ideāla kombinācija:

 

<?php

GetFile($_REQUEST['filename']);

?>

 

Ieteiktu padomāt par to, vai gadījumā lietotājam nav iespēju palūgt kādu citu failu, nevis tevis iedomāto.

Link to post
Share on other sites

man testeejot sanaaca, ka

  $f=fopen($filename,'rb');
  while($s=fread($f,16384)){
   echo $s;
  }
  fclose($f);

straadaa aatraak nekaa

readfile($filename);

(kachaajaas aatraak)

Link to post
Share on other sites

un kā ir ar script taimoutiem?

piemēram, ja

 

header('Content-Type: octet/stream');
header('Content-Disposition: attachment; filename="'.$faila_nosaukums.'"'); 
header('Content-Length: '.$faila_izmeers); 
echo $kaut_kur_paslepta_faila_saturs;

 

un tas $kaut_kur_paslepta_faila_saturs ir kādus 500kb liels, vai sliktākajā gadījumā gribam paslēp un vēlāk ar šo metodi izvadīt 8mb smagu mp3 failu?

 

problēmu nebūs?

Link to post
Share on other sites
nu taisi set_timeout(0)

 

bet tad vēlams ciklā pārbaudīt connection_aborted()

13344[/snapback]

 

hmm. mēģināsim.

a bet kā principā taisa visas sistēmas, kur vajag ielogoties (ne caur htaccess) lai nokačātu kādus failus ?

Link to post
Share on other sites

caur ftp nokachhaa, jo visticamaak, ja tas nav tavs kompis, tad tur ir salikti visi iespeejamie limiti - timout, memory, quota utt. ja arii ir tavs kompis, tad tomeer aatraak ir uzlitk ftp serveri un peec tam caur logiem var paskatiities kas ir pieprasiits.

Link to post
Share on other sites
caur ftp nokachhaa, jo visticamaak, ja tas nav tavs kompis, tad tur ir salikti visi iespeejamie limiti - timout, memory, quota utt. ja arii ir tavs kompis, tad tomeer aatraak ir uzlitk ftp serveri un peec tam caur logiem var paskatiities kas ir pieprasiits.

13359[/snapback]

 

nēnu mani interesē realizācija sekojošai problēmai:

ir reģistrēti lietotāji, kuri logojas iekšā sistēmā caur php (par htaccess aizmirstam) un kuriem nepieciešams kačāt failus, bet taa lai nereģistrēti lietotāji to nevarētu darīt pat zinot tiešu faila URL. resp - URL nedrīkst būt reālais - tātad viss iet cauri header() - kur mēs ņemam kaut kur sistēmā paslēptu failu un barojam iekšā to visu lietotājam.

tādas sistēmas tak daudz ir, vai ne? :)

Link to post
Share on other sites

nem to pashu postu numur 9 un pirms headeriem paarbaudi vai ir lietotaajs ielogojies (kaa nu tu vinju ielogo ar kuukijiem/sesijaam vai veel kaa savaadaak taa jau ir tava probleema), ja lietotaajs ir ielogojies tad skriptu laizj taalaak, ja nee, tad padod headeri ar 403 kljudu un exit;

Link to post
Share on other sites
×
×
  • Create New...