/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Timeout på fopen() via HTTP
Fra : Michael Jack


Dato : 22-11-01 14:46

Hej

Jeg vil gerne pakke læsning af en ekstern fil ind så elegant som muligt.
Det skal være sådan at en evt. fejl skjules for brugeren, og at jeg i
stedet kan udskrive en passende fejlmeddelelse.

Scriptet (afvikles af PHP 4.04 modul til Apache) fanger p.t. de fleste
muligheder for fejl, pånær den fejl at man nok kan connecte til serveren
(www.blah.dk i eksemplet nedenfor) via HTTP, men aldrig modtager korrekt
svar tilbage. Har prøvet at bruge include i stedet, uden success (færre
muligheder for at fange fejl, IMHO).

Det jeg leder efter er en eller anden form for timeout på kaldet til
serveren.

Kast et blik på det følgende:

# Setup
$genericError = "Der skete en ukendt fejl.";
$openError = "Kunne ikke åbne filen";
$remoteFile = "http://www.blah.dk/test.html";

# Connect to $remoteFile, get the file, read the file to $line,
# and close the file again
$feed = @fopen ($remoteFile ,"r");
if (!$feed){
$error = $openError;
}
else{
while (!feof ($feed)){
$line .= fgets ($feed, 1024);
}
fclose($feed);
}



# Echo proper message
if ($line){

# Connection seems OK, so output feed
echo $line;
}
elseif ($error){

# Couldn't open file, so output specific error
echo $error;
}
else{

# Unknown error, so output generic error message
echo $genericError;
}

Nogen gode ideer?


Mvh. Michael

--
Michael Jack, Copenhagen, Denmark

 
 
Troels Arvin (22-11-2001)
Kommentar
Fra : Troels Arvin


Dato : 22-11-01 19:39

On Thu, 22 Nov 2001 14:46:01 +0100, "Michael Jack"
<michjack@spamfilter.dk> wrote:

> Scriptet (afvikles af PHP 4.04 modul til Apache) fanger p.t. de fleste
> muligheder for fejl, pånær den fejl at man nok kan connecte til
> serveren (www.blah.dk i eksemplet nedenfor) via HTTP, men aldrig
> modtager korrekt svar tilbage

PHP er blevet bedre og bedre til at læse eksterne HTTP-URLs i nyere
PHP-versioner. Derfor kan det være, at det vil fungere bedre med fx. PHP
4.0.6.

Bortset fra det: Hvis man skal arbejde med eksterne URLs på mere
avanceret vis, så er PHP's cURL udvidelse typisk vejen frem.

--
Greetings from Troels Arvin, Copenhagen, Denmark





Peter Brodersen (22-11-2001)
Kommentar
Fra : Peter Brodersen


Dato : 22-11-01 19:56

On Thu, 22 Nov 2001 19:39:11 +0100, "Troels Arvin" <troels@arvin.dk>
wrote:

>Bortset fra det: Hvis man skal arbejde med eksterne URLs på mere
>avanceret vis, så er PHP's cURL udvidelse typisk vejen frem.

Det kan jeg kun være enig i. Eneste er, at jeg savner lidt muligheden
for at få lidt mere information tilbage ifbm. SSL-requests angående
kryptering, certifikat (som ved et normalt verbose-opslag) m.m.

Jeg kender curl_getinfo(), men er ikke sikker på om der findes nogen
passende options til den for at få de relevante data ud, fremfor bare
at hælde det med ind i outputtet.

--
- Peter Brodersen

Michael Jack (22-11-2001)
Kommentar
Fra : Michael Jack


Dato : 22-11-01 20:14

Troels Arvin <troels@arvin.dk> wrote:

> PHP er blevet bedre og bedre til at læse eksterne HTTP-URLs i nyere
> PHP-versioner. Derfor kan det være, at det vil fungere bedre med fx. PHP
> 4.0.6.
>
> Bortset fra det: Hvis man skal arbejde med eksterne URLs på mere
> avanceret vis, så er PHP's cURL udvidelse typisk vejen frem.

Jeg har ikke kontrol over serveren, og der hverken udsigt til PHP 4.0.6
eller at PHP modulet bliver rekompileret med understøttelse af curl.

curl lyder (desværre) ret interessant.

Andre bud?

Mvh. Michael

--
Michael Jack, Copenhagen, Denmark

Peter Brodersen (22-11-2001)
Kommentar
Fra : Peter Brodersen


Dato : 22-11-01 20:52

On Thu, 22 Nov 2001 20:14:29 +0100, michjack@spamfilter.dk (Michael
Jack) wrote:

>Andre bud?

fsockopen(), hvor du manuelt forbinder til webserverens port 80 og
selv sender HTTP-requestet (og tilsvarende modtager både HTTP-headers
og dataen som svar).

Du kan angive en timeout-value til fsockopen() - altså for at
forbinde.

Timeout for selve datamodtagelsen kan sættes med socket_set_timeout()

--
- Peter Brodersen

Søg
Reklame
Statistik
Spørgsmål : 177522
Tips : 31968
Nyheder : 719565
Indlæg : 6408670
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste