- From: <Grunzwanzling@gmx.li>
- Date: Fri, 26 Oct 2007 15:49:46 +0200
- To: www-validator@w3.org
Hi,
I am new to this mailing and have not subscribed yet as I just want to
ask a question and did not know where else to look for help.
Currently, I want to build a PHP plugin for Wordpress that simply
checks on loading of each page if it is XHTML 1.0 valid. Therefore, I
call a function from the sidebar that establishes a connection to the
validator's SOAP API via the Snoopy() class (somewhat a "virtual
browser" class). If the result via SOAP returns true, a button will be
shown, if not, there will be a text that the page is invalid.
The script works SOMETIMES, but mostly it times out. When you regard
the code below, you will find a $validation_time. Normally (without
the script implemented), it takes about 3 secs for the validator to
check the code on my site www.saphod.net. With the PHP-Script
activated, it takes AGES - and by calling the php script within my
page it takes even longer.
Here is what I believed so far:
As the function calls the validator ON LOADING, the validator will
eventually call itself, thus producing an endless slope.
For this reason, I implemented an if-condition that gets the
IP-address of the remote host - in case of the validator, this should
be 128.30.52.49, right?
Well, it made no difference. Still, the script takes AGES.
Plus:
reviewing my access.log, I realize that I get LOTS of GET-Requests
from the validator at the same time. This sounds to me as if more than
one instance tries to validate the code.
I do not know where to look next.
So, I printed the code of my script below.
I hope somebody can help me out.
Please keep in mind that I am not (yet) subscribed, so please drop me
a copy of your email.
Thanks so much in advance!
Best wishes,
Marco Luthe
www.saphod.net
******** Script code follows ******************
<?php
/*
Show XHTML validity
most of the code is from the batch validator plugin by
http://wordpress.designpraxis.at/plugins/batch-validator/
*/
function XHTML_validate_page($timeout_in_sec=NULL){
// when given, change timeout, otherwise do not change anything and
stay default
if (!empty($timeout_in_sec)) {
$client->read_timeout = $timeout_in_sec;
$client->_fp_timeout = $timeout_in_sec;
}
// Define URI variables
$w3validator = "http://validator.w3.org/check?uri=";
$uri = $w3validator . urlencode($_SERVER['HTTP_HOST'] .
$_SERVER['REQUEST_URI']);
$uri_soap = $uri . "&output=soap12";
// include the Snoopy class which simulates a web browser
require_once (ABSPATH . WPINC . '/class-snoopy.php');
// create a new Snoopy object (our "virtual browser")
$client = new Snoopy();
// start time of validation
$validation_start = microtime(true);
// Validate the URI with validator.w3.org using the SOAP API (see
http://validator.w3.org/docs/api.html for more info)
// But: if it is the validator itself, then do nothing! Otherwise,
there might be an endless slope and a timeout
if (@$client->fetch($uri_soap) && !($_SERVER['REMOTE_ADDR'] ==
"128.30.52.49" || $_SERVER['REMOTE_HOST'] = "validator.w3.org")) {
// Save the results
$data = $client->results;
// Just for debugging reasons
/*
@$client->fetchtext($uri_soap);
$data_text = $client->results;
*/
// Search for "m:validity" and "m:doctype" in the results (again,
see the validator API)
$data = explode("\n",$data);
// Can I optimize these two foreach slopes into one?
foreach ($data as $buffer) {
if (eregi("m:doctype",$buffer)) {
$doctype = trim(strip_tags($buffer));
break;
}
}
foreach ($data as $buffer) {
if (eregi("m:validity",$buffer)) {
$validity = trim(strip_tags($buffer));
break;
}
}
// again: for debugging reasons
/*
echo "Results:\n";
echo "Remote Adress: " . $_SERVER['REMOTE_ADDR'];
echo "Validity: " . $validity;
echo "Doctype: " . $doctype;
echo eregi("XHTML 1.0",$doctype);
echo "Text: \n" . print($data_text);
*/
if (!($client->timed_out)) {
$validation_end = microtime(true);
if($validity == "true" && eregi("XHTML 1.0",$doctype)) {
// Page is valid XHTML 1.0 transitional when $validity is true and
doctype is like "XHTML 1.0", so use the XHTML 1.0 icon as shown on
w3.org
echo "<a href=\"" . $uri . "&ss=1\" target=\"blank\"><img
src=\"http://www.w3.org/Icons/valid-xhtml10\" alt=\"Valid XHTML 1.0
Transitional\" height=\"31\" width=\"88\" /></a>";
} else {
// Page is not valid XHTML 1.0, print a message
$error_message="Page is not valid XHTML 1.0<br />Automatic
validation failed.<br />[<a href=\"" . $uri . "&ss=1\"
target=\"_blank\">check manually</a>]";
echo $error_message;
}
$validation_time = round($validation_end - $validation_start);
echo "<br />(" . $validation_time . " sec)";
} else {
$timeout_message="Is this page valid XHTML 1.0?<br />Automatic
validation timed out.<br />[<a href=\"" . $uri . "&ss=1\"
target=\"_blank\">check manually</a>]";
echo "<small>" . $timeout_message . "</small>";
}
} else {
echo "An error occured while<br />trying to automatically<br
/>validate this site.<br />[<a href=\"" . $uri . "&ss=1\"
target=\"_blank\">check manually</a>]";
}
}
?>
--
Visit 'Marco Luthe Online' @ http://www.saphod.net
--
GMX FreeMail: 1 GB Postfach, 5 E-Mail-Adressen, 10 Free SMS.
Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail
Received on Saturday, 27 October 2007 20:26:14 UTC