woodiMedlem sedan feb. 20001 270 inlägg En liten fråga.. Jag har en databas innehållande länkar till en massa filer, för att hålla denna databasen aktuell så ska jag köra igång ett script som ligger och kör varje natt för att kolla upp om filerna finns..
Jag har gjort en variant med pfsockopen och fputs för att få tillbaka filhuvudet innehållande raden HTTP/1.0 200 Ok.. Men detta har visat sig ta en himla tid för varje fil och med tanke på det stora antalet filer jag har så behöver jag dra ner denna tiden avsevärt.
Så nu undrar jag allra ödmjukast om det finns någon här som kan ge mig ett tips på hur mitt script ska kolla filerna i databasen finns eller ej på ett snabbt (snabbare) sätt.. Finns det ett snabbare sätt att få tag på Headern till filen!?
Kör nu:
$fpread = pfsockopen($host, 80);
fputs($fpread,"GET $fil HTTP/1.0 \n\n");
$buffer = ltrim(Chop(fread($fpread, 40)));
Tack på förhand!
------------------
woodi
Svenska FF1
www.johan-skog.nu
RobbanMedlem sedan dec. 19992 555 inlägg Om du i stället för GET använder HEAD, så skickas endast HTTP-huvudet (där statusmeddelandet ingår), inte hela dokumentet (vilket sker vid GET). Borde snabba upp en del.
http://www.faqs.org/rfcs/rfc2616.html
------------------
Robban < robban@lipogram.com >
woodiMedlem sedan feb. 20001 270 inlägg Det är något som spökar rejält ändå med detta.. Följande fil vet jag att den finns, men jag får ändå 404 Not Found i Huvudet..
$host='f-1.sovintel.ru'; $fil='/00/nurburg/nurb_1.rar';
$fpread = pfsockopen($host, 80);
fputs($fpread,"HEAD $fil HTTP/1.0 \n\n");
$buffer = ltrim(Chop(fread($fpread,400)));
echo $buffer;
Kan man på något enklare sätt finna huvudet i filen genom att skicka in hela URLen (dvs. http://f-1.sovintel.ru/00/nurburg/nurb_1.rar) så att man slipper dela upp länken i en $host och en $fil!?
------------------
woodi
Svenska FF1
www.johan-skog.nu
Mycket märkligt, det verkar som om man får 404 på alla GET-anrop förutom roten.. Men det funkar i webbläsaren.. Skumt på min ära :) Kan det ha att göra med att dom kör virtuella servrar eller något sånt?
------------------
per@svanstrom.nu
www.svanstrom.nu
woodiMedlem sedan feb. 20001 270 inlägg sgtpepper
Jo det är väldans märkligt.. Det bör ju bli 202, men icke sa nicke..
Men som Murphys lag säger, kan något gå snett så gör de det!
Robban
Hilfe! :)
------------------
woodi
Svenska FF1
www.johan-skog.nu
Jag är tämligen säker på att det hela beror på att dom kör virtuella servrar. Du måste nog skicka med servernamnet i GET-anropet..
------------------
per@svanstrom.nu
www.svanstrom.nu
woodiMedlem sedan feb. 20001 270 inlägg Ska testa det.. Det är lite smått irriterande ska Du veta! :)
------------------
woodi
Svenska FF1
www.johan-skog.nu
emissionMedlem sedan dec. 19996 721 inlägg Den servern hanterar antagligen bara HTTP/1.1-anrop. Prova med:
fputs($fpread,"HEAD $fil HTTP/1.1 \nHost: $host\n\n");
woodiMedlem sedan feb. 20001 270 inlägg Ahh, det fungerar.. :)
sgtpepper, emission och robban
Tack för hjälpen!
------------------
woodi
Svenska FF1
www.johan-skog.nu
[Redigerat av woodi den 26 maj 2000]
Det var dom virtuella servrarna som ställde till det, testade med Host och det funkade.
------------------
per@svanstrom.nu
www.svanstrom.nu
woodiMedlem sedan feb. 20001 270 inlägg Hur är det nu, de icke virtuella hanterar Host även de!? *smått trött och förvirrad*
Får ibland följande fel Warning: Unable to find file identifier 1 in när jag kör scriptet (Typ var 6:e gång) .. Vad kan vara fel då, eller är det deras server som bråkar med mig!?
------------------
woodi
Svenska FF1
www.johan-skog.nu
[Redigerat av woodi den 26 maj 2000]
Hur menar du? Host sätts alltid av webbläsaren vid GET-anrop. När man kör virtuella servrar så använder servern Host-variabeln för att avgöra vilken virtuell servern som det handlar om.
Om man anropar en "riktig" server (dvs inte virtuell) så behöver man inte sätta Host antar jag, men det skadar ju inte :)
Felet som du får kan nog bero på att uppkopplingen misslyckads av någon anledning och då får du ingen filidentifierare tilldelad.
------------------
per@svanstrom.nu
www.svanstrom.nu
[Redigerat av sgtpepper den 26 maj 2000]
woodiMedlem sedan feb. 20001 270 inlägg Ok, tack sgtpepper!
------------------
woodi
Svenska FF1
www.johan-skog.nu
emissionMedlem sedan dec. 19996 721 inlägg ....så loopa över den en stund, tills du låter skriptet registrera den som otillgänglig.
woodiMedlem sedan feb. 20001 270 inlägg http://f-1.sovintel.ru/00/nurburg/nurb_1.r00
Varför fungerar det inte med denna filen som ligger på samma server som filen ovan då!? Arrgg..
------------------
woodi
Svenska FF1
www.johan-skog.nu
Det funkar för mig att köra ett HEAD-anrop på den filen.. Jag får ett fint 200.
Förresten, är det Formel-1 filmer?
------------------
per@svanstrom.nu
www.svanstrom.nu
woodiMedlem sedan feb. 20001 270 inlägg Ja det är F1 filmer! :)
Humm.. Jag får den att bli 200 när jag kör enbart den filen, men när jag kör min loop genom filerna så blir det fel..
Då får jag bara 200 på den 4:e posten..
Min kod:
$res=mysql_query("select filnamn from tabellen");
while($r=mysql_fetch_array($res)){
$tmp=substr($r[filnamn],7,strlen($r[filnamn]));
$delar=explode("/",$tmp);
$host=$delar[0];
for($x=1; $x<count($delar); $x++)
$fil.="/".$delar[$x];
$fpread = pfsockopen($host, 80);
fputs($fpread,"HEAD $fil HTTP/1.0 \nHost: $host\n\n");
$buffer = trim(Chop(fread($fpread,15)));
if(substr($buffer,9,3)=="200")
echo "<font color=\"#009900\">$fil finns<br>$buffer<br><br>";
else
echo "<font color=\"#990000\">$fil finns inte.<br>$buffer<br><br>";
$fil="";
fclose ($fpread);
}
I tabellen tabellen har jag jag bl.a. ett fält som heter filnamn som innehåller data som ser ut på följande sätt: http://f-1.sovintel.ru/00/nurburg/nurb_1.rar http://f-1.sovintel.ru/00/nurburg/nurb_1.r00
------------------
woodi
Svenska FF1
www.johan-skog.nu
[Redigerat av woodi den 27 maj 2000]
woodiMedlem sedan feb. 20001 270 inlägg Tänkte bara meddela att jag löst detta..
Felet var att uppkopplingen mot hosten aldrig avslutades riktigt.. När jag väl löst detta så visade det sig att fsockopen endast hanterar 6 olika filpekare på rad så jag fick göra en rejäl ändring i scriptet..
Nu är det bara att köra crontab på scriptet och låta det göra sitt jobb! :)
Tack för all hjälp gott folk!
------------------
woodi
Svenska FF1
www.johan-skog.nu
[Redigerat av woodi den 30 maj 2000]
MattiMedlem sedan dec. 19996 592 inlägg Felet var att uppkopplingen mot hosten aldrig avslutades riktigt..
Lite gammal tråd kanske men.. hur avslutar man uppkopplingen korrekt?
------------------
webmaster resources
MattiMedlem sedan dec. 19996 592 inlägg Glöm det.
<?
$addr="http://www.mk.st/index.php";
$fp = @fopen($addr,"r");
if (!$fp) {
echo "$addr is not a valid URL";
die;
}
else
echo "ok!";
?>
;)
------------------
webmaster resources