Перейти к содержанию

nervud

Пользователи
  • Постов

    20
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные nervud

  1. Здравствуйте! помогите с таким вопросом. Сильно тормозит форум после обновы на 4.4.4 с 4.1.X (обновление прошло гладко).

    Используем

    железо:

    Процессор    Intel(R) Xeon(R) CPU E31220 @ 3.10GHz (4 cores)
    Оперативная память    1884 / 7792 MiB
    Размер дискового пространства    914.51 GiB
    Файл подкачки (swap)    4095 MiB
    Средняя загрузка (1, 5, 15 мин)    1.46 1.33 1.04
    Продолжительность работы    206 days 8 hours 38 minutes
    Количество процессов    171

    Софт:

    Invision Community Nulled 4.4.4 скачан здесь

    nginx+ PHP 7.3 PHP-FPM + mariadb
    +-----------------+
    | version()       |
    +-----------------+
    | 10.1.24-MariaDB |
    +-----------------+

    используется memceche

    Размер базы 2,3Гб

    60к пользователей 300к+ сообщений

    Виснет на задачах некоторых но больше всего на задаче digest в админке висит предупреждение ниже на скрине

    Screenshot_13.png.42e35c92659b2ac7bc0816bf727ebfda.png

    в момент выполнения задач (процессы) скрин, процес запускал в ручную - безрезультатно.

    Screenshot_13.png.42e35c92659b2ac7bc0816bf727ebfda.png

    Команда  strace -p скрин

    kiss_37kb.1563651898.png.5c5212a9a1c6aaef6fd7d8130463136d.png

    в мускуле скрин

    Screenshot_15.thumb.png.f15e682b03b6609e46eb7d1920d5f6e3.png

    На сервере есть пару мелких проекторов существенную нагрузку не создают.

    Пробовал менять версию php, отключал включал memceched, крутил конфиги мускула и пхп, чекал базу, база почищена от старых логов.

     

    Может тут на форуме кто то сталкивался подобным, или кто подскажет куда копать?

    Заранее благодарен

    Screenshot_14.png

  2. Ребята подскажите в чем проблема, на форуме в блоке статистика не обновляется данные о последнем зарегистрированном пользователе.

    обновляется только после чистки кеша через поддержку

    IPS 4.4.3 (с Вашего форума) задачи выполняются через cron раз в минуту

    Q6M32.png.56cf0f4aab612afbfc3e3a1d63ed073c.png

  3. Здравствуйте кто сталкивался с настройкой правил для Automation Rules? необходима помощь.

    Использую местный нулл 4.1.19.2 здесь взял Automation Rules 1.3.16 и  points-1.0.8

    Настроил чтобы при регистрации начислялись баллы

    Screenshot_13.jpg

    А оно не работает((

  4. Помогите установить данный скин, после установки 

    Screenshot_8.jpg

    В логах такая ошибка

    [error] [client *.*.*.*] PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted (tried to al
    locate 471039560 bytes) in /var/www/****/data/www/*****.biz/system/Text/LegacyParser.php on line 460

     

    версия форума v4.1.17.2 скачал у с вашего форума
    Лимит памяти 512 МБ.

    PHP версия 7.0.10

    MySQL версия 5.1.73

  5. Могу ошибаться но это в этом файле делается.

    Спойлер

     

    
    <?php
    
    /**
     * <pre>
     * Invision Power Services
     * IP.Board v3.4.7
     * Send email using php mail() or SMTP
     * Last Updated: $Date: 2012-11-12 11:43:40 -0500 (Mon, 12 Nov 2012) $
     * </pre>
     *
     * @author 		$Author: bfarber $
     * @copyright	(c) 2001 - 2009 Invision Power Services, Inc.
     * @license		http://www.invisionpower.com/company/standards.php#license
     * @package		IP.Board
     * @subpackage	Kernel
     * @link		http://www.invisionpower.com
     * @since		Tuesday 1st March 2005 (11:52)
     * @version		$Revision: 11592 $
     *
     *
     * Example usage:
     * <code>
     * $email = new classEmail(
     * 						array(	'debug'			=> 1,
     * 								'method'		=> 'mail',
     * 								'html'			=> 1,
     * 								'debug_path'	=> '/tmp/_mail',
     * 								'charset'		=> 'utf-8',
     * 							)
     * 						);
     * $email->setFrom( "[email protected]", "This is\r\nan email" );
     * $email->setTo( "[email protected]" );
     * $email->addBCC( "[email protected]" );
     * $email->addBCC( "[email protected]" );
     * $email->setSubject( "This is a test!!" );
     * $email->setBody( "<b>We have HTML capability!</b><br /><br /><i>But this is just a test...</i>" );
     * $email->sendMail();
     * </code>
     */
     
    /**
     * Email class interface
     *
     */
    interface interfaceEmail
    {
    	/**
    	 * Constructor
    	 *
    	 * @param	array	Initiate class parameters
    	 * @return	@e void
    	 */
    	public function __construct( $opts=array() );
    
    	/**
    	 * Clear stored data to prepare a new email. Useful
    	 *	to prevent having to close/reopen SMTP connection
    	 *	repeatedly.
    	 *
    	 * @return	@e void
    	 */
    	public function clearEmail();
    	
    	/**
    	 * Clear stored errors to prepare a new email.
    	 *
    	 * @return	@e void
    	 */
    	public function clearError();
    	
    	/**
    	 * Set the from email address
    	 *
    	 * @param	string		From email address
    	 * @param	string		[Optional] From display
    	 * @return	@e boolean
    	 */
    	public function setFrom( $email, $display='' );
    	
    	/**
    	 * Set the 'to' email address
    	 *
    	 * @param	string		To email address
    	 * @return	@e boolean
    	 */
    	public function setTo( $email );
    	
    	/**
    	 * Add cc's
    	 *
    	 * @param	string		CC email address
    	 * @return	@e boolean
    	 */
    	public function addCC( $email );
    	
    	/**
    	 * Add bcc's
    	 *
    	 * @param	string		BCC email address
    	 * @return	@e boolean
    	 */
    	public function addBCC( $email );
    	
    	/**
    	 * Set the email subject
    	 *
    	 * @param	string		Email subject
    	 * @return	@e boolean
    	 */
    	public function setSubject( $subject );
    	
    	/**
    	 * Set the email body
    	 *
    	 * @param	string		Email body
    	 * @return	@e boolean
    	 */
    	public function setBody( $body );
    	
    	/**
    	 * Set a header manually
    	 *
    	 * @param	string		Header key
    	 * @param	string		Header value
    	 * @return	@e boolean
    	 */
    	public function setHeader( $key, $value );
    	
    	/**
    	 * Send the mail (All appropriate params must be set by this point)
    	 *
    	 * @return	@e boolean
    	 */
    	public function sendMail();
    	
    	/**
    	 * Add an attachment to the current email
    	 *
    	 * @param	string	File data
    	 * @param	string	File name
    	 * @param	string	File type (MIME)
    	 * @return	@e void
    	 */
    	public function addAttachment( $data="", $name="", $ctype='application/octet-stream' );
    }
    
    /**
     * Email class
     *
     */
    class classEmail implements interfaceEmail
    {
    	/**
    	 * From email address 
    	 *
    	 * @var 	string
    	 */
    	protected $from			= "";
    	
    	/**
    	 * From email address (displayed)
    	 *
    	 * @var 	string
    	 */
    	protected $from_display	= "";
    	
    	/**
    	 * To email address
    	 *
    	 * @var 	string
    	 */
    	protected $to				= "";
    	
    	/**
    	 * Email subject
    	 *
    	 * @var 	string
    	 */
    	protected $subject		= "";
    	
    	/**
    	 * Email message contents
    	 *
    	 * @var 	string
    	 */
    	protected $message		= "";
    	
    	/**
    	 * PHP mail() extra params
    	 *
    	 * @var 	string
    	 */
    	protected $extra_opts		= '';
    	
    	/**
    	 * Plain text message contents
    	 *
    	 * @var 	string
    	 */
    	protected $pt_message		= "";
    	
    	/**
    	 * Attachments: Parts
    	 *
    	 * @var 	array
    	 */
    	protected $parts			= array();
    	
    	/**
    	 * CC Email addresses 
    	 *
    	 * @var 	array
    	 */
    	protected $cc			= array();
    
    	/**
    	 * BCC Email addresses 
    	 *
    	 * @var 	array
    	 */
    	protected $bcc			= array();
    	
    	/**
    	 * Email headers
    	 *
    	 * @var 	array
    	 */
    	protected $mail_headers	= array();
    	
    	/**
    	 * Header EOL
    	 *  RFC specs state \r\n
    	 *  However most servers seem to only support \n
    	 *
    	 * @var 	string
    	 */
    	const header_eol		= "\n";
    	
    	/**
    	 * Attachments: Multi-part
    	 *
    	 * @var 	string
    	 */
    	protected $multipart		= "";
    	
    	/**
    	 * Attachments: Boundry
    	 *
    	 * @var 	string
    	 */
    	protected $boundry		= "----=_NextPart_000_0022_01C1BD6C.D0C0F9F0";
    	
    	/**
    	 * HTML email flag
    	 *
    	 * @var 	integer
    	 */
    	protected $html_email		= 0;
    	
    	/**
    	 * Email character set
    	 *
    	 * @var 	string
    	 */
    	protected $char_set		= 'utf-8';
    	
    	/**
    	 * SMTP: Resource
    	 *
    	 * @var 	resource
    	 */
    	protected $smtp_fp		= null;
    	
    	/**
    	 * SMTP: Message
    	 *
    	 * @var 	string
    	 */
    	public $smtp_msg		= "";
    	
    	/**
    	 * SMTP: Port
    	 *
    	 * @var 	integer
    	 */
    	protected $smtp_port		= 25;
    	
    	/**
    	 * SMTP: Host
    	 *
    	 * @var 	string
    	 */
    	protected $smtp_host		= "localhost";
    	
    	/**
    	 * SMTP: Username 
    	 *
    	 * @var 	string
    	 */
    	protected $smtp_user		= "";
    	
    	/**
    	 * SMTP: Password
    	 *
    	 * @var 	string
    	 */
    	protected $smtp_pass		= "";
    	
    	/**
    	 * SMTP: HELO or EHLO
    	 *
    	 * @var 	string
    	 */
    	public $smtp_helo		= "HELO";
    	
    	/**
    	 * SMTP: Return code
    	 *
    	 * @var 	string
    	 */
    	public $smtp_code		= "";
    	
    	/**
    	 * SMTP: Wrap email addresses in brackets flag
    	 *
    	 * @var 	boolean
    	 */
    	protected $wrap_brackets	= false;
    	
    	/**
    	 * Default email method (mail or smtp)
    	 *
    	 * @var 	string
    	 */
    	protected $mail_method	= 'mail';
    	
    	/**
    	 * Dump email to flat file for testing
    	 *
    	 * @var 	integer
    	 */
    	protected $temp_dump		= 0;
    	
    	/**
    	 * Path for email dumps
    	 *
    	 * @var 	string
    	 */
    	protected $temp_dump_path	= '';
    	
    	/**
    	 * Error message
    	 *
    	 * @var 	string
    	 */
    	public $error_msg		= '';
    	
    	/**
    	 * Error description
    	 *
    	 * @var 	string
    	 */
    	public $error_help		= '';
    	
    	/**
    	 * Error flag
    	 *
    	 * @var 	boolean
    	 */
    	public $error			= false;
    	
    	/**
    	 * Constructor
    	 *
    	 * @param	array	Initiate class parameters (method (smtp,mail), debug, debug_path, html, charset, smtp_host, smtp_port, smtp_user, smtp_pass, smtp_helo, wrap_brackets, extra_opts)
    	 * @return	@e void
    	 */
    	public function __construct( $opts=array() )
    	{
    		$this->mail_method		= ( $opts['method'] AND in_array( strtolower($opts['method']), array( 'smtp', 'mail' ) ) )  ? strtolower($opts['method']) : 'mail';
    		$this->temp_dump		= !empty($opts['debug']) ? 1 : 0;
    		$this->temp_dump_path	= !empty($opts['debug_path']) ? $opts['debug_path'] : '';
    		$this->html_email		= !empty($opts['html']) ? 1 : 0;
    		$this->char_set			= !empty($opts['charset']) ? $opts['charset'] : 'utf-8';
    
    		$this->smtp_host		= !empty($opts['smtp_host']) ? $opts['smtp_host'] : '';
    		$this->smtp_port		= !empty($opts['smtp_port']) ? intval($opts['smtp_port']) : 25;
    		$this->smtp_user		= !empty($opts['smtp_user']) ? $opts['smtp_user'] : '';
    		$this->smtp_pass		= !empty($opts['smtp_pass']) ? $opts['smtp_pass'] : '';
    		$this->smtp_helo		= !empty($opts['smtp_helo']) ? $opts['smtp_helo'] : 'HELO';
    		$this->wrap_brackets	= !empty($opts['wrap_brackets']) ? true : false;
    		$this->extra_opts		= !empty($opts['extra_opts']) ? $opts['extra_opts'] : '';
    		
    		if ( ! defined( 'EMAIL_MULTI_HEADERS_IN_BODY' ) )
    		{
    			define( 'EMAIL_MULTI_HEADERS_IN_BODY', false );
    		}
    		
    		if ( $this->mail_method == 'smtp' && ! $this->temp_dump )
    		{
    			$this->_smtpConnect();
    		}
    	}
    	
    	/**
    	 * Destructor
    	 *
    	 * @return	@e void
    	 */
    	public function __destruct()
    	{
    		if( $this->mail_method == 'smtp' )
    		{
    			$this->_smtpDisconnect();
    		}
    	}
    	
    	/**
    	 * Sets the HTML version of the email
    	 *
    	 * @param	string	$content	HTML content of the email
    	 * @return	@e void
    	 */
    	public function setHtmlContent( $content )
    	{
    		$this->message = $content;
    	}
    	
    	/**
    	 * Sets plain text version of the email
    	 *
    	 * @param	string	$content	Plain text content of the email
    	 * @return	@e void
    	 */
    	public function setPlainTextContent( $content )
    	{
    		$this->pt_message = $content;
    	}
    	
    	/**
    	 * Sets whether or not this is a HTML email
    	 *
    	 * @param	boolean	$boolean	True = html email, False = plain text email
    	 * @return	@e void
    	 */
    	public function setHtmlEmail( $boolean=null )
    	{
    		$this->html_email = ( $boolean ) ? true : false;
    	}
    	
    	/**
    	 * Clear stored data to prepare a new email. Useful
    	 *	to prevent having to close/reopen SMTP connection
    	 *	repeatedly.
    	 *
    	 * @return	@e void
    	 */
    	public function clearEmail()
    	{
    		$this->from			= '';
    		$this->from_display	= '';
    		$this->to			= '';
    		$this->cc			= array();
    		$this->bcc			= array();
    		$this->subject		= '';
    		$this->message		= '';
    		$this->pt_message	= '';
    		$this->parts		= array();
    		$this->mail_headers	= array();
    		$this->multipart	= '';
    	}
    	
    	/**
    	 * Clear stored errors to prepare a new email.
    	 *
    	 * @return	@e void
    	 */
    	public function clearError()
    	{
    		$this->error_msg	= '';
    		$this->error_help	= '';
    		$this->error		= false;
    	}
    
    	/**
    	 * Set the from email address
    	 *
    	 * @param	string		From email address
    	 * @param	string		[Optional] From display
    	 * @return	@e boolean
    	 */
    	public function setFrom( $email, $display='' )
    	{
    		$this->from			= $this->_cleanEmail( $email );
    		
    		if ( $display )
    		{
    			$sfrom	 = $this->_encodeHeaders( array( 'FDisplay' => $display ) );
    			$display = $sfrom['FDisplay'];
    		}
    		
    		$this->from_display = $display;
    		
    		return true;
    	}
    	
    	/**
    	 * Set a header manually
    	 *
    	 * @param	string		Header key
    	 * @param	string		Header value
    	 * @return	@e boolean
    	 */
    	public function setHeader( $key, $value )
    	{
    		$this->mail_headers[ $key ]	= $value;
    		
    		return true;
    	}
    	
    	/**
    	 * Set the 'to' email address
    	 *
    	 * @param	string		To email address
    	 * @return	@e boolean
    	 */
    	public function setTo( $email )
    	{
    		$this->to			= $this->_cleanEmail( $email );
    		
    		return true;
    	}
    	
    	/**
    	 * Add cc's
    	 *
    	 * @param	string		CC email address
    	 * @return	@e boolean
    	 */
    	public function addCC( $email )
    	{
    		$this->cc[]		= $this->_cleanEmail( $email );
    		
    		return true;
    	}
    	
    	/**
    	 * Add bcc's
    	 *
    	 * @param	string		BCC email address
    	 * @return	boolean
    	 */
    	public function addBCC( $email )
    	{
    		$this->bcc[]		= $this->_cleanEmail( $email );
    		
    		return true;
    	}
    	
    	/**
    	 * Set the email subject
    	 *
    	 * @param	string		Email subject
    	 * @return	@e boolean
    	 */
    	public function setSubject( $subject )
    	{
    		/* Fix encoded quotes, etc */
    		$subject = str_replace( '&quot;', '"', $subject );
    		$subject = str_replace( '&#039;', "'", $subject );
    		$subject = str_replace( '&#39;' , "'", $subject );
    		$subject = str_replace( '&#33;' , "!", $subject );
    		$subject = str_replace( '&#36;' , "$", $subject );
    		
    		if( $this->mail_method != 'smtp' )
    		{
    			$sheader	= $this->_encodeHeaders( array( 'Subject' => $subject ) );
    			$subject	= $sheader['Subject'];
    		}
    		
    		$this->subject		= $subject;
    		
    		return true;
    	}
    	
    	/**
    	 * Set the email body.  This does not need to be called if you have called setHtmlContent() or setPlainTextContent().
    	 *
    	 * @param	string		Email body
    	 * @return	@e boolean
    	 */
    	public function setBody( $body )
    	{
    		$this->message		= $body;
    		
    		return true;
    	}
    	
    	/**
    	 * Clean an email address
    	 *
    	 * @param	string		Email address
    	 * @return	@e string
    	 */
    	protected function _cleanEmail( $email )
    	{
    		$email		= str_replace( ' '	, '',	$email );
    		$email		= str_replace( "\t"	, '',	$email );
    		$email		= str_replace( "\r"	, '',	$email );
    		$email		= str_replace( "\n"	, '',	$email );
    		$email		= str_replace( ',,'	, ',',	$email );
    		$email		= preg_replace( '#\#\[\]\'"\(\):;/\$!£%\^&\*\{\}#' , "", $email  );
    		
    		return $email;
    	}
    
    	/**
    	 * Send the mail (All appropriate params must be set by this point)
    	 *
    	 * @return	@e boolean
    	 */
    	public function sendMail()
    	{
    		//-----------------------------------------
    		// Build headers
    		//-----------------------------------------
    
    		$this->_buildHeaders();
    				
    		//-----------------------------------------
    		// Verify params are all set
    		//-----------------------------------------
    		
    		if( $this->temp_dump != 1 && ( !$this->to OR !$this->from OR !$this->subject ) )
    		{
    			$this->_fatalError( "From, to, or subject empty" );
    			return false;
    		}
    		
    		if( EMAIL_MULTI_HEADERS_IN_BODY && $this->mail_method != 'smtp' && strstr( $this->rfc_headers, $this->boundry ) )
    		{
    			/* We need to move some stuff around here. PHP Mail likes the message to contain the multiparts but we still need certain headers including boundry*/
    			$b = preg_quote( $this->boundry, '#' );
    			
    			preg_match( "#\n--" . $b . "(.*)$#s", $this->rfc_headers, $matches );
    			
    			$message = $matches[0];
    			$headers = str_replace( $matches[0], '', $this->rfc_headers );
    			
    			/* strip off 'this is a mime message' */
    			preg_match( "#^(.*" . $b . '")#s', $headers, $hMatches );
    			
    			$headers = $hMatches[0];
    			
    			$this->message     = $message;
    			$this->rfc_headers = $headers;
    		}
    		
    		//-----------------------------------------
    		// Debugging
    		//-----------------------------------------
    		
    		if( $this->temp_dump == 1 )
    		{
    			$debug	= $this->subject . "\n------------\n" . $this->rfc_headers . "\n\n" . $this->message;
    
    			if( !is_dir( $this->temp_dump_path ) )
    			{
    				@mkdir( $this->temp_dump_path, IPS_FOLDER_PERMISSION );
    				@chmod( $this->temp_dump_path, IPS_FOLDER_PERMISSION );
    			}
    			
    			if( !is_dir( $this->temp_dump_path ) )
    			{
    				$this->_fatalError( "Включена отладка, но путь отладки не существует и не может быть создан" );
    				return false;
    			}
    			
    			$pathy = $this->temp_dump_path . '/' . date("M-j-Y") . '-' . time() . str_replace( '@', '+', $this->to ) . uniqid( '_' ) . '.php';
    			
    			$fh = @fopen( $pathy, 'w' );
    			@fputs( $fh, $debug, strlen($debug) );
    			@fclose( $fh );
    		}
    		else
    		{
    			//-----------------------------------------
    			// PHP mail()
    			//-----------------------------------------
    			
    			if( $this->mail_method != 'smtp' )
    			{
    				/* Fifth parameter not supported in safe mode 
    			 		@link http://community.invisionpower.com/tracker/issue-30145-php-mail-and-safe-mode */
    				if( ( defined('SAFE_MODE_ON') AND SAFE_MODE_ON ) OR $this->settings['safe_mode_skins'] )
    				{
    					if ( ! @mail( $this->to, $this->subject, $this->message, $this->rfc_headers ) )
    					{
    						$this->_fatalError( "Could not send the email", "Failed at 'mail' command (SAFE MODE)" );
    					}
    				}
    				else if ( ! @mail( $this->to, $this->subject, $this->message, $this->rfc_headers, $this->extra_opts ) )
    				{
    					if ( ! @mail( $this->to, $this->subject, $this->message, $this->rfc_headers ) )
    					{
    						$this->_fatalError( "Невозможно отправить сообщение", "Ошибка функции 'mail'" );
    					}
    				}
    			}
    			
    			//-----------------------------------------
    			// SMTP
    			//-----------------------------------------
    			
    			else
    			{
    				$this->_smtpSendMail();
    			}
    		}
    		
    		$this->clearEmail();
    		
    		return $this->error ? false : true;
    	}
    
    	/**
    	 * Fatal error handler
    	 *
    	 * @param	string	Error Message
    	 * @param	string	Error Help / Description
    	 * @return	@e boolean
    	 */
    	protected function _fatalError( $msg, $help="" )
    	{
    		$this->error		= true;
    		$this->error_msg	= $msg;
    		$this->error_help	= $help;
    		
    		return false;
    	}
    
    
    	/*-------------------------------------------------------------------------*/
    	// HEADERS
    	/*-------------------------------------------------------------------------*/
    	
    	/**
    	 * Build the multipart headers for the email
    	 *
    	 * @return	@e string
    	 */
    	protected function _buildMultipart() 
    	{
    		$multipart	= '';
    		
    		for( $i = sizeof( $this->parts ) - 1 ; $i >= 0 ; $i-- )
    		{
    			$multipart .= self::header_eol . $this->_encodeAttachment( $this->parts[$i] ) . "--" . $this->boundry;
    		}
    		
    		return $multipart . "--\n";
    	}
    
    	/**
    	 * ENCODE HEADERS - RFC2047
    	 *
    	 * @param	array 			Array of headers
    	 * @return	@e array
    	 * @see		http://www.faqs.org/rfcs/rfc822.html
    	 * @see		http://www.faqs.org/rfcs/rfc2045
    	 * @see		http://www.faqs.org/rfcs/rfc2047
    	 * @see		http://us2.php.net/manual/en/function.mail.php#27997
    	 */
    	protected function _encodeHeaders( $headers = array() )
    	{	
    		$enc_headers = count($headers) ? $headers : $this->mail_headers;
    		
            foreach( $enc_headers as $header => $value) 
            {
            	$orig_value	= $value;
            	
            	//-----------------------------------------
            	// MTAs seem to dislike 'From' encoded
            	//  so we just strip board name and continue
            	//-----------------------------------------
            	
    			if( $header == 'From' OR $header == 'Content-Type' OR $header == 'Content-Disposition' OR $header == 'Content-Transfer-Encoding' OR $header == 'v' )
    			{
    				if ( ! count($headers) )
    				{
    					$this->mail_headers[ $header ]	= $orig_value;
    				}
    				
    				$enc_headers[ $header ]			= $orig_value;
    				
    				continue;
    			}
    			
    			//-----------------------------------------
    			// We don't want to keep subject in the
    			// headers for php mail
    			//-----------------------------------------
    			
    			if( $this->mail_method != 'smtp' AND ( $header == 'Subject' OR $header == 'FDisplay' ) )
    			{
    				unset($this->mail_headers[ $header ]);
    			}
    			
    			//-----------------------------------------
    			// Don't bother encoding unless we have chars
    			//  that need to be encoded
    			//-----------------------------------------
    			
    			if( !preg_match( '/(\w*[\x80-\xFF]+\w*)/', $value ) )
    			{
    				if( $header != 'Subject' AND $header != 'FDisplay' )
    				{
    					$this->mail_headers[ $header ]	= $orig_value;
    				}
    				
    				$enc_headers[ $header ]			= $orig_value;
    				
    				continue;
    			}
    
    			//-----------------------------------------
    			// Base64 encoding from example at php.net
    			//-----------------------------------------
    			
            	$start		= '=?' . $this->char_set . '?B?';
            	$end		= '?=';
            	$spacer		= $end . self::header_eol . ' ' . $start;
            	$length		= 75 - strlen($start) - strlen($end);
            	$length		= $length - ($length % 4);
            	
            	$value		= base64_encode($value);
            	
            	/* Chunking confuses some email clients with subject */
            	if ( $header != 'Subject' AND $header != 'FDisplay' )
            	{
            		$value		= chunk_split( $value, $length, $spacer );
            		$spacer		= preg_quote($spacer);
            		$value		= preg_replace( "/" . $spacer . "$/", "", $value );
            	}
    
            	$value		= $start . $value . $end;
    
                if( !count($headers) AND ( $this->mail_method == 'smtp' OR $header != 'Subject' OR $header != 'FDisplay' ) )
                {
                	$this->mail_headers[ $header ]	= $value;
            	}
            	else
            	{
    	        	$enc_headers[ $header ]			= $value;
            	}
            }
            
            return $enc_headers;
        }
        
    	/**
    	 * Build the email headers (MIME, Charset, From, BCC, To, Subject, etc)
    	 *
    	 * @return	@e void
    	 */
    	protected function _buildHeaders()
    	{
    		$extra_headers		= array();
    		$extra_headers_rfc	= "";
    		
    		//-----------------------------------------
    		// HTML (hitmuhl)
    		// If we're sending HTML messages, then
    		// we'll add the plain text message along with
    		// it for non HTML browsers
    		//-----------------------------------------
    		
    		if ( ! $this->pt_message )
    		{
    			$this->pt_message = $this->message;
    			$this->pt_message = str_replace( "<br />", "\n", $this->pt_message );
    			$this->pt_message = str_replace( "<br>"  , "\n", $this->pt_message );
    			//$this->pt_message = strip_tags( $this->pt_message );
    			
    			$this->pt_message = html_entity_decode( $this->pt_message, ENT_QUOTES );
    			$this->pt_message = str_replace( '&#092;', '\\', $this->pt_message );
    			$this->pt_message = str_replace( '&#036;', '$', $this->pt_message );
    		}
    		
    		//-----------------------------------------
    		// Start mail headers
    		//-----------------------------------------
    		
    		$this->mail_headers['MIME-Version']			= "1.0";
    		$this->mail_headers['Date'] 				= date( "r" );
    		$this->mail_headers['Return-Path']			= $this->from;
    		$this->mail_headers['X-Priority']			= "3";
    		//$this->mail_headers['X-MSMail-Priority']	= "Normal";
    		$this->mail_headers['X-Mailer']				= "IPS PHP Mailer";
    		
    		//-----------------------------------------
    		// Message-ID
    		//-----------------------------------------
    		
    		if( $this->mail_method != 'smtp' )
    		{
    			$this->mail_headers['Message-ID']		= "<" . md5(microtime(true)) . "@" . $_SERVER['HTTP_HOST'] . ">";
    		}
    		
    		//-----------------------------------------
    		// From and to...
    		// @link	http://community.invisionpower.com/tracker/issue-22474-mail-delivery-method-character/
    		//-----------------------------------------
    		
    		if( $this->from_display AND !preg_match( '/(\w*[\x80-\xFF]+\w*)/', $this->from_display ) )
    		{
    			$this->mail_headers['From']		= '"' . $this->from_display . '" <' . $this->from . '>';
    		}
    		else
    		{
    			$this->mail_headers['From']		= '<' . $this->from . '>';
    		}
    				
    		if ( $this->mail_method != 'smtp' )
    		{
    			if( count( $this->cc ) > 0 )
    			{
    				$this->mail_headers['Cc']	= implode( "," , $this->cc );
    			}
    			if( count( $this->bcc ) > 0 )
    			{
    				$this->mail_headers['Bcc']	= implode( "," , $this->bcc );
    			}
    		}
    		else
    		{
    			if ( $this->to )
    			{
    				$this->mail_headers['To']	= $this->to;
    			}
    
    			$this->mail_headers['Subject']	= $this->subject;
    			
    			if( count( $this->cc ) > 0 )
    			{
    				$this->mail_headers['Cc']	= implode( "," , $this->cc );
    			}
    		}
    
    		//-----------------------------------------
    		// Attachments?
    		//-----------------------------------------
    		
    		if ( count($this->parts) > 0 )
    		{
    			if ( ! $this->html_email )
    			{
    				$extra_headers[0]['Content-Type']	= "multipart/mixed;\n\tboundary=\"".$this->boundry."\"";
    				$extra_headers[0]['notencode']		= "\n\nThis is a MIME encoded message.\n\n--".$this->boundry."\n";
    				$extra_headers[1]['Content-Type']	= "text/plain;\n\tcharset=\"".$this->char_set."\"";
    				$extra_headers[1]['notencode']		= "\n\n".$this->message."\n\n--".$this->boundry;
    			}
    			else
    			{
    				$extra_headers[0]['Content-Type']	= "multipart/mixed;\n\tboundary=\"".$this->boundry."\"";
    				$extra_headers[0]['notencode']		= "\n\nThis is a MIME encoded message.\n\n--".$this->boundry."\n";
    				$extra_headers[1]['Content-Type']	= "text/html;\n\tcharset=\"".$this->char_set."\"";
    				$extra_headers[1]['notencode'] 		= "\n\n".$this->message."\n\n--".$this->boundry;
    			}
    			
    			$extra_headers[2]['notencode'] 			= $this->_buildMultipart();
    			
    			reset($extra_headers);
    			
    			foreach( $extra_headers as $subset => $the_header )
    			{
    				foreach( $the_header as $k => $v )
    				{
    					if( $k == 'notencode' )
    					{
    						$extra_headers_rfc .= $v;
    					}
    					else
    					{
    						$v = $this->_encodeHeaders( array( 'v' => $v ) );
    						
    						$extra_headers_rfc .= $k . ': ' . $v['v'] . self::header_eol;
    					}
    				}
    			}
    			
    			$this->message = "";
    		}
    		else
    		{
    			//-----------------------------------------
    			// HTML (hitmuhl) ?
    			//-----------------------------------------
    			
    			if ( $this->html_email )
    			{
    				$extra_headers[0]['Content-Type']	= "multipart/alternative;\n\tboundary=\"".$this->boundry."\"";
    				$extra_headers[0]['notencode']		= "\n\nThis is a MIME encoded message.\n\n--".$this->boundry."\n";
    				$extra_headers[1]['Content-Type']	= "text/plain;\n\tcharset=\"".$this->char_set."\"";
    				$extra_headers[1]['notencode']		= "\n\n".$this->pt_message."\n\n--".$this->boundry."\n";
    				$extra_headers[2]['Content-Type']	= "text/html;\n\tcharset=\"".$this->char_set."\"";
    				$extra_headers[2]['notencode']		= "\n\n".$this->message."\n\n--".$this->boundry."--";
    				
    				reset($extra_headers);
    				
    				foreach( $extra_headers as $subset => $the_header )
    				{
    					foreach( $the_header as $k => $v )
    					{
    						if( $k == 'notencode' )
    						{
    							$extra_headers_rfc .= $v;
    						}
    						else
    						{
    							$v = $this->_encodeHeaders( array( $k => $v ) );
    
    							$extra_headers_rfc .= $k . ': ' . $v[ $k ] . self::header_eol;
    						}
    					}
    				}
    				
    				unset( $this->mail_headers['Content-Type'] );
    				
    				$this->message = "";
    			}
    			else
    			{
    				$this->mail_headers['Content-type']	= 'text/plain; charset="'.$this->char_set.'"';
    			}
    		}
    	
    		$this->_encodeHeaders();
    		
    		foreach( $this->mail_headers as $k => $v )
    		{
    			$this->rfc_headers .= $k . ": " . $v . self::header_eol;
    		}
    		
    		//-----------------------------------------
    		// Attachments extra?
    		//-----------------------------------------
    		
    		if( $extra_headers_rfc )
    		{
    			$this->rfc_headers .= $extra_headers_rfc;
    		}
    	}
        
        
    	/*-------------------------------------------------------------------------*/
    	// SMTP Methods
    	/*-------------------------------------------------------------------------*/
        
    	/**
    	 * SMTP connect
    	 *
    	 * @return	@e boolean
    	 */
        protected function _smtpConnect()
    	{
    		$this->smtp_fp = @fsockopen( $this->smtp_host, intval($this->smtp_port), $errno, $errstr, 30 );
    		
    		if ( ! $this->smtp_fp )
    		{
    			$this->_smtpError( "Could not open a socket to the SMTP server ({$errno}:{$errstr})" );
    			return false;
    		}
    		
    		$this->_smtpGetLine();
    		
    		$this->smtp_code = substr( $this->smtp_msg, 0, 3 );
    		
    		if ( $this->smtp_code == 220 )
    		{
    			//-----------------------------------------
    			// HELO!, er... HELLO!
    			//-----------------------------------------
    			
    			$this->_smtpSendCmd( "{$this->smtp_helo} " . preg_replace('@^(?:\w+://?)?([^/:]+)@i', '$1', $this->smtp_host) );//-IBR- по стандарту нужно передавать имя хоста, некоторые почтовики съедают ssl:// tls://, а многие - нет, например mail.ru. По стандарту вообще в HELO надо передавать свой хост, но у IPS передается хост почтовика.
    			
    			if ( $this->smtp_code != 250 )
    			{
    				$this->_smtpError( "HELO (using: {$this->smtp_helo})" );
    				return false;
    			}
    			
    			//-----------------------------------------
    			// Do you like my user!
    			//-----------------------------------------
    			
    			if ( $this->smtp_user AND $this->smtp_pass )
    			{
    				$this->_smtpSendCmd( "AUTH LOGIN" );
    				
    				if ( $this->smtp_code == 334 )
    				{
    					$this->_smtpSendCmd( base64_encode($this->smtp_user) );
    					
    					if ( $this->smtp_code != 334  )
    					{
    						$this->_smtpError( "Username not accepted from the server" );
    						return false;
    					}
    					
    					$this->_smtpSendCmd( base64_encode($this->smtp_pass) );
    					
    					if ( $this->smtp_code != 235 )
    					{
    						$this->_smtpError( "Password not accepted from the server" );
    						return;
    					}
    				}
    				else
    				{
    					$this->_smtpError( "This server does not support authorisation" );
    					return;
    				}
    			}
    		}
    		else
    		{
    			$this->_smtpError( "Could not connect to the SMTP server" );
    			return false;
    		}
    		
    		return true;
    	}
    	
    	/**
    	 * SMTP disconnect
    	 *
    	 * @return	@e boolean
    	 */
        protected function _smtpDisconnect()
    	{
    		$this->_smtpSendCmd( "quit" );
    
    		if ( $this->smtp_code != 221 )
    		{
    			$this->_smtpError( "Unable to exit SMTP server with 'quit' command" );
    			return false;
    		}
    		
    		return @fclose( $this->smtp_fp );
    	}
    	
    	/**
    	 * SMTP: Get next line
    	 *
    	 * @return	@e void
    	 */
    	protected function _smtpGetLine()
    	{
    		$this->smtp_msg = "";
    		
    		while ( $line = @fgets( $this->smtp_fp, 515 ) )
    		{
    			$this->smtp_msg .= $line;
    			
    			if ( substr($line, 3, 1) == " " )
    			{
    				break;
    			}
    		}
    	}
    	
    	/**
    	 * SMTP: Send command
    	 *
    	 * @param	string		SMTP command
    	 * @return	@e boolean
    	 */
    	protected function _smtpSendCmd( $cmd )
    	{
    		$this->smtp_msg  = "";
    		$this->smtp_code = "";
    		
    		@fputs( $this->smtp_fp, $cmd . "\r\n" );
    		
    		$this->_smtpGetLine();
    		
    		$this->smtp_code = substr( $this->smtp_msg, 0, 3 );
    		
    		return $this->smtp_code == "" ? false : true;
    	}
    	
    	/**
    	 * Encode data and make it safe for SMTP transport
    	 *
    	 * @param	string	Raw Data
    	 * @return	@e string
    	 */
    	protected function _smtpCrlfEncode( $data )
    	{
    		$data .= "\n";
    		$data  = str_replace( "\n", "\r\n", str_replace( "\r", "", $data ) );
    		$data  = str_replace( "\n.\r\n" , "\n. \r\n", $data );
    		
    		return $data;
    	}
    	
    	/**
    	 * SMTP: Error handler
    	 *
    	 * @param	string		SMTP error
    	 * @return	@e boolean
    	 */
    	protected function _smtpError( $err="" )
    	{
    		//$this->smtp_msg = $err;
    		$this->_fatalError( $err );
    		return false;
    	}
    	
    	/**
    	 * SMTP: Sends the SMTP email
    	 *
    	 * @return	@e void
    	 */
    	protected function _smtpSendMail()
    	{
    		$data = $this->_smtpCrlfEncode( $this->rfc_headers . "\n\n" . $this->message );
    
    		//-----------------------------------------
    		// Wrap in brackets
    		//-----------------------------------------
    		
    		if ( $this->wrap_brackets )
    		{
    			if ( ! preg_match( "/>$/", $this->from ) )//-IBR- заменили ^< на >$ на случай если 'Форум'<[email protected]'>
    			{
    				$this->from = "<" . $this->from . ">";
    			}
    		}
    		
    		//-----------------------------------------
    		// From:
    		//-----------------------------------------
    		
    		$this->_smtpSendCmd( "MAIL FROM:" . $this->from );
    		
    		if ( $this->smtp_code != 250 )
    		{
    			$this->_smtpError( "Mail from command failed" );
    			return false;
    		}
    		
    		$to_arry = array( $this->to );
    		
    		if( count( $this->cc ) > 0 )
    		{
    			foreach( $this->cc as $cc )
    			{
    				$to_arry[] = $cc;
    			}
    		}
    		
    		if( count( $this->bcc ) > 0 )
    		{
    			foreach( $this->bcc as $bcc )
    			{
    				$to_arry[] = $bcc;
    			}
    		}
    		
    		//-----------------------------------------
    		// To:
    		//-----------------------------------------
    		
    		foreach( $to_arry as $to_email )
    		{
    			if ( $this->wrap_brackets )
    			{
    				$this->_smtpSendCmd( "RCPT TO:<" . $to_email . ">" );
    			}
    			else
    			{
    				$this->_smtpSendCmd( "RCPT TO:" . $to_email );
    			}
    			
    			if ( $this->smtp_code != 250 )
    			{
    				$this->_smtpError( "Incorrect email address: $to_email" );
    			}
    		}
    		
    		//-----------------------------------------
    		// SEND MAIL!
    		//-----------------------------------------
    		
    		$this->_smtpSendCmd( "DATA" );
    		
    		if ( $this->smtp_code == 354 )
    		{
    			fputs( $this->smtp_fp, $data . "\r\n" );
    		}
    		else
    		{
    			$this->_smtpError( "Error writing email body to SMTP server");
    			return false;
    		}
    		
    		//-----------------------------------------
    		// GO ON, NAFF OFF!
    		//-----------------------------------------
    		
    		$this->_smtpSendCmd( "." );
    		
    		if ( $this->smtp_code != 250 )
    		{
    			$this->_smtpError( "Email was not sent successfully" );
    			return false;
    		}
    	}
    	
    	
    	/*-------------------------------------------------------------------------*/
    	// ATTACHMENTS
    	/*-------------------------------------------------------------------------*/
    	
    	/**
    	 * Add an attachment to the current email
    	 *
    	 * @param	string	File data
    	 * @param	string	File name
    	 * @param	string	File type (MIME)
    	 * @return	@e void
    	 */
    	public function addAttachment( $data="", $name="", $ctype='application/octet-stream' )
    	{
    		$this->parts[] = array( 'ctype'  => $ctype,
    								'data'   => $data,
    								'encode' => 'base64',
    								'name'   => $name
    							  );
    	}
    	
    	/**
    	 * Encode an attachment
    	 *
    	 * @param	array	Raw data [ctype,encode,name,data]
    	 * @return	@e string
    	 */
    	protected function _encodeAttachment( $part=array() )
    	{
    		$msg = chunk_split( base64_encode( $part['data'] ) );
    		
    		$headers 	= array();
    		$header_str	= "";
    
    		$headers['Content-Type'] 				= $part['ctype'] . ( $part['name'] ? "; name =\"".$part['name']."\"" : "" );
    		$headers['Content-Transfer-Encoding'] 	= $part['encode'];
    		$headers['Content-Disposition']			= "attachment; filename=\"".$part['name']."\"";
    		
    		$headers = $this->_encodeHeaders( $headers );
    		
    		foreach( $headers as $k => $v )
    		{
    			$header_str .= $k . ': ' . $v . self::header_eol;
    		}
    		
    		$header_str .= "\n\n" . $msg . "\n";
    		
    		return $header_str;
    	}
    }

     

     

  6. Приветствую всех может кто подскажет как мне на страницах пагинации ссылка такого вида (/gallery/category/[Название-галереи]/?st=[количество-изображений]) начиная со второй странницы закрыть индексацию контента тегом <meta name="robots" content="noindex, follow">

    Также и в Unreal Portal  v3.0.3 такой тег нужно вставлять начиная со второй страницы ссылка такого вида (/index.php?app=uportal&page=[Номер_страницы])

×
×
  • Создать...