cvs: php-master-web /scripts mirror-test

From: Date: Sat, 07 Jun 2003 09:34:25 +0000
Subject: cvs: php-master-web /scripts mirror-test
Groups: php.mirrors 
Request: Send a blank email to php-mirrors+get-18562@lists.php.net to get a copy of this message
goba Sat Jun 7 05:34:25 2003 EDT Modified files: /php-master-web/scripts mirror-test Log: Do a check for a manual page on the mirror too, as we seem to have some mirrors having /manual aliases repeatedly [after Apache updates] Also store the last problem encountered with the mirror in the ocmt field of the mirrors table Index: php-master-web/scripts/mirror-test diff -u php-master-web/scripts/mirror-test:1.37 php-master-web/scripts/mirror-test:1.38 --- php-master-web/scripts/mirror-test:1.37 Sat Apr 19 16:44:11 2003 +++ php-master-web/scripts/mirror-test Sat Jun 7 05:34:25 2003 @@ -35,12 +35,16 @@ // Get all mirror sites, and count the index of them foreach ($hosts as $index => $host) { + // ======================================================================= + // Check the mirror-info.php page on this mirror site + // ======================================================================= + // Open port 80 on the mirror site $fp = @fsockopen($host['hostname'], 80, $errno, $errstr, 15); // If we were unable to open the port, continue with the next mirror if (!$fp) { - $hosts[$index]['problem'] = "unable to connect"; + $hosts[$index]['problem'] = "mirror check: unable to connect"; continue; } @@ -49,7 +53,7 @@ // If we were unable to write to socket, skip mirror site if ($rc === FALSE) { - $hosts[$index]['problem'] = "unable to send request"; + $hosts[$index]['problem'] = "mirror check: unable to send request"; continue; } @@ -64,7 +68,7 @@ // If we were unable to pass the HTTP header, skip mirror site if ($line === FALSE || $line == "") { - $hosts[$index]['problem'] = "didn't get past headers"; + $hosts[$index]['problem'] = "mirror check: didn't get past headers"; continue; } @@ -73,7 +77,7 @@ // If unable to read that row, skip mirror site if ($rv === FALSE) { - $hosts[$index]['problem'] = "didn't get data"; + $hosts[$index]['problem'] = "mirror check: didn't get data"; continue; } @@ -82,16 +86,63 @@ // Invalid data received, skip mirror site if (count($info) < 4) { - $hosts[$index]['problem'] = "invalid data received"; + $hosts[$index]['problem'] = "mirror check: invalid data received"; + continue; + } + + // Close socket + fclose($fp); + + // ======================================================================= + // Check that the /manual dir is working on this mirror + // ======================================================================= + + // Open port 80 on the mirror site + $fp = @fsockopen($host['hostname'], 80, $errno, $errstr, 15); + + // If we were unable to open the port, continue with the next mirror + if (!$fp) { + $hosts[$index]['problem'] = "manual check: unable to connect"; + continue; + } + + // GET mirror-info.php from the registered hostname + $rc = fputs($fp, "GET /manual/en/function.echo.php HTTP/1.0\r\nHost: $host[hostname]\r\n\r\n"); + + // If we were unable to write to socket, skip mirror site + if ($rc === FALSE) { + $hosts[$index]['problem'] = "manual check: unable to send request"; continue; } + // Set timeout to 5 seconds + socket_set_timeout($fp, 5, 0); + + // Get lines from the socket, while we get past the HTTP headers + // (HTTP headers and data have one empty line between them) + do { + $line = fgets($fp); + // Skip this mirror if a location header is returned for + // the manual page [Apache /manual alias in effect] + if (strpos($line, "Location:") === 0) { + continue 2; + } + } while ($line !== FALSE && $line != "" && $line != "\r\n" && $line != "\n"); + + // If we were unable to pass the HTTP header, skip mirror site + if ($line === FALSE || $line == "") { + $hosts[$index]['problem'] = "manual check: didn't get past headers"; + continue; + } + // Put pieces into the $hosts array $hosts[$index]['phpversion'] = $info[1]; // The last updated date is a number [db security] if (is_numeric($info[2])) { $hosts[$index]['mirrorupdated'] = $info[2]; + } else { + $hosts[$index]['problem'] = "mirror check: invalid last update time"; } // If new search information is available, override previous one @@ -108,7 +159,7 @@ if (preg_match("!^[a-zA-Z_]+$!", $info[5])) { $hosts[$index]['lang'] = $info[5]; } - + } // Go through all mirror sites checked @@ -132,8 +183,12 @@ else { $problems .= $host['hostname'] . " : cannot be updated in database\n"; } } - // Collect problems with hosts into one string + // Store the problem encountered in the database, and collect + // all the problems into one string in case it will be mailed else { + $query = "UPDATE mirrors SET ocmt = '" . addslashes($host['problem']) . "' " . + "WHERE hostname = '" . $host['hostname'] . "'"; + $result = mysql_query($query) or die("unable to update the database: $query: " . mysql_error()); $problems .= $host['hostname'] . " : " . $host['problem'] . "\n"; }

« previous php.mirrors (#18562) next »