Фильтр → Все записи с тегом php

PHP. Автоматическая генерация ключевых слов

10.12.2010

Задача: Автоматически сгенерировать ключевые слова для определенного текста. Обеспечит возможность создания списка слов исключений. Задавать минимальную длину ключевого слова

Решение:

    function generate_keyword($text = '', $word_len = 4, $quantity = 15)
    {
        $text = _strtolower($text);
        $text = preg_replace("/[^а-яs-]/isu","",$text);
        $_del_symbols = array("как", "для", "что", "или", "это", "этих", "потому", "поэтому", "просто", "очень",
                             "всех", "они", "оно", "еще", "когда","тогда","которые","того",
                             "где", "эта", "лишь", "уже", "вам", "нет",
                             "если", "надо", "все", "так", "его", "чем",
                             "при", "даже", "мне", "есть", "раз", "два",
                             "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
                             );
        foreach( $_del_symbols as $val )
        {
            $del_symbols[] = "/^".$val."$/";
        }

        $text = preg_replace($del_symbols, "", $text);

        preg_match_all("/[а-я]{".$word_len.",}+/uis", $text, $word);

        $return = array_flip(array_count_values ($word[0]));//получаем слова и частоту, меняем местами ключ-значение

        $keywords_count = array_count_values($word[0]);
        foreach ($keywords_count as $k => $v)
        {
            if ($v > 1)
            {
                $keywords_result[$v][] = $k;
            }
        }
        if( sizeof($keywords_result) < 1 ) return false;

        krsort($keywords_result);

        foreach($keywords_result as $key => $value)
        {
            foreach($value as $key => $word)
            {
                $keywords[] = $word;
            }
        }

        $keywords = array_slice($keywords, 0, $quantity);

        return join(",", $keywords);
    }

Категория: php , программирование ,
Теги: php ,
Просмотров: 65
Комментарии: 0

Балансировка тегов. object

09.12.2010

Задача:
Необходимо обеспечить обрезание html текста до определенной длины с балансировкой тегов. Обеспечить полноценную обработку object тегов.

Решение:
Для решения первой части задачи мы возьмем функцию из wordpress, которая называется balance_tags.
Она прекрасно справляется с задачей балансировки тегов до тех пор, пока в тексте не встретится тег object, который содержит вложенные теги param.
Если наша функция truncate обрежет текст на середине тега object? Скажем, таким образом 

<param src=""...

В результате поплывет верстка. Чтобы избежать этого эффекта,
я доработал функцию balance_tags. Алгоритм таков:

1) выгребаем все теги object и засовываем их в массив
2) заменяем их на теги <obj>n</obj>, где n - это порядковый номер тега object
3) обрезаем текст
4) балансируем теги
5) заменяем <obj>n</obj> на соответсвующий тег.

Читать дальше

Категория: php , программирование ,
Теги: php , html ,
Просмотров: 59
Комментарии: 0

PHP. Deprecated: Function eregi() is deprecated in... Решение проблемы

02.11.2010

При обновлении PHP до версии 5.3.0 стала появляться ошибка:
Deprecated: Function eregi() is deprecated in ...

Оказывается, с выходом версии PHP 5.3.0 некоторые функции были признаны устаревшими и были заменены на другие.

Чтобы решить проблему нужно:

1) Открыть файл php.ini и найти строчки:

; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
;mbstring.func_overload = 0

2) Раскоментировать строку ;mbstring.func_overload = 0


3) Изменить значение параметра mbstring.func_overload по такому принципу:

Если оно равно нулю, как сейчас – это значит что все устаревшие функции отключены, и вместо них используются новые их «наследники».
Если же хотим что-нибудь включить, например, mail() и eregi(), то значение будет равно 5 (типа 1+4).
Если нужно включить str*() и eregi(), то значение будет равно 6 (4+2).

4) Перезагрузить сервер

Категория: php , программирование ,
Теги: php ,
Просмотров: 126
Комментарии: 0

Скрипт проверки сайтов на работоспособность

13.09.2010

Если вы владелец огромного количества сайтов, которые приносят доход, то вам необходимо быть уверенным в работоспособности каждого сайта в определенный момент времени. Я написал скрипт, который проверяет работоспособность сайта и отсылает email в случае, если какой-либо из сайтов не работает. Скрипт нужно поставить на крон.

