webForumDet fria alternativet

Problem med nedladdning mha fopen()

PHPur PHP

1 svar · 346 visningar · startad av egxezex

egxezexMedlem sedan jan. 200786 inlägg
#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.

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

133 ms totalt · 3 externa anrop · v20260731065814-full.b2af184d
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)