From: martinlanghoff Date: Tue, 13 Nov 2007 00:34:47 +0000 (+0000) Subject: admin: Introducing the mailout-debugger X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=86a0b80d88e7feb8bfe2149271dca4bb5b99bab7;p=moodle.git admin: Introducing the mailout-debugger A stand-in for sendmail that will log all emails instead of sending them out. Use when debugging cron performance and output. References: MDL-12142 http://moodle.org/mod/forum/post.php?reply=349457 --- diff --git a/admin/mailout-debugger.php b/admin/mailout-debugger.php new file mode 100644 index 0000000000..3a4cbbb9f3 --- /dev/null +++ b/admin/mailout-debugger.php @@ -0,0 +1,76 @@ +#!/usr/bin/php +dirroot.'/admin/mailout-debugger.php'); + * Or from the commandline + * php -d sendmail_path='/path-to-moodle/admin/mailout-debugger.php' /path/to/cron.php + * + * - Create a file in admin called mailout-debugger.enable + * (this is a security check to prevent execution in prod environments) + * touch /path/to/moodle/admin/mailout-debugger.enable + * + * - Mark as executable: chmod ugo+rx mailout-debugger.php + * + * - Run your admin/cron.php + * + * - Read /tmp/moodle-mailout.log + * + * This script will create logfiles in /tmp/ or in $TMPDIR if set. + * + */ + +// Security check. +if (!file_exists(dirname(__FILE__).'/mailout-debugger.enable')) { + mdie("Disabled."); +} +$tmpdir='/tmp'; // default + +if (isset($_SERVER['REMOTE_ADDR'])) { + mdie("should not be called from web server!"); +} + +if (isset($_ENV['TMPDIR']) && is_dir($_ENV['TMPDIR'])) { + $tmpdir = $_ENV['TMPDIR']; +} + +$tmpfile = $tmpdir . '/moodle-mailout.log'; +$fh = fopen($tmpfile, 'a+', false) + or mdie("Error openning $tmpfile on append\n"); +fwrite($fh, "==== ".strftime("%a %b %e %H:%M:%S %Y", time())." ====\n"); +fwrite($fh, "==== Commandline: " . implode(' ',$argv) . "\n"); + +$stdin = fopen('php://stdin', 'r'); + +while ($line = fgets($stdin)) { + fwrite($fh, $line); +} +fwrite($fh, "\n"); +fclose($fh); +fclose($stdin); + +/** + * Print an error to STDOUT and exit with a non-zero code. For commandline scripts. + * Default errorcode is 1. + * + * Very useful for perl-like error-handling: + * + * do_somethting() or mdie("Something went wrong"); + * + * @param string $msg Error message + * @param integer $errorcode Error code to emit + * + */ +function mdie($msg='', $errorcode=1) { + trigger_error($msg); + exit($errorcode); +} + +?>