Файл index.php

    header('Content-Type: text/html; charset=utf-8');
    ini_set("max_execution_time", 0);

    include('Phpmailer.php');
    include('config.php');

    $sites = 'sites.txt';    
    if( !file_exists($sites) )
    {
		$error = "Error! File {$sites} was not found. Please create it in following directory ".dirname(__FILE__);
        send_mail($error, 'Site check: error');
        die($error);
    }

    if( empty($config['email_to']) )
    {  
		die('Error!! The recipient is not found. Please open config.php and specify email of recipient(s).');   
    }  

    $list = file($sites);
    if( !empty($list) && is_array($list) )
    {
        $body = array();
        foreach( $list as $site )
        {
            $site = trim($site);
            $site = str_replace('http://', '', $site);
            $site = trim($site, '/');
            $site = 'http://'.$site.'/';
            $headers = @get_headers($site);

            if( empty($headers) || ( isset($headers[0]) && ( strpos($headers[0], '200') === false && strpos($headers[0], '301') === false ) ) )
            {
                $body = ''.$site.'
FAIL
'.date('m/d/Y H:i').'

'; send_mail($body); echo $body; } } } else { $error = "Error!! Could not get list of domains from {sites}. Please check it out."; send_mail($error, 'Site check: error'); die($error); } function send_mail($body, $subject = 'Site check') { global $config; $phpmailer = new PHPMailer(); $phpmailer->From = $config['email_from']; $phpmailer->FromName = $config['email_from_name']; $phpmailer->CharSet = $config['email_charset']; $phpmailer->IsHTML(true); $phpmailer->Subject = $subject.' - '.date('/m/d/Y H:i'); $phpmailer->Body = $body; if( is_array($config['email_to']) && sizeof($config['email_to']) > 0 ) { foreach( $config['email_to'] as $email_to ) { $phpmailer->AddAddress($email_to); } } else { $phpmailer->AddAddress($config['email_to']); } $send = $phpmailer->Send(); $phpmailer->ClearAddresses(); }

Для работы скрипта нужна библиотека phpmailer, конфиг и список адресов сайтов в текстовом документе - каждый сайт с новой строки.

Конфигурационный файл config.php:

$config['email_from'] = '[email protected]';
$config['email_from_name'] = 'no-reply';
$config['email_charset'] = 'utf-8';

$config['email_to'][] = '[email protected]';
$config['email_to'][] = '[email protected]';
$config['email_to'][] = '[email protected]';

Список сайтов sites.txt:

google.com
yandex.ru
tvoy-vibor.com
jquery23.com
Скрипт читает каждую строку из файла sites.txt, делает запрос на адрес и получает заголовки. В зависимости от них скрипт принимает решение.

Категория: php ,
Теги: php , парсинг ,
Просмотров: 293
Комментарии: 0

Решение проблемы кодировки сайта

04.06.2010

За частую у молодых вебмастеров случаются проблемы с кодировкой сайта. Ниже я приведу несколько рекомендаций по их устранению.

1. При написании кода старайтесь, чтобы кодировка вашей страницы (к примеру index.php) соответствовала кодировке сайта. Если это windows-1251, то кодировка страницы должна быть ANSI; если utf-8 - то UTF-8.

2. Всегда используйте метатег, который явным образом указывает кодировку сайта:

<meta http-equiv="content-type" content="text/html; charset=utf-8">

3. Если сервер поддерживает mod rewrite, в корне проекта создайте файл .htaccess и добавьте строку, определяющую кодировку сервера:

AddDefaultCharset windows-1251 
# или 
AddDefaultCharset utf-8

 

4. Используйте заголовок header, если вы программируете на PHP:

header('Content-Type: text/html; charset=utf-8');

Эта строка явно укажет браузеру кодировку. Помните, заголовки нужно отсылать до первого вывода данных на экран. Лучше это сделать в начале сценария.

5. Явно указывайте кодировку соединения с базой данных.

mysql_query("SET NAMES cp1251");
//или 
mysql_query("SET NAMES utf8");

Если пользоваться этими рекомендациями, броблем с кодировкой возникнуть не должно.

Категория: php , программирование ,
Теги: php , интернет , кодировка ,
Просмотров: 403
Комментарии: 1

Изящная обработка ошибки 404 в codeigniter

21.05.2010

Разработчики codeigniter настоятельно рекомендуют не изменять код ядра фреймворка. Если вы следуете этому правилу, то данные рекомендации не для вас.
Иногда просто необходимо для реализации какой-нибудь функции подтачивать исходный код. Мне понадобилась изящная обработка 404 ошибки с использованием
шаблонов. Проще говоря, мне необходимо было вписать 404 в свой шаблон. Я использую smarty.

Итак, код в студию....

Открываем файл system/codeigniter/CodeIgniter.php и ищем строчку

if (!file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT))
{
    .........
}

выкидываем все, что написано между скобками и вставляем следующий код:

header("HTTP/1.1 404 Not Found");
$CI = new Controller();
$CI->templates->assign('html_title', '404. Страница не найдена');
$CI->templates->display('404.tpl');
exit;

у нас должно получиться

if (!file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT))
{    
    header("HTTP/1.1 404 Not Found");
    $CI = new Controller();
    $CI->templates->assign('html_title', '404. Страница не найдена');
    $CI->templates->display('404.tpl');
    exit;   
}

А теперь подробнее:

header("HTTP/1.1 404 Not Found"); - посылает заголовок 404. Это необходимо, в частности, для поисковых систем

$CI = new Controller(); - создаем экземпляр класса Controller. Он необходим для работы всех плагинов шаблона, которые используют функции ядра системы

$CI->templates->assign('html_title', '404. Страница не найдена');
- даю title своему шаблону (это особенности архитектуры моих шаблонов)

$CI->templates->display('404.tpl'); - подключаю шаблон 404 к основному шаблону сайта. (основной шаблон использует функцию include. В жанном случае я подключаю туда 404)

Важное примечание. Как видно из кода, библиотека templates уже загдужена автозагрузчиком (autoloader). Если это не сделано, ее можно вызвать следующим способом:

$CI = new Controller();
$CI->load->library('templates');
$CI->templates->assign('html_title', '404. Страница не найдена');
.......

вот ,собственно, и все.

Категория: php , программирование ,
Теги: codeigniter , php ,
Просмотров: 427
Комментарии: 0

PHP. Часовые пояса. Локализация дат. Время.

13.04.2010

Чтобы изменить значение часового пояса для вашего сайта, достаточно в начале скрипта задать функцию, параметром которой будет служить название часового пояса:

date_default_timezone_set('Europe/Moscow')

или

ini_set('date.timezone', 'America/Los_Angeles')

В первом случае функция date() будет выводить московское время, во втором - время Лос Анжедеса.
Ниже привожу скисок значений функций, меняющих часовой пояс для Европы:
Europe/Amsterdam
Europe/Andorra
Europe/Athens
Читать дальше

Категория: php , программирование ,
Теги: php ,
Просмотров: 737
Комментарии: 0

Модульное расширение для codeigniter

11.04.2010

Представляю вашему вниманию модульное расширение фреймворка codeigniter, которое позволит создавать модули с неограниченным количеством контроллеров.
Модуль разбит на 2 части - frontend - то, что увидит пользователь и backend - то, что увидит администратор.
Данное расширение не являеться абсолютно готовым, а служит лишь конструктором, на основе которого вы сможете строить универсальные модульные приложения.
Не являеться полным и готовым потому, что здесь не реализована система отображений для модулей, а по-прежнеу отображения вызываются из папки system/application/views.
Но при большом желании вы сможете исправить этот недостаток подключив smarty и сдлеав библиотеку для модульных шаблонов.

Контроллер для фронтенда вызываем двумя способами:
http://codeigniter/index.php/welcome/hello/
либо
http://codeigniter/index.php/frontend/welcome/hello/
а контроллер для бекенда:
http://codeigniter/index.php/backend/welcome/hello/

Советую написать руль для htaccess, чтобы упрятать index.php.

Процесс установки:

1) Копируем файл MY_Router.php в system/application/libraries/

