✏️ 正在编辑: ErrorMessage.fnc.php
路径:
/home/eblama1/sms.karnplayinland.com/functions/ErrorMessage.fnc.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php /** * Error Message function * * @package RosarioSIS * @subpackage functions */ // Declare Error & Note & Warning global arrays. $note = $error = $warning = []; /** * Error Message * * Use 'fatal' code to exit program. * Use 'note' code for Notes and Update messages. * * If there are missing vals or similar, show them a msg. * Pass in an array with error messages and this will display them * in a standard fashion. * In a program you may have: * * @example if ( ! $sch ) $error[] = _( 'School not provided.' ); * @example if ( $count === 0 ) $error[] = _( 'Number of students is zero.' ); ErrorMessage( $error ); * * Why use this? It will tell the user if they have multiple errors * without them having to re-run the program each time finding new * problems. Also, the error display will be standardized. * * @global string $print_data PDF print data * * @param array $errors Array of errors or notes. * @param string $code error|fatal|warning|note (optional). Defaults to 'error'. * @return string Error / Note Message, exits if 'fatal' code */ function ErrorMessage( $errors, $code = 'error' ) { global $_ROSARIO; if ( ! $errors || ! is_array( $errors ) ) { return ''; } // Note / Update. $return = '<div class="updated"><p><b>' . _( 'Note' ) . '</b>'; if ( $code === 'error' || $code === 'fatal' ) { // Error. $return = '<div class="error"><p>' . button( 'x', _( 'Error' ) ); } elseif ( $code === 'warning' ) { // Warning. $return = '<div class="error"><p>' . button( 'warning', _( 'Warning' ) ); } if ( count( $errors ) === 1 ) { $return .= ': ' . reset( $errors ) . '</p>'; } // More than one error: list. else { $return .= '</p><ul>'; foreach ( (array) $errors as $error ) { $return .= '<li>' . $error . '</li>'; } $return .= '</ul>'; } $return .= '</div>'; if ( $code === 'fatal' ) { // Fatal error, display error and exit. echo $return; if ( ! isset( $_REQUEST['_ROSARIO_PDF'] ) ) { /** * Save $_REQUEST vars in session: used to recreate $_REQUEST in Bottom.php * Note: Code duplicated from Modules.php * * @since 11.5 Copy $_REQUEST to $_SESSION['_REQUEST_vars'] last */ if ( isset( $_ROSARIO['page'] ) && $_ROSARIO['page'] === 'modules' && empty( $_REQUEST['LO_save'] ) && ( mb_strpos( $_REQUEST['modname'], 'misc/' ) === false || $_REQUEST['modname'] === 'misc/Portal.php' ) ) { $_SESSION['_REQUEST_vars'] = $_REQUEST; } Warehouse( 'footer' ); exit; } // Force PDF on fatal error. global $print_data; PDFStop( $print_data ); exit; } return $return; } /** * Send Error by Email * Send email to $RosarioErrorsAddress if set {@see config.inc.php}. * * @since 4.0 * @since 6.5 Add Profile. * @since 10.0 Add Can use modname. * @since 11.6 Log error if not sending email ($RosarioErrorsAddress not set) * * @param array $error Error messages. Optional. * @param $title string Email title. Optional. * * @return True if email sent, false otherwise. */ function ErrorSendEmail( $error = [], $title = 'PHP Fatal error' ) { global $RosarioErrorsAddress; chdir( dirname( __FILE__ ) . '/../' ); require_once 'ProgramFunctions/SendEmail.fnc.php'; if ( ! $error ) { $last_error = error_get_last(); if ( ! isset( $last_error['type'] ) || $last_error['type'] !== 1 ) { return false; } // Fatal error. $error = [ 'PHP Fatal error: ' . $last_error['message'], 'File: ' . $last_error['file'], 'Line: ' . $last_error['line'], ]; if ( ROSARIO_DEBUG ) { print_r( $error ); } } // Send email to $RosarioErrorsAddress if set {@see config.inc.php}. if ( ! filter_var( $RosarioErrorsAddress, FILTER_VALIDATE_EMAIL ) ) { if ( $title !== 'PHP Fatal error' ) { // Log error. error_log( $title . ' - ' . implode( ' ', $error ) ); } return false; } $ip = ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) // Filter IP, HTTP_* headers can be forged. && filter_var( $_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP ) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'] ); $debug_backtrace = debug_backtrace(); // User function would call ErrorMessage in an infinite loop if we are not logged in yet. $username = empty( $_SESSION['STAFF_ID'] ) && empty( $_SESSION['STUDENT_ID'] ) ? '[no user in session yet]' : User( 'USERNAME' ); $message = 'System: ' . ParseMLField( Config( 'TITLE' ) ) . "\n"; $message .= 'IP: ' . $ip . "\n"; $message .= 'Date: ' . date( 'Y-m-d H:i:s' ) . "\n"; $message .= 'User: ' . $username . "\n"; if ( User( 'PROFILE' ) ) { $message .= 'Profile: ' . User( 'PROFILE' ) . "\n"; } $message .= 'Page: ' . $_SERVER['PHP_SELF'] . "\n"; $message .= 'Query string: ' . $_SERVER['QUERY_STRING'] . "\n"; if ( ! empty( $_REQUEST['modname'] ) ) { $message .= 'Can use modname: ' . ( AllowUse( $_REQUEST['modname'] ) ? 'true' : 'false' ) . "\n"; } if ( ! empty( $_SERVER['HTTP_REFERER'] ) ) { $message .= 'Referrer: ' . $_SERVER['HTTP_REFERER'] . "\n"; } $message .= "\n\n" . 'Error: ' . "\n" . print_r( $error, true ); $message .= "\n\n" . 'Request Array: ' . "\n" . print_r( $_REQUEST, true ); $message .= "\n\n" . 'Session Array: ' . "\n" . print_r( $_SESSION, true ); $message .= "\n\n" . 'Debug Backtrace: ' . "\n" . print_r( $debug_backtrace, true ); if ( mb_strlen( $message ) !== mb_strlen( strip_tags( $message ) ) ) { // Format message if has HTML tags. $message = nl2br( $message ); } return SendEmail( $RosarioErrorsAddress, $title, $message ); }
💾 保存文件
← 返回文件管理器