Avatar billede Strawberry Seniormester
Oprettet i går kl. 13:08 Der er 6 kommentarer og
1 løsning

Bruge PHP til at hente hjemmeside med fsockopen

Jeg vil gerne udskifte host med en variabel, men får fejl.

Dette virker:

$fp = fsockopen("ssl://www.dr.dk", 443, $errno, $errstr, 30);


Men dette virker ikke:

$host = "www.dr.dk";
$fp = fsockopen("ssl://".$host, 443, $errno, $errstr, 30);


Hvordan kan jeg få det til at virke?
Avatar billede arne_v Ekspert
Skrevet i går kl. 13:30 #1
Der burde ikke være nogen forskel på de to.

Er koden copy pastet? Hvilken fejl får du med den kode som ikke virker?
Avatar billede arne_v Ekspert
Skrevet i går kl. 13:30 #2
Og noget helt andet: hvorfor bruger du fsockopen og ikke bare file_get_contents eller curl?
Avatar billede Strawberry Seniormester
Skrevet i går kl. 13:46 #3
Jeg får fejlen:

HTTP/1.1 301 Moved Permanently

I stedet for at få:

HTTP/1.1 200 OK

Og jeg har ikke ændret andet i koden end de nævnte linjer.
Avatar billede Strawberry Seniormester
Skrevet i går kl. 14:02 #4
Ja det er noget kode jeg har copy/pastet.

Jeg bruger fsockopen fordi der kan jeg bruge følgende til, at kontrollere om siden/filen stadigvæk eksisterer:

$out = "HEAD /".$path." HTTP/1.1\r\n";


Jeg kan også vælge at bruge:
$out = "GET /".$path." HTTP/1.1\r\n";


Jeg har forsøgt med at bruge følgende, men det er ikke altid den virker:
$headers = @get_headers($url);
Avatar billede Strawberry Seniormester
Skrevet i går kl. 15:12 #5
Jeg har fået det til at virke.

Det virkede åbenbart ikke fordi jeg havde lavet denne if-sætning:

if ($type = "http") {
$fp = fsockopen("".$host, 80, $errno, $errstr, 30);
}
else if ($type = "https") {
$fp = fsockopen("ssl://".$host, 443, $errno, $errstr, 30);
}


Nu har jeg ændret det til følgende kode, og så virker det:

if ($type == "https") {
$ssl = "ssl://".$host;
$port = 443;
}
else if ($type == "http") {
$ssl = $host;
$port = 80;
}

$fp = fsockopen($ssl, $port, $errno, $errstr, 30);
Avatar billede arne_v Ekspert
Skrevet i går kl. 15:22 #6
Ah. Klassisk = vs ==.

Der er dem som anbefaler fremfor:

if ($type == "https") {

at bruge:

if ("https" == $type) {

fordi så kan man ikke komme til at bruge =.
Avatar billede arne_v Ekspert
Skrevet i går kl. 15:23 #7
Curl giver fin kontrol over headere og fejl status.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester