webForumDet fria alternativet

Felkontroll av sökvägar

PHP

6 svar · 258 visningar · startad av Niklasson

Medlem sedan nov. 2000857 inlägg
Frågan#1

Har ett downloadscript med felkontroll, men undrar lite om det är den smartaste lösningen.
Jag vill kunna kolla externa URL:s utan att påverka bandbredden för webbhotellet, eftersom jag har många downloads per dag. Naturligtvis så snabbt och säkert som möjligt.

Förut använde jag helt enkelt en fopen, men dels är det segt och inte alltid det fungerar. Tog hjälp av stevenet via ICQ och vi körde så här:

<?php
if (@fopen($link, "r"))
{
$filnamn = eregi_replace(".*/(.*)\.([a-zA-Z]{1,4})","\\1.\\2",$link);
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=".$filnamn);
readfile($link);
}
else
{
fel ("Länken är felaktig!");
}
?>

Detta tog tydligen mycket bandbredd, och vi ändrade till detta:

<?php

$fp = @implode ('', file ($link)); 
if (strlen($fp)>5)
{
$filnamn = eregi_replace(".*/(.*)\.([a-zA-Z]{1,4})","\\1.\\2",$link);
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=".$filnamn);
echo $fp;
}
else
{
fel ("Länken är felaktig!");
}
?>

Detta drog tydligen också en del bb, så nu kör jag:

<?php
$fp = @implode ('', file ($link)); 
if (strlen($fp)>5)
{
header ("Location: $link");
exit;
}
else
{
fel ("Länken är felaktig!");
}

Du som orkat läsa ända hit ner får gärna komma med en bättre lösning ;) :P

Medlem sedan juni 20001 251 inlägg
#2

Byt ut:
$fp = @implode ('', file ($link));
if (strlen($fp)>5)

mot

if (@fopen($link, "r"))

Förresten, hjälpte jag dig med nr 2? Den ser lite knasig ut, en header() efter echo.

Medlem sedan nov. 2000857 inlägg
#3

hmm, nej den raden skall inte vara med.. Hade kommenterat bort massa olika rader så jag har nog klippt lite fel där ;)
(redigerade bort det nu)

fopen tar mig tillbaka till början ;) gillade aldrig det - men det kanske är den bästa lösningen? Det äter ju också lite bandbredd...

Medlem sedan juni 20001 251 inlägg
#4

I den första kör du 2 anslutningar. I den tredje bara en, borde ju fungera bättre.

Medlem sedan nov. 2000857 inlägg
#5

Okej, men det borde finnas ett sätt att kontrollera om filen existerar utan att behöva läsa in hela filen.. :(

Medlem sedan aug. 20002 975 inlägg
#6

Niklasson skrev:

Okej, men det borde finnas ett sätt att kontrollera om filen existerar utan att behöva läsa in hela filen.. :(

http://www.php.net/manual/en/function.file-exists.php

Medlem sedan nov. 2000857 inlägg
#7

Externa URL:s var det... ;)

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