webForumDet fria alternativet

Problem med nedladdning mha fopen()

PHP

1 svar · 346 visningar · startad av egxezex

Medlem sedan jan. 200786 inlägg
Frågan#1

Hej, har lite problem med att ladda hem filer genom php.
Körde detta script lokalt på min egna server och allt fungerade fin fint.
Men nu när sidan ligger uppe på ett webhotell vill det inte fungera.

Jag har provat att ladda upp en vanlig .txt som ser ut så här:
____
|test| a.txt

att ladda ner filen via ftp fungerar, men om jag laddar hem filen via detta script och sedan öppnar den så innehåller den :
____
|<br | a.txt


<?
include "../setts/conn.php"; // Databasanslutningen
include "../setts/variabler.php";

 //echo " kat=$kat <br> filname=$filename <br> url=$url";

function readfile_chunked($filename, $retbytes=true) {
$chunksize = 1*(1024*1024); // how many bytes per chunk
$buffer = '';
$cnt = 0;

$handle = fopen($filename, 'rb');

if ($handle === false) {
return false;
}

while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;
ob_flush();
flush();
if ($retbytes) {
$cnt += strlen($buffer);
}
}

$status = fclose($handle);

if ($retbytes && $status) { 
return $cnt; // return num. bytes delivered like readfile() does
}

return $status; 

}

/* Send the requested file with header(). */
  header("Content-Description: File Transfer");
  header("Content-Type: application/octet-stream");
  header("Content-Disposition: attachment; filename=\"".basename($url)."\";");
  header("Content-Transfer-Encoding: binary");
 header("Content-Length: ".filesize($url));
 set_time_limit(0);
 $sebytes = readfile_chunked($url, true) or die("File not found.");

?>

Någon som ser nåt fel, eller ligger möjligtvis felet någon annanstanns?
Har provat att skriva ut sögvägarna och de verkar stämma med uppgifter från webhotellet(filerna ligger utanför webrooten). Har även kontrollerat att antalet bytes stämmer och de gör dem.

Medlem sedan jan. 200786 inlägg
#2

Lyckades nu få fram en fel-text:

<br />
<b>Warning</b>:  set_time_limit() [<a href='function.set-time-limit'>function.set-time-limit</a>]: Cannot set time limit in safe mode in <b>download.php</b> on line <b>8</b><br />

Jag provade att kommentera bort raden med set_time_limit(0); och det funkar. Anledningen var att php kördes i safe-mode på webhotellet och att denna funktion var förbjuden.

255 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)