2) Удаляем папку system/application/controllers.

3) Создаем папку system/application/modules. В этой папке будут находиться модули проекта.
Структура такова:

    + modules [обязательное имя папки]
        + модуль 1
            + controllers [обязательное имя папки]
                + backend [обязательное имя папки]
                    + контроллер 1
                + frontend [обязательное имя папки]
                    + контроллер 1
                    + контроллер 2
                    + контроллер 3                    
        + модуль 2
            + controllers [обязательное имя папки]
                + backend [обязательное имя папки]   
                    + контроллер 1
                    + контроллер 2
                + frontend [обязательное имя папки]
                    + контроллер 1
                    + контроллер 2
                    + контроллер 3
        
4) В файле system/codeigniter/CodeIgniter.php ищем строку 236:
    call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 2));
и меняем ее на:
    call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 4));

Мы изменили порядковый номер аргументов, так как массив $URI->rsegments вырос у нас на 2 значения:

$URI->rsegments[] - side
$URI->rsegments[] - module
$URI->rsegments[] - controller
$URI->rsegments[] - method
$URI->rsegments[] - arg1
...............
$URI->rsegments[] - argn

вместо:

$URI->rsegments[] - controller
$URI->rsegments[] - method
$URI->rsegments[] - arg1
...............
$URI->rsegments[] - argn

