Magazine Internet

WordPress : recevoir les erreurs 404 par email

Publié le 11 mars 2013 par Acs04

Voici un script PHP qui vous permettra de recevoir dans votre boîte email les erreurs 404 (pages non trouvées)  rencontrées sur votre site WordPress.

Sources  : wp-mix.com/WordPress-404-email-alerts/ et gist.github.com/DrewAPicture/5032207

Ajouter le code qui suit dans le fichier functions.php présent dans votre thème WordPress.

<?php
// Just require() this class via your theme's functions.php file.
/* Then instantiate this at the top of your 404.php file with:
if ( class_exists( 'Clean_404_Email' ) )
	new Clean_404_Email;
*/

class Clean_404_Email {

	var $time, $request, $blog, $email, $theme, $theme_data, $site, $referer, $string, $address, $remote, $agent, $message;

	function Clean_404_Email() {
		$this->headers();
		$this->setup_vars();
		$this->setup_email();
		$this->send_mail();
	}

	function headers() {
		echo header( "HTTP/1.1 404 Not Found" );
		echo header( "Status: 404 Not Found" );
	}

	function setup_vars() {
		$this->blog  = get_bloginfo( 'name' );
		$this->site  = home_url( '/' );
		$this->email = get_bloginfo( 'admin_email' );

		// theme info
		if ( ! empty( $_COOKIE["nkthemeswitch" . COOKIEHASH] ) ) {
		     $this->theme = $this->clean( $_COOKIE["nkthemeswitch" . COOKIEHASH] );
		} else {
		     $this->theme_data = wp_get_theme();
		     $this->theme = $this->clean( $this->theme_data->Name );
		}

		// referrer
		$this->referer = isset( $_SERVER['HTTP_REFERER'] ) ? $this->clean( $_SERVER['HTTP_REFERER'] ) : 'undefined';

		// request URI
		$this->request = isset( $_SERVER['REQUEST_URI'] ) & isset( $_SERVER['HTTP_HOST'] ) ? $this->clean( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ) : 'undefined';

		// query string
		$this->string = isset( $_SERVER['QUERY_STRING'] ) ? $this->clean( $_SERVER['QUERY_STRING'] ) : 'undefined';

		// IP address
		$this->address = isset( $_SERVER['REMOTE_ADDR'] ) ? $this->clean( $_SERVER['REMOTE_ADDR'] ) : 'undefined';

		// user agent
		$this->agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $this->clean( $_SERVER['HTTP_USER_AGENT'] ) : 'undefined';

		// identity
		$this->remote = isset( $_SERVER['REMOTE_IDENT'] ) ? $this->clean( $_SERVER['REMOTE_IDENT'] ) : 'undefined';

		// log time
		$this->time = $this->clean( date( "F jS Y, h:ia", time() ) );
	}

	function clean( $string ) {
	     $string = rtrim( $string );
	     $string = ltrim( $string );
	     $string = htmlentities( $string, ENT_QUOTES );
	     $string = str_replace( "\n", "<br />", $string );

	     if ( get_magic_quotes_gpc() ) {
	          $string = stripslashes( $string );
	     }
	     return $string;
	}

	function setup_email() {
		$this->message = '
		<html><body>
		<table width="70%" border="1" style="border-color: #777;" cellpadding="10">
			<colgroup width="25%" style="text-align:right;" />
			<colgroup id="colgroup" width="1*" valign="middle" span="2" align="center" />
			<thead>
				<tr>
					<th scope="col">Element</th>
					<th scope="col">Data</th>
				</tr>
			</thead>
			<tfoot>
				<tr>
					<td>User Agent</td>
					<td>' . $this->agent . '</td>
				</tr>
			</tfoot>
			<tbody>
				<tr>
					<td>Date/Time</td>
					<td>' . $this->time . '</td>
				</tr>
				<tr>
					<td>404 URL</td>
					<td>' . $this->request . '</td>
				</tr>
				<tr>
					<td>Site</td>
					<td>' . $this->site . '</td>
				</tr>
				<tr>
					<td>Theme</td>
					<td>' . $this->theme . '</td>
				</tr>
				<tr>
					<td>Referer</td>
					<td>' . $this->referer . '</td>
				</tr>
				<tr>
					<td>Query String</td>
					<td>' . $this->string . '</td>
				</tr>
				<tr>
					<td>Remote Address</td>
					<td>' . $this->address . '</td>
				</tr>
				<tr>
					<td>Remote Identity</td>
					<td>' . $this->remote . '</td>
				</tr>
			</tbody>
		</table>
		</body></html>';
	}

	function email_headers() {
		return sprintf( 'From: %s' . "\r\n" . 'MIME-Version: 1.0' . "\r\n" . 'Content-Type: text/html; charset=ISO-8859-1' . "\r\n", $this->email );
	}

	function send_mail() {
		mail( $this->email, sprintf( '404 Alert: %1$s [ %2$s ]', $this->blog, $this->theme ), $this->message, sprintf( 'From: %s', $this->email_headers() ) );
	}

} // Clean_404_Email

Ensuite, ajouter simplement au début du fichier 404.php l’instruction :

if ( class_exists( 'Clean_404_Email' ) )new Clean_404_Email;

Retour à La Une de Logo Paperblog

A propos de l’auteur


Acs04 542 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Magazine