Полезные функции, классы и тд.

Тема в разделе "PHP", создана пользователем zerg, 5 май 2009.

  1. zerg

    zerg Administrator Команда форума

    Регистр.:
    18 июл 2008
    Сообщения:
    4.254
    Симпатии:
    3
    Предлагаю вылаживать в эту тему полезные функции, классы, и тд.

    описание:
    Класс для отправки пост, гет запросов на сервер.

    пример использования:

    Код:
    include "httpsocket.php";
    $spam = new HTTPSocket;
    $baza="forumseo.org";
    $spam->connect(trim($baza),80);
    $spam->set_method('POST');
    $query = array(
    'user'                => trim($username),
    'pass'                => trim($password),
    'txt'                     => trim($txt),
    );
    $spam->query('/stranica.php',$query);
    Код:
    <?php
    
    /**
     * Socket communication class.
     *
     * Originally designed for use with DirectAdmin's API, this class will fill any HTTP socket need.
     *
     * Very, very basic usage:
     *   $Socket = new HTTPSocket;
     *   echo $Socket->get('http://user:pass@somesite.com/somedir/some.file?query=string&this=that');
     *
     * @author Phi1 'l0rdphi1' Stier <l0rdphi1@liquenox.net>
     * @package HTTPSocket
     * @version 2.6
     */
    class HTTPSocket {
    
    	var $version = '2.6';
    
    	/* all vars are private except $error, $query_cache, and $doFollowLocationHeader */
    
    	var $method = 'GET';
    
    	var $remote_host;
    	var $remote_port;
    	var $remote_uname;
    	var $remote_passwd;
    
    	var $result;
    	var $result_header;
    	var $result_body;
    	var $result_status_code;
    
    	var $lastTransferSpeed;
    
    	var $bind_host;
    
    	var $error = array();
    	var $warn = array();
    	var $query_cache = array();
    
    	var $doFollowLocationHeader = false;
    	var $redirectURL;
    
    	var $extra_headers = array();
    
    	/**
    	 * Create server "connection".
    	 *
    	 */
    	function connect($host, $port = '' )
    	{
    		if (!is_numeric($port))
    		{
    			$port = 80;
    		}
    
    		$this->remote_host = $host;
    		$this->remote_port = $port;
    	}
    
    	function bind( $ip = '' )
    	{
    		if ( $ip == '' )
    		{
    			$ip = $_SERVER['SERVER_ADDR'];
    		}
    
    		$this->bind_host = $ip;
    	}
    
    	/**
    	 * Change the method being used to communicate.
    	 *
    	 * @param string|null request method. supports GET, POST, and HEAD. default is GET
    	 */
    	function set_method( $method = 'GET' )
    	{
    		$this->method = strtoupper($method);
    	}
    
    	/**
    	 * Specify a username and password.
    	 *
    	 * @param string|null username. defualt is null
    	 * @param string|null password. defualt is null
    	 */
    	function set_login( $uname = '', $passwd = '' )
    	{
    		if ( strlen($uname) > 0 )
    		{
    			$this->remote_uname = $uname;
    		}
    
    		if ( strlen($passwd) > 0 )
    		{
    			$this->remote_passwd = $passwd;
    		}
    
    	}
    
    	/**
    	 * Query the server
    	 *
    	 * @param string containing properly formatted server API. See DA API docs and examples. Http:// URLs O.K. too.
    	 * @param string|array query to pass to url
    	 * @param int if connection KB/s drops below value here, will drop connection
    	 */
    	function query( $request, $content = '', $doSpeedCheck = 0 )
    	{
    		$this->error = $this->warn = array();
    		$this->result_status_code = NULL;
    
    		// is our request a http:// ... ?
    		if (preg_match('!^http://!i',$request))
    		{
    			$location = parse_url($request);
    			$this->connect($location['host'],$location['port']);
    			$this->set_login($location['user'],$location['pass']);
    
    			$request = $location['path'];
    			$content = $location['query'];
    
    			if ( strlen($request) < 1 )
    			{
    				$request = '/';
    			}
    
    		}
    
    		$array_headers = array(
    			'User-Agent' => "HTTPSocket/$this->version",
    			'Host' => ( $this->remote_port == 80 ? $this->remote_host : "$this->remote_host:$this->remote_port" ),
    			'Accept' => '*/*',
    			'Connection' => 'Close' );
    
    		foreach ( $this->extra_headers as $key => $value )
    		{
    			$array_headers[$key] = $value;
    		}
    
    		$this->result = $this->result_header = $this->result_body = '';
    
    		// was content sent as an array? if so, turn it into a string
    		if (is_array($content))
    		{
    			$pairs = array();
    
    			foreach ( $content as $key => $value )
    			{
    				$pairs[] = "$key=".urlencode($value);
    			}
    
    			$content = join('&',$pairs);
    			unset($pairs);
    		}
    
    		$OK = TRUE;
    
    		// instance connection
    		if ($this->bind_host)
    		{
    			$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    			socket_bind($socket,$this->bind_host);
    
    			if (!@socket_connect($socket,$this->remote_host,$this->remote_port))
    			{
    				$OK = FALSE;
    			}
    
    		}
    		else
    		{
    			$socket = @fsockopen( $this->remote_host, $this->remote_port, $sock_errno, $sock_errstr, 10 );
    		}
    
    		if ( !$socket || !$OK )
    		{
    			$this->error[] = "Can't create socket connection to $this->remote_host:$this->remote_port.";
    			return 0;
    		}
    
    		// if we have a username and password, add the header
    		if ( isset($this->remote_uname) && isset($this->remote_passwd) )
    		{
    			$array_headers['Authorization'] = 'Basic '.base64_encode("$this->remote_uname:$this->remote_passwd");
    		}
    
    		// for DA skins: if $this->remote_passwd is NULL, try to use the login key system
    		if ( isset($this->remote_uname) && $this->remote_passwd == NULL )
    		{
    			$array_headers['Cookie'] = "session={$_SERVER['SESSION_ID']}; key={$_SERVER['SESSION_KEY']}";
    		}
    
    		// if method is POST, add content length & type headers
    		if ( $this->method == 'POST' )
    		{
    			$array_headers['Content-type'] = 'application/x-www-form-urlencoded';
    			$array_headers['Content-length'] = strlen($content);
    		}
    		// else method is GET or HEAD. we don't support anything else right now.
    		else
    		{
    			if ($content)
    			{
    				$request .= "?$content";
    			}
    		}
    
    		// prepare query
    		$query = "$this->method $request HTTP/1.0\r\n";
    		foreach ( $array_headers as $key => $value )
    		{
    			$query .= "$key: $value\r\n";
    		}
    		$query .= "\r\n";
    
    		// if POST we need to append our content
    		if ( $this->method == 'POST' && $content )
    		{
    			$query .= "$content\r\n\r\n";
    		}
    
    		// query connection
    		if ($this->bind_host)
    		{
    			socket_write($socket,$query);
    
    			// now load results
    			while ( $out = socket_read($socket,2048) )
    			{
    				$this->result .= $out;
    			}
    		}
    		else
    		{
    			fwrite( $socket, $query, strlen($query) );
    
    			// now load results
    			$this->lastTransferSpeed = 0;
    			$status = socket_get_status($socket);
    			$startTime = time();
    			$length = 0;
    			$prevSecond = 0;
    			while ( !feof($socket) && !$status['timed_out'] )
    			{
    				$chunk = fgets($socket,1024);
    				$length += strlen($chunk);
    				$this->result .= $chunk;
    
    				$elapsedTime = time() - $startTime;
    
    				if ( $elapsedTime > 0 )
    				{
    					$this->lastTransferSpeed = ($length/1024)/$elapsedTime;
    				}
    
    				if ( $doSpeedCheck > 0 && $elapsedTime > 5 && $this->lastTransferSpeed < $doSpeedCheck )
    				{
    					$this->warn[] = "kB/s for last 5 seconds is below 50 kB/s (~".( ($length/1024)/$elapsedTime )."), dropping connection...";
    					$this->result_status_code = 503;
    					break;
    				}
    
    			}
    
    			if ( $this->lastTransferSpeed == 0 )
    			{
    				$this->lastTransferSpeed = $length/1024;
    			}
    
    		}
    
    		list($this->result_header,$this->result_body) = split("\r\n\r\n",$this->result,2);
    
    		if ($this->bind_host)
    		{
    			socket_close($socket);
    		}
    		else
    		{
    			fclose($socket);
    		}
    
    		$this->query_cache[] = $query;
    
    
    		$headers = $this->fetch_header();
    
    		// what return status did we get?
    		if (!$this->result_status_code)
    		{
    			preg_match("#HTTP/1\.. (\d+)#",$headers[0],$matches);
    			$this->result_status_code = $matches[1];
    		}
    
    		// did we get the full file?
    		if ( !empty($headers['content-length']) && $headers['content-length'] != strlen($this->result_body) )
    		{
    			$this->result_status_code = 206;
    		}
    
    		// now, if we're being passed a location header, should we follow it?
    		if ($this->doFollowLocationHeader)
    		{
    			if ($headers['location'])
    			{
    				$this->redirectURL = $headers['location'];
    				$this->query($headers['location']);
    			}
    		}
    
    	}
    
    	function getTransferSpeed()
    	{
    		return $this->lastTransferSpeed;
    	}
    
    	/**
    	 * The quick way to get a URL's content :)
    	 *
    	 * @param string URL
    	 * @param boolean return as array? (like PHP's file() command)
    	 * @return string result body
    	 */
    	function get($location, $asArray = FALSE )
    	{
    		$this->query($location);
    
    		if ( $this->get_status_code() == 200 )
    		{
    			if ($asArray)
    			{
    				return split("\n",$this->fetch_body());
    			}
    
    			return $this->fetch_body();
    		}
    
    		return FALSE;
    	}
    
    	/**
    	 * Returns the last status code.
    	 * 200 = OK;
    	 * 403 = FORBIDDEN;
    	 * etc.
    	 *
    	 * @return int status code
    	 */
    	function get_status_code()
    	{
    		return $this->result_status_code;
    	}
    
    	/**
    	 * Adds a header, sent with the next query.
    	 *
    	 * @param string header name
    	 * @param string header value
    	 */
    	function add_header($key,$value)
    	{
    		$this->extra_headers[$key] = $value;
    	}
    
    	/**
    	 * Clears any extra headers.
    	 *
    	 */
    	function clear_headers()
    	{
    		$this->extra_headers = array();
    	}
    
    	/**
    	 * Return the result of a query.
    	 *
    	 * @return string result
    	 */
    	function fetch_result()
    	{
    		return $this->result;
    	}
    
    	/**
    	 * Return the header of result (stuff before body).
    	 *
    	 * @param string (optional) header to return
    	 * @return array result header
    	 */
    	function fetch_header( $header = '' )
    	{
    		$array_headers = split("\r\n",$this->result_header);
    
    		$array_return = array( 0 => $array_headers[0] );
    		unset($array_headers[0]);
    
    		foreach ( $array_headers as $pair )
    		{
    			list($key,$value) = split(": ",$pair,2);
    			$array_return[strtolower($key)] = $value;
    		}
    
    		if ( $header != '' )
    		{
    			return $array_return[strtolower($header)];
    		}
    
    		return $array_return;
    	}
    
    	/**
    	 * Return the body of result (stuff after header).
    	 *
    	 * @return string result body
    	 */
    	function fetch_body()
    	{
    		return $this->result_body;
    	}
    
    	/**
    	 * Return parsed body in array format.
    	 *
    	 * @return array result parsed
    	 */
    	function fetch_parsed_body()
    	{
    		parse_str($this->result_body,$x);
    		return $x;
    	}
    
    }
    
    ?>
     
  2. zerg

    zerg Administrator Команда форума

    Регистр.:
    18 июл 2008
    Сообщения:
    4.254
    Симпатии:
    3
    описание:
    Функция мониторинга, предотвращения sql иньекций, с записью в лог файл.

    пример использования:
    Код:
    $limits =$_GET['limits'];
    $security=security($limits);
    if($security != FALSE) { throwError(); }  

    Код:
    <?
    function throwError() { 
                    die("Error! \n\n"); 
                               }
    
    function security($mainfu){
    $security = strpbrk($mainfu, '\'\"><.;][}{-+=*\\/)('); 
    if($security != FALSE){
    $fd=fopen("hak.txt","a");
    $admainfu .= $_SERVER['PHP_SELF'];
    $admainfu .= "?";
    $admainfu .= $_SERVER['QUERY_STRING'];
    //$admainfu .= $mainfu;
    $admainfu .= " ";
    $admainfu .= date ('Y-m-d');
    $admainfu .= " ";
    $admainfu .= strftime('%H:%M:%S',time());
    $admainfu .= " ";
    $admainfu .= $_SERVER["REMOTE_ADDR"];
    $admainfu .= "\n";
    fwrite($fd, $admainfu);
    fclose($fd);
    } 
    return $security;          
    }
    ?>
     
  3. maximus

    maximus Member

    Регистр.:
    23 апр 2009
    Сообщения:
    252
    Симпатии:
    0
    описание:
    Проверка URL на корректность

    Код:
    <?php
    //при желании можно подредактировать список доменов
    
    function check_url($url) {
        if (preg_match("/^((www.)?([\w, -]+.)(com|net|org|info|biz|spb\.ru|msk\.ru|com\.ru|org\.ru|net\.ru|ru|su|us|bz|ws))$/", $url)) {
            return true;
        }
        return false;
    }
    ?>
    


    описание:
    Проверка на корректность адреса электронной почты

    Код:
    <?php
    function check_email($email) {
        if (preg_match("%^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z])+$%", $email)) {
            return true;
        }
        return false;
    }
    ?>
    
     
  4. maximus

    maximus Member

    Регистр.:
    23 апр 2009
    Сообщения:
    252
    Симпатии:
    0
    описание:
    Проверка присутствия в тексте только русских букв

    Код:
    <?php
    //иногда пригождается при проверке данных из форм
    
    function check_rus($str) {
        setlocale(LC_CTYPE, "ru_RU.CP1251");
        if (preg_match("/^([а-я А-Я]+)$/", $str)) {
            return true;
        }
        return false;
    }
    ?>
    


    описание:
    Проверка присутствия в тексте только латинских букв

    Код:
    <?php
    //иногда пригождается при проверке данных из форм
    
    function check_lat($str) {
        if (preg_match("/^([a-z A-Z]+)$/", $str)) {
            return true;
        }
        return false;
    }
    ?>
    


    описание:
    Подготовка строки к занесению в базу данных

    Код:
    <?php
    function prepare_string($str) {
        // удаляем лишние пробелы
        $str = preg_replace("% +%", " ", $str);
        // удаляем начальные и конечные пробелы
        $str = trim($str);
        // удаляем одинарные кавычки
        $str = str_replace("'", "", $str);
        // заменяем двойные кавычки на &quot;
        $str = str_replace("\"", "&quot;", $str);
        return $str
    }
    ?>
    
     
  5. maximus

    maximus Member

    Регистр.:
    23 апр 2009
    Сообщения:
    252
    Симпатии:
    0
    описание:
    перевод в большой или маленький регистр

    код:
    PHP:
    # параметры функции: текст, количество символов начиная с первого 
    function strtolower_ru($text,$count=false) { 
        
    $alfavitlover = array('ё','й','ц','у','к','е','н','г''ш','щ','з','х','ъ','ф','ы','в''а','п','р','о','л','д','ж','э''я','ч','с','м','и','т','ь','б','ю'); 
        
    $alfavitupper = array('Ё','Й','Ц','У','К','Е','Н','Г''Ш','Щ','З','Х','Ъ','Ф','Ы','В''А','П','Р','О','Л','Д','Ж','Э''Я','Ч','С','М','И','Т','Ь','Б','Ю'); 
       if (
    $count!=false){ 
         return 
    str_replace($alfavitupper,$alfavitlover,strtolower($text)); 
       } else { 
         
    $text[$count] = str_replace($alfavitupper,$alfavitlover,strtolower($text[$count])); 
         return 
    $text
       } 

     
    function 
    strtoupper_ru($text,$count=false) { 
        
    $alfavitlover = array('ё','й','ц','у','к','е','н','г''ш','щ','з','х','ъ','ф','ы','в''а','п','р','о','л','д','ж','э''я','ч','с','м','и','т','ь','б','ю'); 
        
    $alfavitupper = array('Ё','Й','Ц','У','К','Е','Н','Г''Ш','Щ','З','Х','Ъ','Ф','Ы','В''А','П','Р','О','Л','Д','Ж','Э''Я','Ч','С','М','И','Т','Ь','Б','Ю'); 
       if (
    $count!=false){ 
         return 
    str_replace($alfavitlover,$alfavitupper,strtoupper($text));  
       } else { 
         
    $text[$count] = str_replace($alfavitlover,$alfavitupper,strtoupper($text[$count])); 
         return 
    $text
       } 

    print 
    strtolower_ru("Привет",0); // Результат: привет 
    print strtoupper_ru("привет",0);  // Результат: Привет
     
  6. maximus

    maximus Member

    Регистр.:
    23 апр 2009
    Сообщения:
    252
    Симпатии:
    0
    Описание:
    обрезание и уменьшения изображения до заданного размера.


    $padding// отступ, отрежется от изображения перед уменьшением.
    $horizontal_align, $vertical_align// положение вырезаемого участка, по умолчанию вырезается центральная часть

    Код:
    PHP:
    function resize_and_crop_image($filename,  $width200$height 200$jpeg_quality 80$horizontal_align 0$vertical_align 0$padding 0) { 
        if (
    function_exists('exif_imagetype')) { 
            
    $img_type exif_imagetype($filename); 
        } else { 
            list(
    $img_width$img_height$img_type$img_atr) = getimagesize($filename); 
        } 
        switch (
    $img_type) { 
            case 
    IMAGETYPE_GIF
                
    $image_create 'imagecreatefromgif'
                
    $image_output 'imagegif'
                break; 
     
            case 
    IMAGETYPE_JPEG
                
    $image_create 'imagecreatefromjpeg'
                
    $image_output 'imagejpeg'
                break; 
     
            case 
    IMAGETYPE_PNG
                
    $image_create 'imagecreatefrompng'
                
    $image_output 'imagepng'
                break; 
     
            default: 
                
    trigger_error('resize_image: Unknown image type - '.$img_typeE_USER_NOTICE); 
                return 
    FALSE
        } 
        if (!
    function_exists($image_create) || !function_exists($image_output)) { 
            
    trigger_error('resize_image: Required images handling functions are not available'E_USER_NOTICE); 
            return 
    FALSE
        } 
        
    $img $image_create($filename); 
        if (
    function_exists('imageantialias')) { 
            
    imageantialias($imgtrue); 
        } 
        if (
    $img) { 
            
    $source_width  imagesx($img); 
            
    $source_height imagesy($img); 
            
    $scale  min($source_width/$width$source_height/$height); 
            
    $new_width  floor($scale*$width); 
            
    $new_height floor($scale*$height); 
            
    $src_x 0
            
    $src_y 0
            if (
    $padding 1){ 
                
    $padding_x floor(  ($new_width  max($width$new_width $padding)) / ); 
                
    $padding_y floor(  ($new_height max($height$new_height $padding)) / 2); 
            } else if (
    $padding 0) { 
                
    $padding_x floor(  ($new_width  max($widthfloor($new_width*($padding) ))) / ); 
                
    $padding_y floor(  ($new_height  max($heightfloor($new_height*($padding) ))) / ); 
            } else { 
                
    $padding_x 0
                
    $padding_y 0
            } 
            
    $new_width  $new_width  $padding_x*2
            
    $new_height $new_height $padding_y*2
            
    $src_x      $padding_x
            
    $src_y      $padding_y
     
            if (
    $padding>0){ 
                
    $horizontal_crop    $source_width  $new_width $padding_x*2
                
    $vertical_crop      $source_height $new_height $padding_y*2
            } else { 
                
    $horizontal_crop    $source_width  $new_width
                
    $vertical_crop      $source_height $new_height
            } 
            if (
    $horizontal_crop){ 
                if (empty(
    $horizontal_align)){ 
                    
    $horizontal_align 'center'
                } 
                switch(
    $horizontal_align){ 
                    case 
    'left'
                        break; 
     
                    case 
    'right'
                        
    $src_x      += $horizontal_crop
                        break; 
     
                    case 
    'center'
                        
    $src_x      += floor($horizontal_crop/2); 
                        break; 
     
                    default: 
                        if (
    is_numeric($horizontal_align) && intval($horizontal_align)>0){ 
                            
    $horizontal_crop min($horizontal_cropintval($horizontal_align)); 
                            
    $src_x      += $horizontal_crop
                        } else { 
                            
    $src_x      += floor($horizontal_crop/2); 
                        } 
                        break; 
                } 
            } 
            if (
    $vertical_crop){ 
                if (empty(
    $vertical_align)){ 
                    
    $vertical_align 'center'
                } 
                switch(
    $vertical_align){ 
                    case 
    'top'
                        break; 
     
                    case 
    'bottom'
                        
    $src_y      += $vertical_crop
                        break; 
     
                    case 
    'center'
                    case 
    'middle'
                        
    $src_y      += floor($vertical_crop/2); 
                        break; 
     
                    default: 
                        if (
    is_numeric($vertical_align) && intval($vertical_align)>0){ 
                            
    $vertical_crop min($vertical_cropintval($vertical_align)); 
                            
    $src_y      += $vertical_crop
                        } else { 
                            
    $src_y      += floor($vertical_crop/2); 
                        } 
                        break; 
                } 
            } 
            if (
    $scale 1) { 
                if( 
    function_exists ('imagecreatetruecolor') ) { 
                    
    $tmp_img imagecreatetruecolor($width$height); 
                } else { 
                    
    $tmp_img imagecreate($width$height); 
                } 
                if (
    function_exists('imagecopyresampled')) { 
                    
    imagecopyresampled($tmp_img$img00$src_x$src_y$width$height$new_width$new_height); 
                } else { 
                    
    imagecopyresized($tmp_img$img00$src_x$src_y$width$height$new_width$new_height); 
                } 
                
    imagedestroy($img); 
                
    $img $tmp_img
            } 
        } 
        
    // Create error image if necessary 
        
    if (!$img) { 
            
    $img imagecreate($max_width$max_height); 
            
    $bgc imagecolorallocate ($img25500); 
            
    $tc  imagecolorallocate ($img255255255); 
            
    imagefilledrectangle ($img00$max_width$max_height$bgc); 
            
    imagestring ($img3310"Error"$tc); 
        } 
        
    $img $image_output($img$filename$jpeg_quality); 
        return 
    TRUE
    }
     
  7. zerg

    zerg Administrator Команда форума

    Регистр.:
    18 июл 2008
    Сообщения:
    4.254
    Симпатии:
    3
    Описание:
    функция отделяет хост, тоесть из blog.forumseo.org выделит forumseo.org

    код:
    PHP:
    function vhost($as)
    {
    if(
    preg_match("/[0-9A-Za-z_]+\.([0-9A-Za-z_^.]+\.[A-Za-z]{2,4})/is"$as$otv2)){
    return 
    $otv2[1];
    }else{
    return 
    $as;
    }
    }


    Описание:
    функция одновременно определяет ping и ip адресс сервера

    код:
    PHP:
    function getmicrotime(){ 
    list(
    $usec$sec) = explode(" ",microtime()); 
    return ((float)
    $usec + (float)$sec); 
    }
    function 
    ping($url)
    {

    $time_start getmicrotime(); 
    $ip=gethostbyname($url);
    $time_end getmicrotime(); 
    $time=$time_end $time_start;

    $time1=intval($time*1000);
    if(
    $time1>1000 or $time1==0)
    $yes='<font color="#FF0000">'.$time1.'</font>';else $yes=$time1;
    $yes.=":::";
    $yes.=$ip;
    return 
    $yes;
    }


    Описание:
    функция определяет движок сайта

    код:
    PHP:
    function dvig($url)
    {
    $str=file_get_contents("http://$url/index.php");


    preg_match('|<meta name="generator" content="(.*)" />|U',$str,$ok3);
    $ok3=$ok3[1];


    return 
    $ok3;
    };
     
  8. zerg

    zerg Administrator Команда форума

    Регистр.:
    18 июл 2008
    Сообщения:
    4.254
    Симпатии:
    3
    функции google

    Описание:
    функция определяем количество проиндексированных страниц google


    код:
    PHP:
    function ing($url)// определяем количество проиндексированных страниц
    {
    $str=file_get_contents("http://www.google.com/search?&q=allinurl:$url/+site:$url");
    if(
    $str==false){
    $ing=0;
    }else{

    $find=preg_match("/of(.*?) <b>(.*?)<\/b> from/si"$str$ing);
    if (
    $find<1){
    $ing=0;
    }else{
    $ing=$ing[2];

    $ing=str_replace(","""$ing);
    }
    }
    return 
    $ing;
    };

    описание:
    определяет наличие в dmoz

    код:
    PHP:
    function dmoz($url)// определяем наличие в каталоге
    {
    $str=file_get_contents("http://search.dmoz.org/cgi-bin/search?search=u%3A$url");
    if(
    $str==false){
    $dmoz=0;
    }else{
    $find=preg_match("/No (.*?) results found/si"$str$dmoz);
    if (
    $find==1){
    $dmoz=0;
    }else{
    $dmoz=1;

    }
    }
    return 
    $dmoz;
    };

    описание:
    определяет pr гугла

    код:
    PHP:
    function pr($url)// определяем пр
    {
    $str=file_get_contents("http://www.google.com/search?client=navclient-auto&ch=6-1517449996&features=Rank&q=info:$url");
    if(
    $str==false){
    $pr=0;
    }else{
    $pr=explode(':',$str);
    $pr=$pr[2];
    }
    return 
    $pr;
    };
     
  9. zerg

    zerg Administrator Команда форума

    Регистр.:
    18 июл 2008
    Сообщения:
    4.254
    Симпатии:
    3
    Описание:
    Построение графика


    Скриншот:
    [​IMG]


    код:
    PHP:
    <?
    // Задаем входные данные ############################################

    // Входные данные - три ряда, содержащие случайные данные.
    // Деление на 2 и 3 взято для того чтобы передние ряды не 
    // пересекались

    // Массив $DATA["x"] содержит подписи по оси "X"

    $DATA=Array();
    for (
    $i=0;$i<20;$i++) {
        
    $DATA[0][]=rand(0,100);
        
    $DATA[1][]=rand(0,100)/2;
        
    $DATA[2][]=rand(0,100)/3;
        
    $DATA["x"][]=$i;
        }

    // Задаем изменяемые значения #######################################

    // Размер изображения

    $W=16384;
    $H=8192;

    // Отступы
    $MB=20;  // Нижний
    $ML=8;   // Левый 
    $M=5;    // Верхний и правый отступы.
             // Они меньше, так как там нет текста

    // Ширина одного символа
    $LW=imagefontwidth(2);

    // Подсчитаем количество элементов (точек) на графике
    $count=count($DATA[0]);
    if (
    count($DATA[1])>$count$count=count($DATA[1]);
    if (
    count($DATA[2])>$count$count=count($DATA[2]);

    if (
    $count==0$count=1;

    // Сглаживаем графики ###############################################
    if ($_GET["smooth"]==1) {

        
    // Добавим по две точки справа и слева от графиков. Значения в
        // этих точках примем равными крайним. Например, точка если
        // y[0]=16 и y[n]=17, то y[1]=16 и y[-2]=16 и y[n+1]=17 и y[n+2]=17

        // Такое добавление точек необходимо для сглаживания точек
        // в краях графика

        
    for ($j=0;$j<3;$j++) {
            
    $DATA[$j][-1]=$DATA[$j][-2]=$DATA[$j][0];
            
    $DATA[$j][$count]=$DATA[$j][$count+1]=$DATA[$j][$count-1];
            }

        
    // Сглаживание графики методом усреднения соседних значений

        
    for ($i=0;$i<$count;$i++) {
            for (
    $j=0;$j<3;$j++) {
                
    $DATA[$j][$i]=($DATA[$j][$i-1]+$DATA[$j][$i-2]+
                               
    $DATA[$j][$i]+$DATA[$j][$i+1]+
                               
    $DATA[$j][$i+2])/5;
                }
            }
        }


    // Подсчитаем максимальное значение
    $max=0;

    for (
    $i=0;$i<$count;$i++) {
        
    $max=$max<$DATA[0][$i]?$DATA[0][$i]:$max;
        
    $max=$max<$DATA[1][$i]?$DATA[1][$i]:$max;
        
    $max=$max<$DATA[2][$i]?$DATA[2][$i]:$max;
        }

    // Увеличим максимальное значение на 10% (для того, чтобы столбик
    // соответствующий максимальному значение не упирался в в границу
    // графика
    $max=intval($max+($max/10));

    // Количество подписей и горизонтальных линий
    // сетки по оси Y.
    $county=10;

    // Работа с изображением ############################################

    // Создадим изображение
    $im=imagecreate($W,$H);

    // Цвет фона (белый)
    $bg[0]=imagecolorallocate($im,255,255,255);

    // Цвет задней грани графика (светло-серый)
    $bg[1]=imagecolorallocate($im,231,231,231);

    // Цвет левой грани графика (серый)
    $bg[2]=imagecolorallocate($im,212,212,212);

    // Цвет сетки (серый, темнее)
    $c=imagecolorallocate($im,184,184,184);

    // Цвет текста (темно-серый)
    $text=imagecolorallocate($im,136,136,136);

    // Цвета для линий графиков
    $bar[2]=imagecolorallocate($im,191,65,170);
    $bar[0]=imagecolorallocate($im,161,155,0);
    $bar[1]=imagecolorallocate($im,65,170,191);

    $text_width=0;
    // Вывод подписей по оси Y
    for ($i=1;$i<=$county;$i++) {
        
    $strl=strlen(($max/$county)*$i)*$LW;
        if (
    $strl>$text_width$text_width=$strl;
        }

    // Подравняем левую границу с учетом ширины подписей по оси Y
    $ML+=$text_width;

    // Посчитаем реальные размеры графика (за вычетом подписей и
    // отступов)
    $RW=$W-$ML-$M;
    $RH=$H-$MB-$M;

    // Посчитаем координаты нуля
    $X0=$ML;
    $Y0=$H-$MB;

    $step=$RH/$county;

    // Вывод главной рамки графика
    imagefilledrectangle($im$X0$Y0-$RH$X0+$RW$Y0$bg[1]);
    imagerectangle($im$X0$Y0$X0+$RW$Y0-$RH$c);

    // Вывод сетки по оси Y
    for ($i=1;$i<=$county;$i++) {
        
    $y=$Y0-$step*$i;
        
    imageline($im,$X0,$y,$X0+$RW,$y,$c);
        
    imageline($im,$X0,$y,$X0-($ML-$text_width)/4,$y,$text);
        }

    // Вывод сетки по оси X
    // Вывод изменяемой сетки
    for ($i=0;$i<$count;$i++) {
        
    imageline($im,$X0+$i*($RW/$count),$Y0,$X0+$i*($RW/$count),$Y0,$c);
        
    imageline($im,$X0+$i*($RW/$count),$Y0,$X0+$i*($RW/$count),$Y0-$RH,$c);
        }

    // Вывод линий графика
    $dx=($RW/$count)/2;

    $pi=$Y0-($RH/$max*$DATA[0][0]);
    $po=$Y0-($RH/$max*$DATA[1][0]);
    $pu=$Y0-($RH/$max*$DATA[2][0]);
    $px=intval($X0+$dx);

    for (
    $i=1;$i<$count;$i++) {
        
    $x=intval($X0+$i*($RW/$count)+$dx);

        
    $y=$Y0-($RH/$max*$DATA[0][$i]);
        
    imageline($im,$px,$pi,$x,$y,$bar[0]);
        
    $pi=$y;

        
    $y=$Y0-($RH/$max*$DATA[1][$i]);
        
    imageline($im,$px,$po,$x,$y,$bar[1]);
        
    $po=$y;

        
    $y=$Y0-($RH/$max*$DATA[2][$i]);
        
    imageline($im,$px,$pu,$x,$y,$bar[2]);
        
    $pu=$y;
        
    $px=$x;
        }

    // Уменьшение и пересчет координат
    $ML-=$text_width;

    // Вывод подписей по оси Y
    for ($i=1;$i<=$county;$i++) {
        
    $str=($max/$county)*$i;
        
    imagestring($im,2$X0-strlen($str)*$LW-$ML/4-2,$Y0-$step*$i-
                           
    imagefontheight(2)/2,$str,$text);
        }

    // Вывод подписей по оси X
    $prev=100000;
    $twidth=$LW*strlen($DATA["x"][0])+6;
    $i=$X0+$RW;

    while (
    $i>$X0) {
        if (
    $prev-$twidth>$i) {
            
    $drawx=$i-($RW/$count)/2;
            if (
    $drawx>$X0) {
                
    $str=$DATA["x"][round(($i-$X0)/($RW/$count))-1];
                
    imageline($im,$drawx,$Y0,$i-($RW/$count)/2,$Y0+5,$text);
                
    imagestring($im,2$drawx-(strlen($str)*$LW)/2$Y0+7,$str,$text);
                }
            
    $prev=$i;
            }
        
    $i-=$RW/$count;
        }

    header("Content-Type: image/png");

    // Генерация изображения
    ImagePNG($im);

    imagedestroy($im);
    ?>
     
  10. zerg

    zerg Administrator Команда форума

    Регистр.:
    18 июл 2008
    Сообщения:
    4.254
    Симпатии:
    3
    Описание:
    построение гистограммы


    Скриншот:
    [​IMG]


    код:
    PHP:
    <?
    // Задаем входные данные ############################################

    // Входные данные - три ряда, содержащие случайные данные.
    // Деление на 2 и 3 взято для того чтобы передние ряды не 
    // загораживали задние.

    // Массив $DATA["x"] содержит подписи по оси "X"

    $DATA=Array();
    for (
    $i=0;$i<20;$i++) {
        
    $DATA[0][]=rand(0,100*$i);
        
    $DATA[1][]=rand(0,100*$i)/2;
        
    $DATA[2][]=rand(0,100*$i)/3;
        
    $DATA["x"][]=$i;
        }

    // Функция вывода псевдо-трехмерного куба ###########################

    // $im - идентификатор изображения
    // $x,$y - координаты верхнего левого угла куба
    // $w - ширина куба
    // $h - высота куба
    // $dx - смещение задней грани куба по оси X
    // $dy - смещение задней грани куба по оси Y
    // $c1,$c2,c3 - цвета видимых граней куба

    function imagebar($im,$x,$y,$w,$h,$dx,$dy,$c1,$c2,$c3) {

        if (
    $dx>0) {
            
    imagefilledpolygon($im,
                Array(
                    
    $x$y-$h,
                    
    $x+$w$y-$h,
                    
    $x+$w+$dx$y-$h-$dy,
                    
    $x+$dx$y-$dy-$h
                
    ), 4$c1);
        
            
    imagefilledpolygon($im,
                Array(
                    
    $x+$w$y-$h,
                    
    $x+$w$y,
                    
    $x+$w+$dx$y-$dy,
                    
    $x+$w+$dx$y-$dy-$h
                
    ), 4$c3);
            }

        
    imagefilledrectangle($im$x$y-$h$x+$w$y$c2);
        }

    // Задаем изменяемые значения #######################################

    // Размер изображения
    $W=500;
    $H=300;

    // Псевдо-глубина графика
    $DX=30;
    $DY=20;

    // Отступы
    $MB=20// Нижний
    $ML=10// Левый 
    $M=5;   // Верхний и правый отступы. Они меньше, так как там нет текста

    // Ширина одного символа
    $LW=imagefontwidth(2);

    // Подсчитаем количество элементов (столбиков) на графике
    $count=count($DATA[0]);
    if (
    count($DATA[1])>$count$count=count($DATA[1]);
    if (
    count($DATA[2])>$count$count=count($DATA[2]);

    // Подсчитаем максимальное значение
    $max=0;
    for (
    $i=0;$i<$count;$i++) {
        
    $max=$max<$DATA[0][$i]?$DATA[0][$i]:$max;
        
    $max=$max<$DATA[1][$i]?$DATA[1][$i]:$max;
        
    $max=$max<$DATA[2][$i]?$DATA[2][$i]:$max;
        }

    // Увеличим максимальное значение на 10% (для того, чтобы столбик
    // соответствующий максимальному значение не упирался в в границу
    // графика
    $max=intval($max+($max/10));

    // Работа с изображением ############################################

    // Создадим изображения
    $im=imagecreate($W,$H);

    // Задаем основные цвета 

    // Цвет фона (белый)
    $bg[0]=imagecolorallocate($im,255,255,255);

    // Цвет задней грани графика (светло-серый)
    $bg[1]=imagecolorallocate($im,231,231,231);

    // Цвет левой грани графика (серый)
    $bg[2]=imagecolorallocate($im,212,212,212);

    // Цвет сетки (серый, темнее)
    $c=imagecolorallocate($im,184,184,184);

    // Цвет текста (темно-серый)
    $text=imagecolorallocate($im,136,136,136);

    // Цвета для столбиков
    $bar[2][0]=imagecolorallocate($im,255,128,234);
    $bar[2][1]=imagecolorallocate($im,222,95,201);
    $bar[2][2]=imagecolorallocate($im,191,65,170);
    $bar[0][0]=imagecolorallocate($im,222,214,0);
    $bar[0][1]=imagecolorallocate($im,181,187,65);
    $bar[0][2]=imagecolorallocate($im,161,155,0);
    $bar[1][0]=imagecolorallocate($im,128,234,255);
    $bar[1][1]=imagecolorallocate($im,95,201,222);
    $bar[1][2]=imagecolorallocate($im,65,170,191);

    // Количество подписей и горизонтальных линий
    // сетки по оси Y.
    $county=10;

    // Подравняем левую границу с учетом ширины подписей по оси Y
    $text_width=strlen($max)*$LW;
    $ML+=$text_width;

    // Вывод фона графика
    imageline($im$ML$M+$DY$ML$H-$MB$c);
    imageline($im$ML$M+$DY$ML+$DX$M$c);
    imageline($im$ML$H-$MB$ML+$DX$H-$MB-$DY$c);
    imageline($im$ML$H-$MB$W-$M-$DX$H-$MB$c);
    imageline($im$W-$M-$DX$H-$MB$W-$M$H-$MB-$DY$c);

    imagefilledrectangle($im$ML+$DX$M$W-$M$H-$MB-$DY$bg[1]);
    imagerectangle($im$ML+$DX$M$W-$M$H-$MB-$DY$c);

    imagefill($im$ML+1$H/2$bg[2]);

    // Вывод неизменяемой сетки (горизонтальные линии на
    // нижней грани и вертикальные линии сетки на левой
    // грани
    for ($i=1;$i<3;$i++) {
        
    imageline($im$ML+$i*intval($DX/3),
                       
    $M+$DY-$i*intval($DY/3),
                       
    $ML+$i*intval($DX/3),
                       
    $H-$MB-$i*intval($DY/3),
                       
    $c);
        
    imageline($im$ML+$i*intval($DX/3),
                       
    $H-$MB-$i*intval($DY/3),
                       
    $W-$M-$DX+$i*intval($DX/3),
                       
    $H-$MB-$i*intval($DY/3),
                       
    $c);
        }

    // Пересчитаем размеры графика с учетом подписей и отступов
    $RW=$W-$ML-$M-$DX;
    $RH=$H-$MB-$M-$DY;

    // Координаты нулевой точки графика
    $X0=$ML+$DX;
    $Y0=$H-$MB-$DY;

    // Вывод изменяемой сетки (вертикальные линии сетки на нижней грани графика
    // и вертикальные линии на задней грани графика)
    for ($i=0;$i<$count;$i++) {
        
    imageline($im,$X0+$i*($RW/$count),$Y0,$X0+$i*($RW/$count)-$DX,$Y0+$DY,$c);
        
    imageline($im,$X0+$i*($RW/$count),$Y0,$X0+$i*($RW/$count),$Y0-$RH,$c);
        }

    // Горизонтальные линии сетки задней и левой граней.
    $step=$RH/$county;
    for (
    $i=0;$i<=$county;$i++) {
        
    imageline($im,$X0,$Y0-$step*$i,$X0+$RW,$Y0-$step*$i,$c);
        
    imageline($im,$X0,$Y0-$step*$i,$X0-$DX,$Y0-$step*$i+$DY,$c);
        
    imageline($im,$X0-$DX,$Y0-$step*$i+$DY,
                      
    $X0-$DX-($ML-$text_width)/4,$Y0-$step*$i+$DY,$text);
        }

    // Вывод кубов для всех трех рядов
    for ($i=0;$i<$count;$i++) 
        
    imagebar($im$X0+$i*($RW/$count)+4-1*intval($DX/3),
                      
    $Y0+1*intval($DY/3),
                      
    intval($RW/$count)-4,
                      
    $RH/$max*$DATA[0][$i],
                      
    intval($DX/3)-5,
                      
    intval($DY/3)-3,
                      
    $bar[0][0], $bar[0][1], $bar[0][2]);

    for (
    $i=0;$i<$count;$i++) 
        
    imagebar($im$X0+$i*($RW/$count)+4-2*intval($DX/3),
                      
    $Y0+2*intval($DY/3),
                      
    intval($RW/$count)-4,
                      
    $RH/$max*$DATA[1][$i],
                      
    intval($DX/3)-5,
                      
    intval($DY/3)-3,
                      
    $bar[1][0], $bar[1][1], $bar[1][2]);

    for (
    $i=0;$i<$count;$i++) 
        
    imagebar($im$X0+$i*($RW/$count)+4-3*intval($DX/3), 
                      
    $Y0+3*intval($DY/3),
                      
    intval($RW/$count)-4,
                      
    $RH/$max*$DATA[2][$i],
                      
    intval($DX/3)-5,
                      
    intval($DY/3)-3,
                      
    $bar[2][0], $bar[2][1], $bar[2][2]);

    // Вывод подписей по оси Y
    for ($i=1;$i<=$county;$i++) {
        
    $str=intval(($max/$county)*$i);
        
    imagestring($im,2$X0-$DX-strlen($str)*$LW-$ML/4-2,
                           
    $Y0+$DY-$step*$i-imagefontheight(2)/2,
                           
    $str,$text);
        }

    // Вывод подписей по оси X
    $prev=100000;
    $twidth=$LW*strlen($DATA["x"][0])+6;
    $i=$X0+$RW-$DX;

    while (
    $i>$X0-$DX) {
        if (
    $prev-$twidth>$i) {
            
    $drawx=$i+1-($RW/$count)/2;
            if (
    $drawx>$X0-$DX) {
                
    $str=$DATA["x"][round(($i-$X0+$DX)/($RW/$count))-1];
                
    imageline($im,$drawx,$Y0+$DY,$i+1-($RW/$count)/2,$Y0+$DY+5,$text);
                
    imagestring($im,2$drawx+1-(strlen($str)*$LW)/,$Y0+$DY+7,$str,$text);
                }
            
    $prev=$i;
            }
        
    $i-=$RW/$count;
        }

    header("Content-Type: image/png");

    // Генерация изображения
    ImagePNG($im)

    imagedestroy($im);
    ?>
     
  11. zerg

    zerg Administrator Команда форума

    Регистр.:
    18 июл 2008
    Сообщения:
    4.254
    Симпатии:
    3
    Алгоритм Шинглов

    класс определения уникальности текста в процентном соотношении по алгоритму Шинглов

    PHP:
    <?php
    class Shingles
    {
        
    /**
         * Массив параметров
         *
         * @var array
         */
     
        
    protected $_params = array();
     
        
    /**
         * Массив стоп-символов, которые будут удаленны из строки
         *
         * @var array
         */
     
        
    protected $_stopSymbols = array();
     
        
    /**
         * Массив стоп-слов, которые будут удаленны из строки
         *
         * @var array
         */
     
        
    protected $_stopWords = array();
     
        
    /**
         * Массив текстов для обработки
         *
         * @var array
         */
     
        
    protected $_texts = array();
     
        
    /**
         * Двухмерный массив шинглов
         *
         * @var array
         */
     
        
    protected $_shingles = array();
     
        
    /**
         * Метод выполняющий канонизацию строки. Сначала вырезаем из строки все
         * стоп-символы. Затем перебираем слова. Те которых нет в массиве стоп-слов,
         * оставляем. Приводим строку к нижнему регистру.
         *
         * @param string $string строка для канонизации
         * @return string "чистую" строку
         */
     
        
    protected function _canonizeString($string)
        {
            
    $result = array();
            
    $string str_replace($this->_stopSymbolsnull$string);
     
            foreach (
    explode(' '$string) as $word) {
                if (
    strlen($word) && !in_array($word$this->_stopWords)) {
                    
    $result[] = trim($word);
                }
            }
     
            return 
    strtolower(implode(' '$result));
        }
     
        
    /**
         * Выполняет канонизацию всех добавленных для обработки текстов
         *
         * @return object текущий объект
         */
     
        
    protected function _canonizeTexts()
        {
            if (empty(
    $this->_texts)) {
                return 
    $this;
            }
     
            foreach (
    $this->_texts as $key => $text) {
                
    $this->_texts[$key] = $this->_canonizeString($text);
            }
     
            return 
    $this;
        }
     
        
    /**
         * Создает массив шинглов строки
         *
         * @param string $string строка для обработки
         * @return array массив шиглов
         */
     
        
    protected function _getShinglesFromString($string)
        {
            if (!
    $this->getParam('length')) {
                throw new 
    Exception('Not found param of length');
            }
     
            
    $shingles = array();
            
    $length   intval($this->getParam('length'));
            
    $words    explode(' '$string);
     
            if (
    count($words) < $length) {
                return 
    $shingles;
            }
     
            for (
    $i 1$i <= count($words) - $length$i ++) {
                
    $shingles[] = md5(implode(' 'array_slice($words$i$length)));
            }
     
            return 
    $shingles;
        }
     
        
    /**
         * Создает массив шинглов для каждого текста
         *
         * @return array
         */
     
        
    protected function _setShingles()
        {
            foreach (
    $this->_texts as $text) {
                
    $this->_shingles[] = $this->_getShinglesFromString($text);
            }
     
            return 
    $this;
        }
     
        
    /**
         * Конструктор класса
         *
         * @param array $setting параметры для обработки текстов
         */
     
        
    public function __construct(array $setting = array())
        {
            if (isset(
    $setting['stop_symbols'])) {
                
    $this->setStopSymbols(explode(' '$setting['stop_symbols']));
            }
     
            if (isset(
    $setting['stop_words'])) {
                
    $this->setStopWords(explode(', '$setting['stop_words']));
            }
     
            if (isset(
    $setting['length'])) {
                
    $this->setParam('length'$setting['length']);
            }
        }
     
        
    /**
         * Определяет массив стоп-символов
         *
         * @param array $symbols массив стоп-символов
         * @return object текущий объект
         */
     
        
    public function setStopSymbols(array $symbols)
        {
            
    $this->_stopSymbols $symbols;
            return 
    $this;
        }
     
        
    /**
         * Возвращает массив стоп-символов
         *
         * @return array массив стоп-символов
         */
     
        
    public function getStopSymbols()
        {
            return 
    $this->_stopSymbols;
        }
     
        
    /**
         * Определяет массив стоп-слов
         *
         * @param array $words стоп-слова
         * @return object текущий объект
         */
     
        
    public function setStopWords(array $words)
        {
            
    $this->_stopWords $words;
            return 
    $this;
        }
     
        
    /**
         * Возвращает массив стоп-слов
         *
         * @return array массив стоп-слов
         */
     
        
    public function getStopWords()
        {
            return 
    $this->_stopWords;
        }
     
        
    /**
         * Возвращает параметр
         *
         * @param string $key ключ
         * @return mixed|null значение
         */
     
        
    public function getParam($key)
        {
            if (isset(
    $this->_params[$key])) {
                return 
    $this->_params[$key];
            }
     
            return 
    null;
        }
     
        
    /**
         * Возвращает массив всех параметров
         *
         * @return array массив всех параметров
         */
     
        
    public function getParams()
        {
            return 
    $this->_params;
        }
     
        
    /**
         * Определяет массив параметров
         *
         * @param array $params массив параметров
         * @return object текущий объект
         */
     
        
    public function setParams(array $params)
        {
            
    $this->_params $params;
            return 
    $this;
        }
     
        
    /**
         * Определяет параметр
         *
         * @param string $key ключ параметра
         * @param mixed $value значение параметра
         * @return object текущий объект
         */
     
        
    public function setParam($key$value)
        {
            
    $this->_params[$key] = $value;
            return 
    $this;
        }
     
        
    /**
         * Добавляет текст для проверки
         *
         * @param string $text текст
         * @return object текущий объект
         */
     
        
    public function addText($text)
        {
            
    $this->_texts[] = $text;
            return 
    $this;
        }
     
        
    /**
         * Проверяет двухмерный массив шинглов на уникальность
         *
         * @param array $shingles массив шинглов
         * @return int процент уникальности
         */
     
        
    public function compaire(array $shingles)
        {
            
    $same 0;
     
            foreach (
    $shingles[0] as $key => $shingle) {
                if (
    $shingle === $shingles[1][$key]) {
                    
    $same ++;
                }
            }
     
            return 
    round($same count($shingles[0]) * 1002);
        }
     
        
    /**
         * Возвращает массив шинглов для всех добавленных текстов
         *
         * @return array массив шинглов
         */
     
        
    public function getShigles()
        {
            return 
    $this->_canonizeTexts()->_setShingles()->_shingles;
        }
    }
     

     
    //автор Kirill Vlasov
    ?>
    использовать можно так, название файла подгружаемого класса shingles.php

    PHP:
    <?php

    echo 'Алгоритм Шинглов - Проверка 2х текстов
    <form method="POST" action="example.php">
        <!--webbot bot="SaveResults" U-File="fpweb:///_private/form_results.csv" S-Format="TEXT/CSV" S-Label-Fields="TRUE" -->
        <textarea rows="10" name="t1" cols="60"></textarea><br>
        <textarea rows="11" name="t2" cols="60"></textarea><br>
        
        <input type="submit" value="Submit" name="B1"></p>
    </form>

    '
    ;

    if(isset(
    $_POST['t1'])){
    require_once 
    dirname(__FILE__) . DIRECTORY_SEPARATOR 'shingles.php';

    setlocale(LC_CTYPE, array('ru_RU.CP1251''Russian_Russia.1251'));

    $setting  parse_ini_file(dirname(__FILE__) . DIRECTORY_SEPARATOR 'setting.ini');
    $shingles = new Shingles($setting);

    $shingles->addText($_POST['t1']);
    $shingles->addText($_POST['t2']);

    echo 
    'Тексты схожи на ' $shingles->compaire($shingles->getShigles()) . '%';
    }
    ?>
     
  12. zerg

    zerg Administrator Команда форума

    Регистр.:
    18 июл 2008
    Сообщения:
    4.254
    Симпатии:
    3
    Функция транслита, переводит русский текста в транслит

    PHP:
    <?php

      
    // функция превода текста с кириллицы в траскрипт

      
    function encodestring($st)

      {

        
    // Сначала заменяем "односимвольные" фонемы.

        
    $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",

        
    "abvgdeeziyklmnoprstufh'iei");

        
    $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",

        
    "ABVGDEEZIYKLMNOPRSTUFH'IEI");

        
    // Затем - "многосимвольные".

        
    $st=strtr($st

                        array(

                            
    "ж"=>"zh""ц"=>"ts""ч"=>"ch""ш"=>"sh"

                            
    "щ"=>"shch","ь"=>"""ю"=>"yu""я"=>"ya",

                            
    "Ж"=>"ZH""Ц"=>"TS""Ч"=>"CH""Ш"=>"SH"

                            
    "Щ"=>"SHCH","Ь"=>"""Ю"=>"YU""Я"=>"YA",

                            
    "ї"=>"i""Ї"=>"Yi""є"=>"ie""Є"=>"Ye"

                            
    )

                 );

        
    // Возвращаем результат.

        
    return $st;

      }
     
  13. zerg

    zerg Administrator Команда форума

    Регистр.:
    18 июл 2008
    Сообщения:
    4.254
    Симпатии:
    3
    Стеммер Портера (The Porter Stemming Algorithm)

    Описание:
    Алгоритм Стеммер Портера - позволяет выделить корневую, неизменяемую часть слова. Далее к корневой части можно прибавить подходящие окончания и суффиксы и получить различные словоформы. Подобные алгоритмы используются, например, в простых поисковых системах.

    PHP:
    <?
    class 
    Lingua_Stem_Ru 
    {
        var 
    $VERSION "0.02";
        var 
    $Stem_Caching 0;
        var 
    $Stem_Cache = array();
        var 
    $VOWEL '/аеиоуыэюя/';
        var 
    $PERFECTIVEGROUND '/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/';
        var 
    $REFLEXIVE '/(с[яь])$/';
        var 
    $ADJECTIVE '/(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|еых|ую|юю|ая|яя|ою|ею)$/';
        var 
    $PARTICIPLE '/((ивш|ывш|ующ)|((?<=[ая])(ем|нн|вш|ющ|щ)))$/';
        var 
    $VERB '/((ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))$/';
        var 
    $NOUN '/(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|и|ы|ь|ию|ью|ю|ия|ья|я)$/';
        var 
    $RVRE '/^(.*?[аеиоуыэюя])(.*)$/';
        var 
    $DERIVATIONAL '/[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+[аеиоуыэюя].*(?<=о)сть?$/';

        function 
    s(&$s$re$to)
        {
            
    $orig $s;
            
    $s preg_replace($re$to$s);
            return 
    $orig !== $s;
        }

        function 
    m($s$re)
        {
            return 
    preg_match($re$s);
        }

        function 
    stem_word($word
        {
            
    $word strtolower($word);
            
    $word strtr($word'ё''е');
            
    # Check against cache of stemmed words
            
    if ($this->Stem_Caching && isset($this->Stem_Cache[$word])) {
                return 
    $this->Stem_Cache[$word];
            }
            
    $stem $word;
            do {
              if (!
    preg_match($this->RVRE$word$p)) break;
              
    $start $p[1];
              
    $RV $p[2];
              if (!
    $RV) break;

              
    # Step 1
              
    if (!$this->s($RV$this->PERFECTIVEGROUND'')) {
                  
    $this->s($RV$this->REFLEXIVE'');

                  if (
    $this->s($RV$this->ADJECTIVE'')) {
                      
    $this->s($RV$this->PARTICIPLE'');
                  } else {
                      if (!
    $this->s($RV$this->VERB''))
                          
    $this->s($RV$this->NOUN'');
                  }
              }

              
    # Step 2
              
    $this->s($RV'/и$/''');

              
    # Step 3
              
    if ($this->m($RV$this->DERIVATIONAL))
                  
    $this->s($RV'/ость?$/''');

              
    # Step 4
              
    if (!$this->s($RV'/ь$/''')) {
                  
    $this->s($RV'/ейше?/''');
                  
    $this->s($RV'/нн$/''н'); 
              }

              
    $stem $start.$RV;
            } while(
    false);
            if (
    $this->Stem_Caching$this->Stem_Cache[$word] = $stem;
            return 
    $stem;
        }

        function 
    stem_caching($parm_ref
        {
            
    $caching_level = @$parm_ref['-level'];
            if (
    $caching_level) {
                if (!
    $this->m($caching_level'/^[012]$/')) {
                    die(
    __CLASS__ "::stem_caching() - Legal values are '0','1' or '2'. '$caching_level' is not a legal value");
                }
                
    $this->Stem_Caching $caching_level;
            }
            return 
    $this->Stem_Caching;
        }

        function 
    clear_stem_cache() 
        {
            
    $this->Stem_Cache = array();
        }
    }

    //$stemmer = new Lingua_Stem_Ru();
    //echo $stemmer->stem_word("характеризующую");


    ?>

    Пример использования:
    PHP:
    $stemmer = new Lingua_Stem_Ru(); 
    echo 
    $stemmer->stem_word("характеризующую");
     
  14. zerg

    zerg Administrator Команда форума

    Регистр.:
    18 июл 2008
    Сообщения:
    4.254
    Симпатии:
    3
    Класс авторизации пользователей

    Класс авторизации, немного переделал под выполнение запросов.

    Код:
    PHP:
    <?php
    /**
     * PHP Class to user access (login, register, logout, etc)
     * 
     * <code><?php
     * include('access.class.php');
     * $user = new flexibleAccess();
     * ? ></code>
     * 
     * For support issues please refer to the webdigity forums :
     *                http://www.webdigity.com/index.php/board,91.0.html
     * or the official web site:
     *                http://phpUserClass.com/
     * ==============================================================================
     * 
     * @version $Id: access.class.php,v 0.93 2008/05/02 10:54:32 $
     * @copyright Copyright (c) 2007 Nick Papanotas (http://www.webdigity.com)
     * @author Nick Papanotas <nikolas@webdigity.com>
     * @license http://opensource.org/licenses/gpl-license.php GNU General Public License (GPL)
     * 
     * ==============================================================================

     */

    /**
     * Flexible Access - The main class
     * 
     * @param string $dbName
     * @param string $dbHost 
     * @param string $dbUser
     * @param string $dbPass
     * @param string $dbTable
     */

    class flexibleAccess{
      
    /*Settings*/
      /**
       * The database that we will use
       * var string
       */
      
    var $dbName 'forumseoproj';
      
    /**
       * The database host
       * var string
       */
      
    var $dbHost 'localhost';
      
    /**
       * The database port
       * var int
       */
      
    var $dbPort 3306;
      
    /**
       * The database user
       * var string
       */
      
    var $dbUser 'root';
      
    /**
       * The database password
       * var string
       */
      
    var $dbPass '';
      
    /**
       * The database table that holds all the information
       * var string
       */
      
    var $dbTable  'users';
      
    /**
       * The session variable ($_SESSION[$sessionVariable]) which will hold the data while the user is logged on
       * var string
       */
      
    var $sessionVariable 'userSessionValue';
      
    /**
       * Those are the fields that our table uses in order to fetch the needed data. The structure is 'fieldType' => 'fieldName'
       * var array
       */
      
    var $tbFields = array(
          
    'userID'=> 'userID'
          
    'login' => 'username',
          
    'pass'  => 'password',
          
    'email' => 'email',
          
    'active'=> 'active'
      
    );
        
    /**
       * When user wants the system to remember him/her, how much time to keep the cookie? (seconds)
       * var int
       */
      
    var $remTime 2592000;//One month
      /**
       * The name of the cookie which we will use if user wants to be remembered by the system
       * var string
       */
      
    var $remCookieName 'ckSavePass';
      
    /**
       * The cookie domain
       * var string
       */
      
    var $remCookieDomain '';
      
    /**
       * The method used to encrypt the password. It can be sha1, md5 or nothing (no encryption)
       * var string
       */
      
    var $passMethod 'md5';
      
    /**
       * Display errors? Set this to true if you are going to seek for help, or have troubles with the script
       * var bool
       */
      
    var $displayErrors true;
      
    /*Do not edit after this line*/
      
    var $userID;
      var 
    $dbConn;
      var 
    $userData=array();
      
    /**
       * Class Constructure
       * 
       * @param string $dbConn
       * @param array $settings
       * @return void
       */
      
    function flexibleAccess($dbConn ''$settings '')
      {
            if ( 
    is_array($settings) ){
                foreach ( 
    $settings as $k => $v ){
                        if ( !isset( 
    $this->{$k} ) ) die('Property '.$k.' does not exists. Check your settings.');
                        
    $this->{$k} = $v;
                }
            }
            
    $this->remCookieDomain $this->remCookieDomain == '' $_SERVER['HTTP_HOST'] : $this->remCookieDomain;
            
    $this->dbConn = ($dbConn=='')? mysql_connect($this->dbHost.':'.$this->dbPort$this->dbUser$this->dbPass):$dbConn;
            if ( !
    $this->dbConn ) die(mysql_error($this->dbConn));
            
    mysql_select_db($this->dbName$this->dbConn)or die(mysql_error($this->dbConn));
            if( !isset( 
    $_SESSION ) ) session_start();
            if ( !empty(
    $_SESSION[$this->sessionVariable]) )
            {
                
    $this->loadUser$_SESSION[$this->sessionVariable] );
            }
            
    //Maybe there is a cookie?
            
    if ( isset($_COOKIE[$this->remCookieName]) && !$this->is_loaded()){
              
    //echo 'I know you<br />';
              
    $u unserialize(base64_decode($_COOKIE[$this->remCookieName]));
              
    $this->login($u['uname'], $u['password']);
            }
      }
      
      
    /**
          * Login function
          * @param string $uname
          * @param string $password
          * @param bool $loadUser
          * @return bool
      */
      
    function login($uname$password$remember false$loadUser true)
      {
            
    $uname    $this->escape($uname);
            
    $password $originalPassword $this->escape($password);
            switch(
    strtolower($this->passMethod)){
              case 
    'sha1':
                  
    $password "SHA1('$password')"; break;
              case 
    'md5' :
                  
    $password "MD5('$password')";break;
              case 
    'nothing':
                  
    $password "'$password'";
            }
            
    $res $this->query("SELECT * FROM `{$this->dbTable}
            WHERE `
    {$this->tbFields['login']}` = '$uname' AND `{$this->tbFields['pass']}` = $password LIMIT 1",__LINE__);
            if ( @
    mysql_num_rows($res) == 0)
                return 
    false;
            if ( 
    $loadUser )
            {
                
    $this->userData mysql_fetch_array($res);
                
    $this->userID $this->userData[$this->tbFields['userID']];
                
    $_SESSION[$this->sessionVariable] = $this->userID;
                if ( 
    $remember ){
                  
    $cookie base64_encode(serialize(array('uname'=>$uname,'password'=>$originalPassword)));
                  
    $a setcookie($this->remCookieName
                  
    $cookie,time()+$this->remTime'/'$this->remCookieDomain);
                }
            }
            return 
    true;
      }
      
      
    /**
          * Logout function
          * param string $redirectTo
          * @return bool
      */
      
    function logout($redirectTo '')
      {
        
    setcookie($this->remCookieName''time()-3600);
        
    $_SESSION[$this->sessionVariable] = '';
        
    $this->userData '';
        if ( 
    $redirectTo != '' && !headers_sent()){
           
    header('Location: '.$redirectTo );
           exit;
    //To ensure security
        
    }
      }
      
    /**
          * Function to determine if a property is true or false
          * param string $prop
          * @return bool
      */
      
    function is($prop){
          return 
    $this->get_property($prop)==1?true:false;
      }
      
        
    /**
          * Get a property of a user. You should give here the name of the field that you seek from the user table
          * @param string $property
          * @return string
      */
      
    function get_property($property)
      {
        if (empty(
    $this->userID)) $this->error('No user is loaded'__LINE__);
        if (!isset(
    $this->userData[$property])) $this->error('Unknown property <b>'.$property.'</b>'__LINE__);
        return 
    $this->userData[$property];
      }
      
    /**
          * Is the user an active user?
          * @return bool
      */
      
    function is_active()
      {
        return 
    $this->userData[$this->tbFields['active']];
      }
      
      
    /**
       * Is the user loaded?
       * @ return bool
       */
      
    function is_loaded()
      {
        return empty(
    $this->userID) ? false true;
      }
      
    /**
          * Activates the user account
          * @return bool
      */
      
    function activate()
      {
        if (empty(
    $this->userID)) $this->error('No user is loaded'__LINE__);
        if ( 
    $this->is_active()) $this->error('Allready active account'__LINE__);
        
    $res $this->query("UPDATE `{$this->dbTable}` SET {$this->tbFields['active']} = 1 
        WHERE `
    {$this->tbFields['userID']}` = '".$this->escape($this->userID)."' LIMIT 1");
        if (@
    mysql_affected_rows() == 1)
        {
            
    $this->userData[$this->tbFields['active']] = true;
            return 
    true;
        }
        return 
    false;
      }
      
    /*
       * Creates a user account. The array should have the form 'database field' => 'value'
       * @param array $data
       * return int
       */  
      
    function insertUser($data){
        if (!
    is_array($data)) $this->error('Data is not an array'__LINE__);
        switch(
    strtolower($this->passMethod)){
          case 
    'sha1':
              
    $password "SHA1('".$data[$this->tbFields['pass']]."')"; break;
          case 
    'md5' :
              
    $password "MD5('".$data[$this->tbFields['pass']]."')";break;
          case 
    'nothing':
              
    $password $data[$this->tbFields['pass']];
        }
        foreach (
    $data as $k => $v $data[$k] = "'".$this->escape($v)."'";
        
    $data[$this->tbFields['pass']] = $password;
        
    $this->query("INSERT INTO `{$this->dbTable}` (`".implode('`, `'array_keys($data))."`) VALUES (".implode(", "$data).")");
        return (int)
    mysql_insert_id($this->dbConn);
      }
      
    /*
       * Creates a random password. You can use it to create a password or a hash for user activation
       * param int $length
       * param string $chrs
       * return string
       */
      
    function randomPass($length=10$chrs '1234567890qwertyuiopasdfghjklzxcvbnm'){
        for(
    $i 0$i $length$i++) {
            
    $pwd .= $chrs{mt_rand(0strlen($chrs)-1)};
        }
        return 
    $pwd;
      }
      
    ////////////////////////////////////////////
      // PRIVATE FUNCTIONS
      ////////////////////////////////////////////
      
      /**
          * SQL query function
          * @access private
          * @param string $sql
          * @return string
      */
      
    function query($sql$line 'Uknown')
      {
        
    //if (defined('DEVELOPMENT_MODE') ) echo '<b>Query to execute: </b>'.$sql.'<br /><b>Line: </b>'.$line.'<br />';
        
    $res mysql_db_query($this->dbName$sql$this->dbConn);
        if ( !
    res )
            
    $this->error(mysql_error($this->dbConn), $line);
        return 
    $res;
      }
      
      
          function 
    get_row($query_result)
        {
            return 
    mysql_fetch_assoc($query_result);
        }

        function 
    get_array($query_result)
        {
            return 
    mysql_fetch_array($query_result);
        }
        function 
    get_count($query_result)
        {
            return 
    mysql_result($query_result,0,0); 
        }
        
        function 
    num_rows($query_result)
        {
            return 
    mysql_num_rows($query_result);
        }
        
        function 
    insert_id()
        {
            return 
    mysql_insert_id($this->db_id);
        }

        function 
    get_result_fields($result)
        {
            while (
    $field mysql_fetch_field($result))
            {
                
    $fields[] = $field;
            }
            
            return 
    $fields;
        }
      
      
    /**
          * A function that is used to load one user's data
          * @access private
          * @param string $userID
          * @return bool
      */
      
    function loadUser($userID)
      {
        
    $res $this->query("SELECT * FROM `{$this->dbTable}` WHERE `{$this->tbFields['userID']}` = '".$this->escape($userID)."' LIMIT 1");
        if ( 
    mysql_num_rows($res) == )
            return 
    false;
        
    $this->userData mysql_fetch_array($res);
        
    $this->userID $userID;
        
    $_SESSION[$this->sessionVariable] = $this->userID;
        return 
    true;
      }

      
    /**
          * Produces the result of addslashes() with more safety
          * @access private
          * @param string $str
          * @return string
      */  
      
    function escape($str) {
        
    $str get_magic_quotes_gpc()?stripslashes($str):$str;
        
    $str mysql_real_escape_string($str$this->dbConn);
        return 
    $str;
      }
      
      
    /**
          * Error holder for the class
          * @access private
          * @param string $error
          * @param int $line
          * @param bool $die
          * @return bool
      */  
      
    function error($error$line ''$die false) {
        if ( 
    $this->displayErrors )
            echo 
    '<b>Error: </b>'.$error.'<br /><b>Line: </b>'.($line==''?'Unknown':$line).'<br />';
        if (
    $die) exit;
        return 
    false;
      }
    }

    ?>
    Использование:
    регистрация
    PHP:
    <?
    /*
    Adding a user to a table with email activation. Here is the table that I am using (it is the same we use with the default settings):
    ====================== MySQL Dump ===============================
    CREATE TABLE `users` (
      `userID` mediumint(8) unsigned NOT NULL auto_increment,
      `username` varchar(50) NOT NULL default '',
      `password` varchar(100) NOT NULL default '',
      `email` varchar(150) NOT NULL default '',
      `activationHash` varchar(150) NOT NULL default '',
      `active` tinyint(1) NOT NULL default '0',
      PRIMARY KEY  (`userID`),
      UNIQUE KEY `username` (`username`),
      UNIQUE KEY `email` (`email`),
      UNIQUE KEY `activationHash` (`activationHash`),
      KEY `active` (`active`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    ================================================================
    IMPORTANT:
    Do not use this example as is. Here we do not validate anything. In your application you should validate the data first, but you don't have to addslashes() as the class does this operation.
    http://phpUserClass.com
    http://www.webdigity.com
    */

    $settings = array(
        
    'dbName'=>'accessuserclass',
        
    'dbUser'=>'root',
        
    'dbPass'=>''
    );
    require_once 
    'access.class.php';
    $user = new flexibleAccess();

    if (!empty(
    $_GET['activate'])){
        
    //This is the actual activation. User got the email and clicked on the special link we gave him/her
        
    $hash $user->escape($_GET['activate']);
        
    $res $user->query("SELECT `{$user->tbFields['active']}` FROM `{$user->dbTable}` WHERE `activationHash` = '$hash' LIMIT 1",__LINE__);
        if ( 
    $rec mysql_fetch_array($res) ){
            if ( 
    $rec[0] == )
                echo 
    'Your account is already activated';
            else{
                
    //Activate the account:
                
    if ($user->query("UPDATE `{$user->dbTable}` SET `{$user->tbFields['active']}` = 1 WHERE `activationHash` = '$hash' LIMIT 1"__LINE__))
                    echo 
    'Account activated. You may login now';
                else
                    echo 
    'Unexpected error. Please contact an administrator';
            }
        }else{
            echo 
    'User account does not exists';
        }
    }

    if (!empty(
    $_POST['username'])){
      
    //Register user:
      
      //Get an activation hash and mail it to the user
      
    $hash $user->randomPass(100);
      while( 
    mysql_num_rows($user->query("SELECT * FROM `{$user->dbTable}` WHERE `activationHash` = '$hash' LIMIT 1"))==1)//We need a unique hash
            
    $hash $user->randomPass(100);
      
    //Adding the user. The logic is simple. We need to provide an associative array, where keys are the field names and values are the values :)
      
    $data = array(
          
    'username' => $_POST['username'],
          
    'email' => $_POST['email'],
          
    'password' => $_POST['pwd'],
          
    'activationHash' => $hash,
          
    'active' => 0
      
    );
      
    $userID $user->insertUser($data);//The method returns the userID of the new user or 0 if the user is not added
      
    if ($userID==0)
          echo 
    'User not registered';//user is allready registered or something like that
      
    else {
          echo 
    'User registered with user id '.$userID'. Activate your account using the instructions on your mail.';
          
    //Here is a sample mail that user will get:
        
    $email 'Activate your user account by visiting : '$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] .'?activate='.$hash;
        
    mail($_POST['email'], 'Activate your account'$email);
      }
    }


    echo 
    '<h1>Register</h1>
        <p><form method="post" action="'
    .$_SERVER['PHP_SELF'].'" />
         username: <input type="text" name="username" /><br /><br />
         password: <input type="password" name="pwd" /><br /><br />
         email: <input type="text" name="email" /><br /><br />
         <input type="submit" value="Register user" />
        </form>
        </p>'
    ;

    ?>
    авторизация
    PHP:
    $user = new flexibleAccess();

    if ( 
    $_GET['logout'] == 
        
    $user->logout('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
        
    if ( !
    $user->is_loaded() )
    {
        
    //Login stuff:
        
    if ( isset($_POST['uname']) && isset($_POST['pwd'])){
          if ( !
    $user->login($_POST['uname'],$_POST['pwd'],$_POST['remember'] )){//Mention that we don't have to use addslashes as the class do the job
            
    echo 'Wrong username and/or password';
          }else{
            
    //user is now loaded
            
    header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
          }
        }
    echo 
    forma_login();
    }else{
    echo 
    "hellow ";
    }
    выполнение запросов
    PHP:
    $site1=$user->query("SELECT *  FROM `test`"); 

    while(
    $site65656=$user->get_array($site1)){
    ...
    }
    }
     
  15. sw04

    sw04 New Member

    Регистр.:
    4 сен 2009
    Сообщения:
    29
    Симпатии:
    0
    madbirdy.ru/seoclass
    класс умеет:
    1. грабить серп яндекса
    2. грабить серп гугла
    3. грабить тиц
    4. грабить pr
    5. грабить индексацию сайта в яндексе
    6. грабить индексацию сайта в гугле

    правда автор на него чуток забил по-моему...
     
  16. maximus

    maximus Member

    Регистр.:
    23 апр 2009
    Сообщения:
    252
    Симпатии:
    0
    Преобразование BB тегов в HTML-теги.

    PHP:
    function bth($content) { 

    // Переносы строк 
    $content nl2br($content); 

    // Горизонтальная линия 
    $content str_replace("[HR]""<hr />"$content); 

    // Жирный, Курсив (Наклонный), Подчеркнутый, Перечеркнутый 
    $content preg_replace("/\[B\](.+?)\[\/B\]/""<b>\\1</b>"$content); 
    $content preg_replace("/\[I\](.+?)\[\/I\]/""<i>\\1</i>"$content); 
    $content preg_replace("/\[U\](.+?)\[\/U\]/""<u>\\1</u>"$content); 
    $content preg_replace("/\[S\](.+?)\[\/S\]/""<s>\\1</s>"$content); 

    // Нижний и верхний регистр 
    $content preg_replace("/\[SUB\](.+?)\[\/SUB\]/""<sub>\\1</sub>"$content); 
    $content preg_replace("/\[SUP\](.+?)\[\/SUP\]/""<sup>\\1</sup>"$content); 

    // Мелкий шрифт 
    $content preg_replace("/\[SMALL\](.+?)\[\/SMALL\]/""<small>\\1</small>"$content); 

    // Нестандартный шрифт 
    $content preg_replace("/\[FONT=([^\"]+?)\](.+?)\[\/FONT\]/""<font face=\"\\1\">\\2</font>"$content); 

    // Название шрифта 
    $content preg_replace("/\[SIZE=(\d+?)\](.+?)\[\/SIZE\]/""<font size=\"\\1\">\\2</font>"$content); 

    // Цвет шрифта 
    $content preg_replace("/\[COLOR=([^\"]+?)\](.+?)\[\/COLOR\]/""<font color=\"\\1\">\\2</font>"$content); 

    // Выравнивание (По левому краю, По центру, По правому краю) 
    $content preg_replace("/\[LEFT\](.+?)\[\/LEFT\]/""<div align=\"left\">\\1</div>"$content); 
    $content preg_replace("/\[CENTER\](.+?)\[\/CENTER\]/""<div align=\"center\">\\1</div>"$content); 
    $content preg_replace("/\[RIGHT\](.+?)\[\/RIGHT\]/""<div align=\"right\">\\1</div>"$content); 

    // Ссылки 
    $content preg_replace("/\[URL\]([a-z]+?)(:\/\/)([^\"]+?)\[\/URL\]/""<a href=\"\\1\\2\\3\" target=\"_blank\">\\1</a>"$content); 
    $content preg_replace("/\[URL=([a-z]+?)(:\/\/)[^\"]+?)\](.+?)\[\/URL\]/""<a href=\"\\1\\2\\3\" target=\"_blank\">\\2</a>"$content); 

    $content preg_replace("/\[URL\]([^\"]+?)\[\/URL\]/""<a href=\"http:\/\/\\1\" target=\"_blank\">\\1</a>"$content); 
    $content preg_replace("/\[URL=([^\"]+?)\](.+?)\[\/URL\]/""<a href=\"http:\/\/\\1\" target=\"_blank\">\\2</a>"$content); 


    // E-Mail 
    $content preg_replace("/\[EMAIL\]([^\"]+?)\[\/EMAIL\]/""<a href=\"mailto:\\1\">\\1</a>"$content); 
    $content preg_replace("/\[EMAIL=([^\"]+?)\](.+?)\[\/EMAIL\]/""<a href=\"mailto:\\1\">\\2</a>"$content); 

    // Изображение 
    $content preg_replace("/\[IMG\](http:\/\/)([^\"]+?)\[\/IMG\]/""<img src=\"\\1\\2\" border=\"0\" alt=\"\">"$content); 
    $content preg_replace("/\[IMG=(http:\/\/)([^\"]+?)\](.+?)\[\/IMG\]/""<img src=\"\\1\\2\" border=\"0\" alt=\"\\2\">"$content); 

    $content preg_replace("/\[IMG\]([^\"]+?)\[\/IMG\]/""<img src=\"http:\/\/\\1\" border=\"0\" alt=\"\">"$content); 
    $content preg_replace("/\[IMG=([^\"]+?)\](.+?)\[\/IMG\]/""<img src=\"http:\/\/\\1\" border=\"0\" alt=\"\\2\">"$content); 

    // Список 
    $content preg_replace("/\[LIST\]([^\"]+?)\[\/LIST\]/""<ul type=\"square\">\\1</ul>"$content); 
    $content preg_replace("/\[LIST=([^\"]+?)\](.+?)\[\/LIST\]/""<ul type=\"\\1\">\\2</ul>"$content); 
    $content preg_replace("/\[\*\](.+?)\[\/\*\]/""<li>\\1</li>"$content); 

    // Цитата 
    $content preg_replace("/\[Q\](.+?)\[\/Q\]/""<b>Цитата:</b><br /><div class=\"quote\">\\1</div>"$content); 

    // Смайлики 
    $content preg_replace("/:(.+?):/""<img src=\"/images/smiles/\\1.gif\" border=\"0\">"$content); 

    return 
    $content

    }

    // Тест функции 
    $text "[HR]Жирный"
    $text bth($text); 
    echo 
    $text

    //Utochka, antichat.ru
    ?>
     
  17. maximus

    maximus Member

    Регистр.:
    23 апр 2009
    Сообщения:
    252
    Симпатии:
    0
    Парсер ссылок с гугла по кейворду

    PHP:
    <?php

    /* 

    |  www.google.ru parser 
    |  C0d3d by Exgibichi 
    |  27/07/08 

    */ 

    set_time_limit(0);  

    $n 20// number of pages 
    $keyword 'keyword'//keyword for parse 

    function googlelinkparse($keyword,$n) { 

      
    $keyword str_replace(' ','+',$keyword); 
      
    $url 'http://www.google.ru/search?q='.$keyword.'&num=100&filter=0&start='.$n.'0'
      
    $file file_get_contents($url) or die('Could not access file'); 
      
    $exp "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>"
         
      if (
    preg_match_all("/$exp/siU"$file$matchesPREG_SET_ORDER)) { 
         
        
    $c count($matches); 
        for (
    $i=0$i<$c$i++) { 
         
          if (
    strstr($matches[$i][2],'http://') && !strstr($matches[$i][2],'google') && !strstr($matches[$i][2],'search?q=cache') && !strstr($matches[$i][2],'youtube') && !strstr($matches[$i][2],'/aclk?sa')) { 
          
    $links[] = $matches[$i][2]; 
          } 
        } 
      } return 
    $links


    for (
    $i=0$i<$n$i++) { 

      
    $link googlelinkparse($keyword,$i); 
      
    $c count($link); 
       
      for (
    $j=0$j<$c$j++) { 
        
    $f fopen('links.txt','a+'); fputs($f,$link[$j]."\r\n"); fclose($f); 
      } 
      
    sleep(10); 

    ?>
     
  18. Думаю

    Думаю New Member

    Регистр.:
    8 июл 2009
    Сообщения:
    15
    Симпатии:
    0
    maximus, проверяли? на данный момент регулярка актуальна? а то как то отталкивает:
     
  19. maximus

    maximus Member

    Регистр.:
    23 апр 2009
    Сообщения:
    252
    Симпатии:
    0
    не точтоб проверял, пользуюсь :)

    здесь указываете данные, сохраняются ссылки в links.txt
     
  20. forumseo

    forumseo Moderator

    Регистр.:
    23 май 2009
    Сообщения:
    100
    Симпатии:
    0
    Скрипт массовой замены строк в файлах. Очень удобная штука для доров :)

    [HIDE="1"]
    <?
    $work_dir=”./”;
    // рабочая директория - обязательно должна заканчиваться
    // символом “/”
    $excl_dir=array();
    $excl_dir[0]=”./webstat/”;
    $excl_dir[1]=”./cgi-bin/”;
    // директории, где поиск/замена не производятся - обязательно должны заканчиваться
    // символом “/”
    $file_mask_1=”.html”;
    $file_mask_2=”.js”;
    // маски обрабатываемых файлов (будут обработаны все файлы,
    // содержащие данную строку в имени)
    $search_str=”<noindex></DIV>”; #что ищем
    $replace_str=”</DIV>”; #чем заменяем
    //******************************************************
    $level=0;
    function sr($dir)
    {
    global $level,$file_mask_1,$file_mask_2,$search_str,$replace_str,$excl_dir;
    echo “<b>”;
    for ($i=0;$i<$level;$i++) echo “* * “;
    echo $dir.”</b>”;
    if (@in_array($dir,$excl_dir))
    {
    echo ” - needn’t search & replace<br>”;
    return;
    }
    echo “<br>”;
    $p = dir($dir);
    while($ent=$p->read())
    {
    if ($ent!=”.” && $ent!=”..” && !is_dir($dir . $ent) && (eregi(sql_regcase($file_mask_1),$ent) || eregi(sql_regcase($file_mask_2),$ent)))
    {
    $tmp=@file($dir.$ent);
    $str=@implode(”",$tmp);
    if (strpos(”@!#%xrenoder^&*()”.$str,$search_str))
    {
    for ($i=0;$i<($level)+1;$i++) echo “* * “;
    echo $dir.$ent.” found…”;
    $str=str_replace($search_str,$replace_str,$str);
    if ($fp=@fopen($dir.$ent, “w”))
    {
    flock($fp,LOCK_EX);
    fwrite($fp,$str);
    fclose($fp);
    echo ” and replace<br>”;
    }
    else echo ” and <b>can’t replace</b><br>”;
    }
    }
    elseif($ent!=”.” and $ent!=”..” and is_dir($dir . $ent))
    {
    $level++;
    sr($dir.$ent.”/”);
    $level–;
    }
    }
    $p->close();
    return;
    }
    sr($work_dir);
    echo “SEARCH & REPLACE Complete”;
    ?>[/HIDE]
     

Поделиться этой страницей