Скачать MY_Router.php

Категория: php , программирование ,
Теги: php , codeigniter ,
Просмотров: 728
Комментарии: 1

Curl. Прокси

09.03.2010

Ниже приведен код для работы curl через прокси сервер:

function get($url, $proxy)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
    curl_setopt($ch, CURLOPT_PROXY, "$proxy");
    $ss=curl_exec($ch);
    curl_close($ch);
    return $ss;
} 

$prox = '62.159.143.172:80';
$content = get('http://totoiono.enkidu.ru/', $prox);
echo $content;

Список рабочих прокси серверов можно получить здесь, проверить на работоспособность список произвольных прокси серверов можно здесь.

Категория: php , программирование ,
Теги: php ,
Просмотров: 1266
Комментарии: 3

Защита адресов электронной почты с использованием кодов ASCII

02.01.2010

protectMail('[email protected]');

В браузере вы видите только ссылку электронной почты; определяющая ее разметка HTML записана непонятно:

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#101;&#109;&#97;&#105;&#108;&#64;&#97;&#100;&#100;&#114;&#101;&#115;&#115;&#46;&#120;&#121;">Send mail</a>
    function protectMail($s)
    {
        $result = '';
        $s = 'mailto:' . $s;
        for ($i = 0; $i < strlen($s); $i++)
        {
            $result .= '&#' . ord(substr($s, $i, 1)) . ';';
        }
        return $result;
    }
    echo '<a href="'.protectMail('[email protected]').'">Send mail</a>';

Некоторые специальные символы сложно использовать в строках, поскольку их тяжело ввести с клавиатуры.
Однако существуют коды ASCII, для работы с которыми РНР предлагает две функции:

- chr() преобразовывает ASCII-код в соответствующий символ;
- ord() возвращает ASCII-код символа.

Данные команды можно, например, использовать для защиты адресов электронной почты.
Поскольку спамеры пишут программы для поиска на Web-страницах определенных структур (адресов элнктронной почты), это может помочь уберечься от части спама. Суть защиты заключается в использовании кодов символов HTML для представления адресов, из-за чего спамерам становится сложнее найти данные электронной почты.
Приведенный выше код принимает в качестве параметра адрес электронной почты (в формате [email protected]ху) и возвращает mailto: [email protected]ху, однако в формате объектов HTML. Например, буква m в mailto: имеет ASCII-код 109: следовательно, &#109; обозначает m.
Для выполнения необходимых действий задается цикл for, проходящий по всем символам строки. Чтобы реализовать эту процедуру, необходимо определить длину строки с помощью strlen(). После этого функция ord() рассчитывает ASCII-коды всех символов, которые затем используются для построения HTML-кода.
Разумеется, это не гарантирует стопроцентной защиты; чтобы спрятать адрес электронной почты, нужно использовать и другие способы, в том числе — синтаксис (например, задание адреса в формате email at address dot ху) либо представление email адреса изображением.

Категория: php , программирование ,
Теги: php , защита контента ,
Просмотров: 593
Комментарии: 0

Популярные

10 причин, чтобы отказаться от алкоголя и одна – чтобы употреблять алкоголь

Комментариев: 53 | просмотров: 8256
01.09.2009

О вреде микроволновой печи

Комментариев: 9 | просмотров: 3538
13.12.2009

Весело, весело встретим Новый GOD

Комментариев: 9 | просмотров: 2007
17.12.2009

Масонская символика на долларе

Комментариев: 4 | просмотров: 3949
03.03.2009

PHP. strtolower(strtoupper) и UTF-8

Комментариев: 4 | просмотров: 1774
14.05.2009

Библия. Книга Судей. Глава 19

Комментариев: 4 | просмотров: 1388
30.08.2009

Дискотека Авария. Заколебал ты

Комментариев: 4 | просмотров: 328
01.08.2010

Категории

Календарь

ПнВтСрЧтПнСбВс
12
3456789
10111213141516
17181920212223
24252627282930
31

Цитаты

Водка белая, но краснит нос и чернит репутацию

А. П. Чехов