met behulp van de onderstaande code probeer ik een door php gegenereerde header te versturen naar een php download file (uitleg komt zo) Helaas krijg ik van de php-downloader file een 406 fout terug. wat moet ik doen om dit op te lossen?

if ($http_auth!="") {
write_file(CONFIG_DIR."request.txt", $request);
echo "<form NAME='theform' METHOD='POST' ACTION='downloader.php'>";
echo "<input name='data' type='hidden' value='".$request."'>";
echo "</form>";
echo "<SCRIPT LANGUAGE='javascript'>document.theform.submit();</SCRIPT>";
exit;
}


dit is de downloader file (de eerder genoemde header file)
<?php
//echo "<html><body>".$_POST['data']."</body></html>";
header($_POST['data']);
?>

ik heb gebruik gemaakt van die bovenstaande java-truck omdat mijn script dusdanig groot is, dat hij al zeer veel data heeft ge-output voordat ik de header regel kan terug geven. vandaar die javascript truck, maar hij werkt wel.
In de $header variabele zitten de volgende gegevens (waarvan enkele blanco gemaakt maar dat staat met <removed> vermeld
GET <removed> HTTP/1.1
Host: <removed>
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Alexa Toolbar)
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-en,en;q=0.5
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Pragma: no-cache
Cache-Control: no-chache
Authorization: Basic <removed>
Connection: Close
erg leuk en aardig dat linkje, maar die had ik zelf al lang gevonden op google. helaas maakt dat linkje me niet duidelijk hoe ik het probleem kan oplossen.
Ik zie nergens fouten zitten... en die link is goed hoor daar lees je wat een 406 precies is en kun je kijken waar de fout in zit ;) maar ik zie geen fouten misschien ligt het aan je host...
ik heb het nu iets anders aangepakt:
if ($http_auth!="") {
$TempFileName=mt_rand(0,65535).mt_rand(0,65535).".txt";
write_file("files/".$TempFileName, $request);
echo "<form NAME='theform' METHOD='POST' ACTION='downloader.php'>";
echo "<input name='FileName' type='hidden' value='".$TempFileName."'>";
echo "</form>";
echo "<SCRIPT LANGUAGE='javascript'>document.theform.submit();</SCRIPT>";
exit;
}

mijn downloader file
<?php
//echo "<html><body>".$_POST['FileName']."</body></html>";
$handle=fopen("files/".$_POST['FileName'], 'r');
while (!feof($handle)) {
	$data = fgets($handle);
	header($data);
}
?>

maar dit levert mij weer een internal server error op. kan iemand mij helpen hoe ik dit nu moet aanpakken??
iemand nog een oplossing op het bovenstaande probleem??
met behulp van een irc hulp ben ik er reeds achter dat de linebreaks (\r\n) het grootste probleem waren. nu heb ik alleen nog het probleem dat de file die ik moet hebben nog niet wil downloaden. iemand een idee hoe ik dit moet doen??
je moet dit nog even een content type header bovenaan je script zetten:

Zie ook:
http://nl3.php.net/header
http://en.wikipedia.org/wiki/MIME

//echo "<html><body>".$_POST['FileName']."</body></html>";
Een bestand dat je download is geen html

<?php
header("Content-Type: application/octet-stream");
// hier vertel je de browser wat hij met de content moet doen: downloaden.

$handle=fopen("files/".$_POST['FileName'], 'r');
while (!feof($handle)) {
$data = fgets($handle);
header($data);
}
?>

Reageren