Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: fsockopen() ongelma

Lol-z [05.01.2010 02:46:11]

#

Yritän tehdä koodia, joka lukee tiedostosta rivi riviltä osoitteita ja ottaa niihin yhteyttä ja tulostaa osoitteesta tulevan vastauksen.

<?php
$sivuja = file("sivuja.txt");

for ($i = 0; $i < count($sivuja); $i++) {
  $hosti = "www.".$sivuja[$i];

  if (!$socket = fsockopen($hosti, 80, $errno, $errstr, 30)) {
    echo "$errstr ($errno)<br />\n";
  }
  else {
    $paketti = "GET / HTTP/1.1\r\n";
    $paketti .= "Host: $hosti\r\n";
    $paketti .= "Connection: Close\r\n\r\n";

    fwrite($socket, $paketti);

    while (!feof($socket)) {
      echo fgets($socket);
    }

    fclose($socket);
  }
}
?>

Kun tuon koodin ajaa nii se tuottaa error teksti, joka sanoo että osoitteeseen ei voida ottaa yhteyttä.
Mutta jos laitan osoitteen suoraan function eli

<?php
  ...
  if (!$socket = fsockopen("www.google.com", 80, $errno, $errstr, 30)) {
  ...
?>

niin silloin se tuottaa oikeanlaisen vastauksen.

Mikä mahtaisi olla ratkaisu tuohon ongelmaan?

Sami [05.01.2010 03:01:27]

#

file() jättää rivinvaihdot jokaisen luetun rivin loppuun (ellei sille sanota erikseen, että poista ne). Syy joko saattaa olla siinä tai sitten ei.

Macro [05.01.2010 09:08:11]

#

<?php
$sivuja = explode("\r\n", file_get_contents("sivuja.txt"));

for ($i = 0; $i < sizeof($sivuja); $i++) {
	$hosti = "www." . $sivuja[$i];

	if (!$socket = fsockopen($hosti, 80, $errno, $errstr, 30)) {
		echo "$errstr ($errno)<br>\n";
	} else {
		$paketti = "GET / HTTP/1.1\r\n";
		$paketti .= "Host: $hosti\r\n";
		$paketti .= "Connection: Close\r\n\r\n";

		fwrite($socket, $paketti);

		while (!feof($socket)) {
			echo fgets($socket);
		}

		fclose($socket);
	}
}
?>

Lol-z [05.01.2010 13:45:17]

#

Kiitos, nyt toimii.
Vika oli tosiaan siinä että file() jätti sen rivinvaihdon loppuun.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta