Jump to content
php.lv forumi

php un faila lejupielaade


Recommended Posts

Posted

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 :(

Posted

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";');

Posted

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...

Posted

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();
}

Posted

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.

Posted

man testeejot sanaaca, ka

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

straadaa aatraak nekaa

readfile($filename);

(kachaajaas aatraak)

Posted

NB: /me izmanto fgets($fh,NN) konstrukciju, jo kaučkad fread ne īpaši apstājās pie eof, resp. ja bilde bija 4000 Kb, bet es lasīju pa 1024, atgrieza visus 4096 simbolus un bilde bija grauta.

Posted

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?

Posted
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 ?

Posted
hmm. mēģināsim.

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

13345[/snapback]

 

Venom... ?? :)

Posted

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.

Posted
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? :)

Posted

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;

×
×
  • Create New...