---
title: "Kolla upp filer (HTTP/1.0)"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/15592-kolla-upp-filer-http-1-0"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "woodi"
published: "2000-05-26T14:34:00.000Z"
updated: "2001-05-07T19:30:00.000Z"
replies: 20
views: 651
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/15592-kolla-upp-filer-http-1-0"
---

# Kolla upp filer (HTTP/1.0)

_Sida 1 av 2._

## #1 — woodi, 2000-05-26T14:34Z

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!

Permalänk: https://www.webforum.nu/p/15592

## #2 — Robban, 2000-05-26T14:58Z

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>

Permalänk: https://www.webforum.nu/p/318478

## #3 — woodi, 2000-05-26T16:37Z

Det är något som spökar rejält ändå med detta..  Följande [fil](http://f-1.sovintel.ru/00/nurburg/nurb_1.rar) 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!?

Permalänk: https://www.webforum.nu/p/318479

## #4 — sgtpepper, 2000-05-26T21:05Z

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?

Permalänk: https://www.webforum.nu/p/318480

## #5 — woodi, 2000-05-26T21:20Z

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!  :)

Permalänk: https://www.webforum.nu/p/318481

## #6 — sgtpepper, 2000-05-26T21:31Z

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

Permalänk: https://www.webforum.nu/p/318482

## #7 — woodi, 2000-05-26T21:35Z

Ska testa det..  Det är lite smått irriterande ska Du veta!  :)

Permalänk: https://www.webforum.nu/p/318483

## #8 — emission, 2000-05-26T21:35Z

Den servern hanterar antagligen bara HTTP/1.1-anrop. Prova med: 

fputs($fpread,"HEAD $fil HTTP/1.1 \\nHost: $host\\n\\n");

Permalänk: https://www.webforum.nu/p/318484

## #9 — woodi, 2000-05-26T21:37Z

Ahh, det fungerar..  :)

sgtpepper, emission och robban
Tack för hjälpen!

Permalänk: https://www.webforum.nu/p/318485

## #10 — sgtpepper, 2000-05-26T21:39Z

Det var dom virtuella servrarna som ställde till det, testade med Host och det funkade.

Permalänk: https://www.webforum.nu/p/318486

## #11 — woodi, 2000-05-26T21:43Z

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!?

Permalänk: https://www.webforum.nu/p/318487

## #12 — sgtpepper, 2000-05-26T21:45Z

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.

Permalänk: https://www.webforum.nu/p/318488

## #13 — woodi, 2000-05-26T21:49Z

Ok, tack sgtpepper!

Permalänk: https://www.webforum.nu/p/318489

## #14 — emission, 2000-05-26T21:57Z

....så loopa över den en stund, tills du låter skriptet registrera den som otillgänglig.

Permalänk: https://www.webforum.nu/p/318490

## #15 — woodi, 2000-05-27T08:28Z

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

Permalänk: https://www.webforum.nu/p/318491

## #16 — sgtpepper, 2000-05-27T11:14Z

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?

Permalänk: https://www.webforum.nu/p/318492

## #17 — woodi, 2000-05-27T12:01Z

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>

Permalänk: https://www.webforum.nu/p/318493

## #18 — woodi, 2000-05-30T07:03Z

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!

Permalänk: https://www.webforum.nu/p/318494

## #19 — Matti, 2001-05-07T14:07Z

Felet var att uppkopplingen mot hosten aldrig avslutades riktigt.. 
Lite gammal tråd kanske men.. hur avslutar man uppkopplingen korrekt?

Permalänk: https://www.webforum.nu/p/318495

## #20 — Matti, 2001-05-07T18:14Z

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!"; 

?>
```

 ;)

Permalänk: https://www.webforum.nu/p/318496

---

Tråden på webben: https://www.webforum.nu/amne/php/15592-kolla-upp-filer-http-1-0  
Nästa sida: https://www.webforum.nu/amne/php/15592-kolla-upp-filer-http-1-0/page2.md
