svnno****@sourc*****
svnno****@sourc*****
2009年 4月 17日 (金) 11:24:18 JST
Revision: 60 http://svn.sourceforge.jp/view?root=frameworkspider&view=rev&rev=60 Author: m_nakashima Date: 2009-04-17 11:24:17 +0900 (Fri, 17 Apr 2009) Log Message: ----------- Modified Paths: -------------- current/DATA/define.inc.php current/DATA/lib/spider/Controller.class.php current/DATA/lib/spider/HttpRequest.class.php current/DATA/lib/spider/ModuleBase.class.php -------------- next part -------------- Modified: current/DATA/define.inc.php =================================================================== --- current/DATA/define.inc.php 2009-04-16 13:12:19 UTC (rev 59) +++ current/DATA/define.inc.php 2009-04-17 02:24:17 UTC (rev 60) @@ -94,8 +94,8 @@ // ログ出力レベルの定義 define('SPIDER_LOG_LEVEL_FATAL', 0); define('SPIDER_LOG_LEVEL_ERROR', 1); -define('SPIDER_LOG_LEVEL_INFO', 2); -define('SPIDER_LOG_LEVEL_REPORT', 3); +define('SPIDER_LOG_LEVEL_WARNING', 2); +define('SPIDER_LOG_LEVEL_INFO', 3); define('SPIDER_LOG_LEVEL_DEBUG', 4); // システムメール定義ファイル名 Modified: current/DATA/lib/spider/Controller.class.php =================================================================== --- current/DATA/lib/spider/Controller.class.php 2009-04-16 13:12:19 UTC (rev 59) +++ current/DATA/lib/spider/Controller.class.php 2009-04-17 02:24:17 UTC (rev 60) @@ -98,8 +98,9 @@ if( is_null( $module_obj ) ) { // モジュールがスタックにない場合は新規作成して実行 $module_obj = new $module_real_name; - $module_obj->controller_object = & $this; - $module_obj->http_output_object = & $this->http_output_object; + $module_obj->controller_object = & $this; + $module_obj->http_output_object = & $this->http_output_object; + $module_obj->http_request_object = & $this->request_object; // 要求モジュールが存在して未実行の場合は先に強制実行する if( is_array( $module_obj->require_module_array ) ) { foreach( $module_obj->require_module_array as $require_module_name ) { Modified: current/DATA/lib/spider/HttpRequest.class.php =================================================================== --- current/DATA/lib/spider/HttpRequest.class.php 2009-04-16 13:12:19 UTC (rev 59) +++ current/DATA/lib/spider/HttpRequest.class.php 2009-04-17 02:24:17 UTC (rev 60) @@ -47,6 +47,7 @@ $reg_key = $key; $callstack = debug_backtrace(); $caller_file = $callstack[0]['file']; + unset($callstack); if( strpos($caller_file,DIR_PATH_LIB) !== false && strpos($caller_file,DIR_PATH_LIB.DIRECTORY_SEPARATOR.'spider') === false ) { // 呼び出し元がlib内のファイルの場合 @@ -208,8 +209,202 @@ } } } + /** + * グローバルセッションキー + */ function _getGlobalSessionKey( $key ) { return 'spider_GLOBAL.'.$key; } + /** + * ログを出力します + * @param $message ログメッセージ + */ + function writeLog( $message, $log_level=SPIDER_LOG_LEVEL_INFO ) { + $system_log_level = SPIDER_LOG_LEVEL_INFO; + if( defined('SYSTEM_LOG_LEVEL') && is_numeric(SYSTEM_LOG_LEVEL) + && preg_match('/^[0-4]$/',SYSTEM_LOG_LEVEL) > 0 ) { + $system_log_level = SYSTEM_LOG_LEVEL; + } + // システム設定のログレベルより大きいレベルのログは出力しない + if( $log_level > $system_log_level ) { + return true; + } + + // ログファイル名の決定 + $log_file_path = DIR_PATH_LOG.DIRECTORY_SEPARATOR.'spider'; + if( !file_exists( $log_file_path ) ) { + if( @mkdir( $log_file_path, 0777 ) ) { + @chmod( $log_file_path, 0777 ); + } + } + $log_file_path = $log_file_path.DIRECTORY_SEPARATOR.date('Y'); + if( !file_exists( $log_file_path ) ) { + if( @mkdir( $log_file_path, 0777 ) ) { + @chmod( $log_file_path, 0777 ); + } + } + $log_file_path = $log_file_path.DIRECTORY_SEPARATOR.date('m'); + if( !file_exists( $log_file_path ) ) { + if( @mkdir( $log_file_path, 0777 ) ) { + @chmod( $log_file_path, 0777 ); + } + } + $log_file_path = $log_file_path.DIRECTORY_SEPARATOR.'system_'.date('d').'.log'; + if( !file_exists( $log_file_path ) ) { + if(@touch( $log_file_path, 0666 )){ + @chmod( $log_file_path, 0666 ); + } + } + $message = str_replace( "\r\n", "\n", $message ); + $message = str_replace( "\r", "\n", $message ); + $message = str_replace( "\n", " ", $message ); + + $callstack = debug_backtrace(); + $caller_file = $callstack[0]['file']; + $caller_line = $callstack[0]['line']; + unset($callstack); + + error_log( + "[". date('Y-m-d H:i:s')."]" + . "\t".$message + . "\t"."[".$caller_file."] " + . "\t"."[".$caller_line."] " + . "\t" . $_SERVER['REMOTE_ADDR'] + . "\t" . $_SERVER['REMOTE_HOST'] + . "\t" . $_SERVER['HTTP_USER_AGENT'] + . "\n" + , 3, $log_file_path ); + return true; + } + /** + * Fatalレベルのログを出力します。 + * @param $message ログメッセージ + */ + function fatal($message){ + $this->writeLog( $message, SPIDER_LOG_LEVEL_FATAL ); + } + /** + * Errorレベルのログを出力します。 + * @param $message ログメッセージ + */ + function error($message){ + $this->writeLog( $message, SPIDER_LOG_LEVEL_ERROR ); + } + /** + * Warningレベルのログを出力します。 + * @param $message ログメッセージ + */ + function warn($message){ + $this->writeLog( $message, SPIDER_LOG_LEVEL_WARNING ); + } + /** + * Infoレベルのログを出力します。 + * @param $message ログメッセージ + */ + function info($message){ + $this->writeLog( $message, SPIDER_LOG_LEVEL_INFO ); + } + /** + * Debugレベルのログを出力します。 + * @param $message ログメッセージ + */ + function debug($message){ + $this->writeLog( $message, SPIDER_LOG_LEVEL_DEBUG ); + } + /** + * システム設定された値でメール送信オブジェクトを作成して取得します。 + */ + function getSystemMailer() { + if( defined('SYSTEM_MAIL_SEND_METHOD') ) { + require_once( dirname(dirname(__FILE__)) + . DIRECTORY_SEPARATOR . "util" + . DIRECTORY_SEPARATOR . "Mail.class.php" ); + // 送信オプション + $params = array(); + // 送信方法の決定 + $class_name = 'PHP'; + if( preg_match('/^[sS][mM][tT][pP]$/',SYSTEM_MAIL_SEND_METHOD) > 0 ) { + $class_name = 'SMTP'; + } else if( preg_match('/^[sS][eE][nN][dD][mM][aA][iI][lL]$/',SYSTEM_MAIL_SEND_METHOD) > 0 ) { + $class_name = 'SendMail'; + } + $params = $GLOBALS['SYSTEM_MAIL_SEND_METHOD_OPTIONS']; + // 送信オブジェクト作成 + $send_object = util_Mail::get_instance( $class_name, $params ); + if( $send_object === false ) { + return false; + } else { + return $send_object; + } + } else { + return false; + } + } + /** + * メールを送信します。 + * @param $subject メール件名 + * @param $message メール本文 + * @param $mailto 宛て先メールアドレス + */ + function mailTo($subject,$message,$mailto=null,$from=null,$reply=null,$return=null) { + $mailto_addresses = array(); + if( isset($GLOBALS['SYSTEM_MAIL_REPORT_TO_ADDRESSES']) + && is_array($GLOBALS['SYSTEM_MAIL_REPORT_TO_ADDRESSES']) ) { + $mailto_addresses = $GLOBALS['SYSTEM_MAIL_REPORT_TO_ADDRESSES']; + } + $mailto = trim($mailto); + if(!is_null($mailto) && strlen($mailto) > 0 ) { + array_push($mailto_addresses, $mailto); + } + if(count($mailto_addresses)==0){ + $this->warn('HttpRequest->MailTo: derivery mail address is required!: '.$subject.':'.$message); + return false; + } + if(defined('SYSTEM_MAIL_SUBJECT_PREFIX')){ + $subject = SYSTEM_MAIL_SUBJECT_PREFIX.$subject; + } + if( is_null($from) || strlen($from) == 0 ) { + if(defined('SYSTEM_MAIL_FROM_ADDRESS') && strlen(SYSTEM_MAIL_FROM_ADDRESS)>0 ) { + if(defined('SYSTEM_MAIL_FROM_NAME') && strlen(SYSTEM_MAIL_FROM_NAME)>0 ) { + $from = SYSTEM_MAIL_FROM_NAME.' <'.SYSTEM_MAIL_FROM_ADDRESS.'>'; + } else { + $from = SYSTEM_MAIL_FROM_ADDRESS; + } + } else { + $this->warn('HttpRequest->MailTo: from address is required!: '.$subject.':'.$message); + return false; + } + } + if( is_null($reply) || strlen($reply) == 0 ) { + if(defined('SYSTEM_MAIL_REPLY_ADDRESS') && strlen(SYSTEM_MAIL_REPLY_ADDRESS)>0 ) { + $reply = SYSTEM_MAIL_REPLY_ADDRESS; + } else { + $reply = $from; + } + } + if( is_null($return) || strlen($return) == 0 ) { + if(defined('SYSTEM_MAIL_RETURN_ADDRESS') && strlen(SYSTEM_MAIL_RETURN_ADDRESS)>0 ) { + $return = SYSTEM_MAIL_RETURN_ADDRESS; + } else { + $return = $from; + } + } + + if( $send_object = $this->getSystemMailer() ) { + foreach( $mailto_addresses as $address ) { + $result = $send_object->send( $address, $subject, $message, $from, $reply, $return ); + if( $result ) { + $this->info( 'HttpRequest->MailTo: '.$address.':'.$subject.':'.$message ); + return true; + } else { + $this->warn('HttpRequest->MailTo: delivey error: '.$subject.':'.$message); + return false; + } + } + } else { + $this->warning( 'HttpRequest->MailTo: can\'t create mailer instance!: '.$mailto.':'.$subject.':'.$message ); + return false; + } + } } ?> Modified: current/DATA/lib/spider/ModuleBase.class.php =================================================================== --- current/DATA/lib/spider/ModuleBase.class.php 2009-04-16 13:12:19 UTC (rev 59) +++ current/DATA/lib/spider/ModuleBase.class.php 2009-04-17 02:24:17 UTC (rev 60) @@ -10,9 +10,15 @@ * @since PHP 4.3 */ class spider_ModuleBase { + /** Controllerクラスオブジェクトへの参照 */ var $controller_object; + /** HttpOutputクラスオブジェクトへの参照 */ var $http_output_object; + /** HttpRequestクラスオブジェクトへの参照 */ + var $http_request_object; + /** 要求モジュール配列 */ var $require_module_array = array(); + /** 後実行モジュール配列 */ var $post_module_array = array(); /** * コンストラクタ @@ -47,150 +53,87 @@ } /** * メールレポートを送信します。 + * @param $subject + * @param $message + * @param $maito + * @deprecated v1.0.00 - 2009/04/17 正式リリース前の仕様です。HttpRequestクラスオブジェクトのmailToメソッドを利用してください。 */ function report_mailto($subject,$message,$mailto=null) { - $mailto_addresses = array(); - if( is_null( $mailto ) || strlen(trim($mailto)) == 0 ) { - if( !is_array( $GLOBALS['SYSTEM_MAIL_REPORT_TO_ADDRESSES'] ) ) { - $this->error( "mailto:no defined:" . $subject . ":" . $message ); - return false; - } else { - $mailto_addresses = $GLOBALS['SYSTEM_MAIL_REPORT_TO_ADDRESSES']; - } - } else { - array_push($mailto_addresses, $mailto); + if(is_object($this->http_request_object)){ + return $this->http_request_object->mailTo($subject,$message,$mailto); } - if( $send_object = $this->get_system_mailer() ) { - // 送信 - foreach( $mailto_addresses as $address ) { - $result = $send_object->send( $address, SYSTEM_MAIL_SUBJECT_PREFIX.$subject, $message, - SYSTEM_MAIL_FROM_NAME.' <'.SYSTEM_MAIL_FROM_ADDRESS.'>', SYSTEM_MAIL_REPLY_ADDRESS, SYSTEM_MAIL_RETURN_ADDRESS ); - if( $result ) { - $this->report( "mailto:" . $address . ":" . $subject . ":" . $message ); - } - } - return true; - } - $this->error( "mailto:" . $mailto . ":" . $subject . ":" . $message ); return false; } /** * システム設定された値でメール送信オブジェクトを作成して取得します。 + * @deprecated v1.0.00 - 2009/04/17 正式リリース前の仕様です。HttpRequestクラスオブジェクトのmailToメソッドを利用してください。 */ function get_system_mailer() { - if( defined('SYSTEM_MAIL_SEND_METHOD') ) { - require_once( dirname(dirname(__FILE__)) - . DIRECTORY_SEPARATOR . "util" - . DIRECTORY_SEPARATOR . "Mail.class.php" ); - // 送信オプション - $params = array(); - // 送信方法の決定 - $class_name = 'PHP'; - if( preg_match('/^[sS][mM][tT][pP]$/',SYSTEM_MAIL_SEND_METHOD) > 0 ) { - $class_name = 'SMTP'; - } else if( preg_match('/^[sS][eE][nN][dD][mM][aA][iI][lL]$/',SYSTEM_MAIL_SEND_METHOD) > 0 ) { - $class_name = 'SendMail'; - } - $params = $GLOBALS['SYSTEM_MAIL_SEND_METHOD_OPTIONS']; - // 送信オブジェクト作成 - $send_object = util_Mail::get_instance( $class_name, $params ); - if( $send_object === false ) { - return false; - } else { - return $send_object; - } - } else { - return false; + if(is_object($this->http_request_object)){ + return $this->http_request_object->getSystemMailer(); } + return false; } /** * ログを出力します。 * @param $message ログメッセージ * @param $log_level 出力するログのレベル + * @deprecated v1.0.00 - 2009/04/17 正式リリース前の仕様です。HttpRequestクラスオブジェクトのwriteLogメソッドを利用してください。 */ function write_log( $message, $log_level=SPIDER_LOG_LEVEL_INFO ) { - $system_log_level = SPIDER_LOG_LEVEL_INFO; - if( defined('SYSTEM_LOG_LEVEL') && is_numeric(SYSTEM_LOG_LEVEL) - && preg_match('/^[0-4]$/',SYSTEM_LOG_LEVEL) > 0 ) { - $system_log_level = SYSTEM_LOG_LEVEL; + if(is_object($this->http_request_object)){ + $this->http_request_object->writeLog($message,$log_level); } - // システム設定のログレベルより大きいレベルのログは出力しない - if( $log_level > $system_log_level ) { - return true; - } - // ログファイル名の決定 - $log_file_path = DIR_PATH_LOG.DIRECTORY_SEPARATOR.'spider'; - if( !file_exists( $log_file_path ) ) { - if( @mkdir( $log_file_path, 0777 ) ) { - @chmod( $log_file_path, 0777 ); - } - } - $log_file_path = $log_file_path.DIRECTORY_SEPARATOR.date('Y'); - if( !file_exists( $log_file_path ) ) { - if( @mkdir( $log_file_path, 0777 ) ) { - @chmod( $log_file_path, 0777 ); - } - } - $log_file_path = $log_file_path.DIRECTORY_SEPARATOR.date('m'); - if( !file_exists( $log_file_path ) ) { - if( @mkdir( $log_file_path, 0777 ) ) { - @chmod( $log_file_path, 0777 ); - } - } - $log_file_path = $log_file_path.DIRECTORY_SEPARATOR.'system_'.date('d').'.log'; - if( !file_exists( $log_file_path ) ) { - if(@touch( $log_file_path, 0666 )){ - @chmod( $log_file_path, 0666 ); - } - } - $message = str_replace( "\r\n", "\n", $message ); - $message = str_replace( "\r", "\n", $message ); - $message = str_replace( "\n", " ", $message ); - error_log( - "[". date('Y-m-d H:i:s')."]" - ."[".get_class($this)."] " - .$message - . "\t" . $_SERVER['REMOTE_ADDR'] - . "\t" . $_SERVER['REMOTE_HOST'] - . "\t" . $_SERVER['HTTP_USER_AGENT'] - . "\n" - , 3, $log_file_path ); - return true; } /** - * Infoレベルのログを出力します。 + * Fatalレベルのログを出力します。 * @param $message ログメッセージ + * @deprecated v1.0.00 - 2009/04/17 正式リリース前の仕様です。HttpRequestクラスオブジェクトのfatalメソッドを利用してください。 */ - function info($message){ - $this->write_log( $message, SPIDER_LOG_LEVEL_INFO ); + function fatal($message){ + if(is_object($this->http_request_object)){ + $this->http_request_object->writeLog($message,SPIDER_LOG_LEVEL_FATAL); + } } /** - * Reportレベルのログを出力します。 + * Errorレベルのログを出力します。 * @param $message ログメッセージ + * @deprecated v1.0.00 - 2009/04/17 正式リリース前の仕様です。HttpRequestクラスオブジェクトのerrorメソッドを利用してください。 */ - function report($message){ - $this->write_log( $message, SPIDER_LOG_LEVEL_REPORT ); + function error($message){ + if(is_object($this->http_request_object)){ + $this->http_request_object->writeLog($message,SPIDER_LOG_LEVEL_ERROR); + } } /** - * Errorレベルのログを出力します。 + * Warningレベルのログを出力します。 * @param $message ログメッセージ + * @deprecated v1.0.00 - 2009/04/17 正式リリース前の仕様です。HttpRequestクラスオブジェクトのwarnメソッドを利用してください。 */ - function error($message){ - $this->write_log( $message, SPIDER_LOG_LEVEL_ERROR ); + function warn($message){ + if(is_object($this->http_request_object)){ + $this->http_request_object->writeLog($message,SPIDER_LOG_LEVEL_WARNING); + } } /** - * Fatalレベルのログを出力します。 + * Infoレベルのログを出力します。 * @param $message ログメッセージ + * @deprecated v1.0.00 - 2009/04/17 正式リリース前の仕様です。HttpRequestクラスオブジェクトのinfoメソッドを利用してください。 */ - function fatal($message){ - $this->write_log( $message, SPIDER_LOG_LEVEL_FATAL ); + function info($message){ + if(is_object($this->http_request_object)){ + $this->http_request_object->writeLog($message,SPIDER_LOG_LEVEL_INFO); + } } /** * Debugレベルのログを出力します。 * @param $message ログメッセージ + * @deprecated v1.0.00 - 2009/04/17 正式リリース前の仕様です。HttpRequestクラスオブジェクトのdebugメソッドを利用してください。 */ function debug($message){ - $this->write_log( $message, SPIDER_LOG_LEVEL_DEBUG ); + if(is_object($this->http_request_object)){ + $this->http_request_object->writeLog($message,SPIDER_LOG_LEVEL_DEBUG); + } } } ?>