cvs: php-master-web /scripts mirror-test
| From: | Gabor Hojtsy | 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";
}