Цепи Маркова на PHP

Автор: gregor от 27 ноября 2008 в категории Мой миллион, Пишем на PHP
1

Пришёл к тому что надо собирать свою базу запросов, грабить и можернизировать тексты, и на основе своей базы делать дорвеи.

Во время поиска полезной информации о дорвеях, набрёл на скрипт который генерирует текст по алгоритму цепей Маркова.

Вот он:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Class MarkovChains{
var $prepared = array();
function MarkovChains($source){
$source = strtolower($source);
$source = str_replace(array ("? ", "! "), ".", $source);
$source = str_replace(array (" -", "- ", "\t", "\r", "\n", "|", "&", '\', '/', " :", " ;", "©", "•"), ' ', $source);
$source = str_replace(array (")", "(", "]", "[", "'", "\"", '*', '•', '~', '{', '}'), '', $source);
$source = str_replace(" ,", ",", $source);
$source = preg_replace("~(\s+\d{1,2}\s+)|(\w*\.\w+)~", " ", $source);
$source = preg_replace("~\s+~", " ", $source);$sentens = explode('. ', $source);
$count_sentens = count($sentens);
for ($j=0; $j<$count_sentens; ++$j){
$sentens[$j] = explode(' ', $sentens[$j]);
$count_words = count($sentens[$j]) - 1;
for ($i=0; $i < $count_words; ++$i){
$prefix = $sentens[$j][$i];
$this->prepared[$prefix][] = $sentens[$j][$i+1];
}
}
$keys = array_keys($this->prepared);
foreach ($keys as $key){
$this->prepared[$key] = array_unique($this->prepared[$key]);
}
}
function GenerateText($size){
$result_count = 0;
for ($j=0; $result_count < $size; ++$j){
$prev = array_rand($this->prepared);
$num = mt_rand(5, 12);
for ($i=0; $i<$num; ++$i){
$sents[$j][$i] = $prev;
++$result_count;
$p = $this->prepared[$prev][mt_rand(0, count($this->prepared[$prev]) - 1)];
if ($p == '') $p = array_rand($this->prepared);
$prev = $p;
if ($prev == '') break 2;
}
}
foreach ($sents as $sent){
$count_word=count($sent);
if ($count_word<=2) continue;
if (strlen($sent[$count_word-1]) < 4) unset($sent[$count_word-1]);
$sent[$count_word-2] = rtrim($sent[$count_word-2], ",:;");
$sent[$count_word-1] = rtrim($sent[$count_word-1], ",:;");
$output .= ucfirst(implode(' ', $sent)).'. ';
}
$output = str_replace(' .', '.', $output);
return $output;
}
}
?>

Скачать скрипт на php для генерирования текста по правилам цепей Маркова

  Цепи Маркова (782 байт, Скачено: 1,036)

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

1
2
3
4
5
$source = "тут текст";
//file_get_contents("text.txt");
$markov = new MarkovChains($source);
$result = $markov->GenerateText(500);
echo $result;


ШляпаТак сякСреднеУже что-тоВери гуд (111 votes, average: 4.96 out of 5)
Loading ... Loading ...

Tags: , , ,

Декомпилятор DeZender 5 против Zend Encoder

Автор: gregor от 25 ноября 2008 в категории Пишем на PHP
2

Раньше передо мной вставал вопрос глянуть на исходники некоторых платных php скриптов, и к своему сожалению, я не редко натыкался на файлы закодированые Zend Encoder'ом.

Всегда искал декодер zend'а, но нигде не мог его найти. Недавно не торренте наткнлуся на него, скачал и забыл.

Сегодня опробывал его и был действительно приятно удивлён. Огромный файл с функциями от одного известного портала, он раскодил, я предполагаю до конца. В конец файла правда лабуда какая то появилась. Взял файл поменьше и о чудо... весь код раззенден. Прога толи на японском, толи на китайском, всё в иероглифах, но думаю разберётесь, тем всего то четыре кнопки: выбрать папку, выбрать файл, разкодить, и выход.
скачать Декомпилятор DeZender 5 (depositfiles)
скачать Декомпилятор DeZender 5 (letitbit)
скачать Декомпилятор DeZender 5 (vip-file)


ШляпаТак сякСреднеУже что-тоВери гуд (2 votes, average: 1.00 out of 5)
Loading ... Loading ...

Tags: , , , , , , ,

Отображаем ошибки php скриптов

Автор: gregor от 22 ноября 2008 в категории Пишем на PHP
0

Вот код для включений отображение ошибок php:

1
2
3
4
// отображение ошибок
ini_set("display_errors","1");
ini_set("display_startup_errors","1");
ini_set('error_reporting', E_ALL);

Вот для выключения отображение ошибок:

1
2
3
// отображение ошибок
ini_set("display_errors","0");
ini_set("display_startup_errors","0");

А вот пример отображения ошибок только для вас (определяем по ip):

1
2
3
4
5
6
7
8
9
10
// отображение ошибок
if($_SERVER['REMOTE_ADDR'] == '127.0.0.1'){
    // если это ваш ip
    ini_set("display_errors","1");
    ini_set("display_startup_errors","1");
}else{
    // если нет
    ini_set("display_errors","0");
    ini_set("display_startup_errors","0");
}


ШляпаТак сякСреднеУже что-тоВери гуд (Ещё нет оценок)
Loading ... Loading ...

Tags: , ,

Как победить знаки вопросов при выборке из MySQL

Автор: gregor от 22 ноября 2008 в категории Пишем на PHP
0

В самом начале моего знакомства с php и mysql я натолкнулся на такую проблему, как знаки вопросов вместо данных на кириллице. Оказалось что такой недуг можно победит если сразу после строк подключения к базе данных mysql вписать следующий код:

1
2
//Подменяем кодировку
$result = mysql_query ("SET NAMES cp1251");


Я думаю многие из начинающих писать на php сталкиваются с такой проблемой.


ШляпаТак сякСреднеУже что-тоВери гуд (Ещё нет оценок)
Loading ... Loading ...

Tags: , , ,

Как изменить временную зону на PHP

Автор: gregor от 22 ноября 2008 в категории Пишем на PHP
0

Столкнулся с проблемой отображения дат на своём новеньком VDS. Скрипты упорно выдовали дату согласно временной зоне которая установлена по умолчанию на сервере. Так как раньше у меня таких проблем не возникало, пришлось обратитья к гуглу.

В результате решение было найдено:

1
2
// задаём временную зону
date_default_timezone_set("Europe/Moscow");


И только после этого php стал отдавать мне текущую дату в нужной мне временной зоне.


ШляпаТак сякСреднеУже что-тоВери гуд (Ещё нет оценок)
Loading ... Loading ...

Tags: , , , , ,

Класс для реализации работы с протоколом HTTP 1.1 на PHP

Автор: gregor от 14 ноября 2008 в категории Пишем на PHP
3

Представляю вашему вниманию класс на php который реализет работу с протоколом HTTP 1.1. Позволяет отправлять как GET так и POST запросы из скриптов на php. Поддерживает отправку запросы через прокси сервер.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
<?
/*
* Класс реализует работу с протоколом HTTP 1.1
* http://gregor.su
* 2008 &copy; Григорий Скопин
*/

class HttpClient{
    /*** @var string адрес прокси-сервера (если используется)*/
    var $sProxyAddress = NULL;
    /*** @var integer порт прокси-сервера (если используется)*/
    var $iProxyPort = NULL;
    /*** @var array массив строк - заголовков запроса HTTP*/
    var $aRequestHeaders;
    /*** @var array массив строк - заголовков ответа HTTP*/
    var $aResponseHeaders = array();
    /*** @var boolean сжимать ли контент. Сжатие происходит только при наличии модуля ZLIB*/
    var $bCanCompress = false;
    /*** Конструктор*/
    function wkHttpClient(){
        $this->aRequestHeaders = array(
            'User-Agent'  => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; WebMoney Advisor; MRA 5.2 (build 02405)'
            ,'Pragma'  => 'no-cache'
            ,'Expires'  => date("r")
            ,'Connection'  => 'Keep-Alive'
        );
    }
    /*
    * Функция устанавливает заголовки, переопределяя установленные ранее.
    * @param array $aHeaders [in] массив заголовков
    * @return integer true
    */

    function SetHeaders($aHeaders){
        $this->aRequestHeaders = array_merge($this->aRequestHeaders, $aHeaders);
        return true;
    }
    /*
    * Функция устанавливает параметры Basic-аунтификации HTTP
    * @param string $sUser     [in] username
    * @param string $sPassword [in] password
    * @return integer true
    */

    function SetAuthParams($sUser, $sPassword){
        $tmp = base64_encode("$sUser:$sPassword");
        $this->SetHeaders(array('Authorization' => 'Basic '.$tmp));
        return true;
    }
    /* Функция устанавливает адрес Proxy
    * @param string $sAddress [in] адрес прокси-сервера
    * @param integer $iPort   [in] порт прокси-сервера
    * @return integer true
    */

    function SetProxy($sAddress, $iPort = 8080){
        $this->sProxyAddress = $sAddress;
        $this->iProxyPort    = $iPort;
        return true;
    }
    /*
    * Функция устанавливает параметры Proxy-аунтификации
    * @param string $sUser     [in] username
    * @param string $sPassword [in] password
    * @return integer true
    */

    function SetProxyAuthParams($sUser, $sPassword){
        $tmp = base64_encode("$sUser:$sPassword");
        $this->SetHeaders(array('Proxy-Authorization' => 'Basic '.$tmp));
        return true;
    }
    /*
    * Функция выполняет запрос HTTP 1.1 GET
    * @param string $sHost      [in] доменное имя сервера (Пример: ya.ru)
    * @param string $sUrl       [in] путь к файлу на сервере (Пример: /index.html)
    * @param string $iPort      [in] порт сервера, опциональный параметр
    * @return возвращает содержимое страницы или false
    */

    function Get($sHost, $sUrl, $iPort = 80){
        $req_str = "GET /$sUrl HTTP/1.0\r\n"
            ."Host: $sHost\r\n";
        if (is_array($this->aRequestHeaders)){
            foreach($this->aRequestHeaders as $k => $v){
                $req_str .= "$k: $v\r\n";
            }
        }
        // включить сжатие, если поддерживается
        $bCompress = (boolean)extension_loaded('zlib') && $this->bCanCompress;
        if ($bCompress){
            $req_str .= "Accept-Encoding: gzip,deflate\r\n";
        }
        $req_str .= "\r\n";  
        // открываем сокет
        $sock_errno  = 0;
        $sock_errstr = '';
        // выбираем, работать напрямую или через прокси
        if (empty($this->sProxyAddress)){
            $h = $sHost;
            $p = $iPort;
        }else{
            $h = $this->sProxyAddress;
            $p = $this->iProxyPort;
        }
        echo "p=".$p."<br>";
        $sock = @fsockopen($h, $p, $sock_errno, $sock_errstr, 30);
        if (FALSE === $sock) return false;
        // посылаем заголовок HTTP
        $res = fwrite($sock, $req_str);
        if (strlen($req_str) != $res) return false;
        //читаем построчно заголовок ответа HTTP
        $bEndOfHeader = false;
        while (!feof($sock) && !$bEndOfHeader){
            $s = fgets($sock, 1024);
            $this->aResponseHeaders[] = $s;
            // Смотим размер данных
            $param = stristr($s, 'Content-length: ');
            if (is_string($param)){
                $content_length = (integer)substr($s, strlen('Content-length: '));
            }
            // Смотим метод компрессии
            $param = stristr($s, 'Content-encoding: ');
            if (is_string($param)){
                $compress_method = trim( substr($s, strlen('Content-encoding: ')));
            }
            // признак конца заголовка
            if ("\r\n" == $s) $bEndOfHeader = true;
        }
        // читаем данные
        $res = '';
        while (!feof($sock)){
            $tmp = fread($sock, 128);
            $res .= $tmp;
        }
        // закрываем сокет
        fclose($sock);
        // если контент сжат расжать
        if (isset($compress_method)){
            switch ($compress_method){
                case 'gzip' :
                    $res = gzuncompress($res);
                    break;
                case 'deflate' :
                    $res = gzinflate($res);
                    break;
                default:
                    return 1;        
            }
        }
        return $res;
    }
    /*
    * Функция выполняет запрос HTTP 1.1 POST
    * @param string $sHost      [in] доменное имя сервера (Пример: ya.ru)
    * @param string $sUrl       [in] путь к файлу на сервере (Пример: ya.ru)
    * @param string $iPort      [in] порт сервера, опциональный параметр
    * @return возвращает содержимое страницы или false
    */

    function Post($sHost, $sUrl, $iPort = 80, $PostData){
        $len=strlen($PostData);
        $req_str = "POST /$sUrl HTTP/1.0\r\n"
            ."Host: $sHost\r\n"
            ."Content-Type: application/x-www-form-urlencoded\r\n"
            ."Content-Length: $len\r\n\r\n"
            .$PostData;
        if (is_array($this->aRequestHeaders)){
            foreach($this->aRequestHeaders as $k => $v){
                $req_str .= "$k: $v\r\n";
            }
        }  
        // включить сжатие, если поддерживается
        $bCompress = (boolean)extension_loaded('zlib') && $this->bCanCompress;
        if ($bCompress){
            $req_str .= "Accept-Encoding: gzip,deflate\r\n";
        }
        $req_str .= "\r\n";  
        // открываем сокет
        $sock_errno  = 0;
        $sock_errstr = '';
        // выбираем, работать напрямую или через прокси
        if (empty($this->sProxyAddress)){
            $h = $sHost;
            $p = $iPort;
        }else{
            $h = $this->sProxyAddress;
            $p = $this->iProxyPort;
        }
        echo "p=".$p."<br>";
        $sock = fsockopen($h, $p, $sock_errno, $sock_errstr, 30);
        echo "<br>".htmlspecialchars($sock)."<br>";
        if (FALSE === $sock) return false;
        // посылаем заголовок HTTP
        $res = fwrite($sock, $req_str);
        if (strlen($req_str) != $res) return false;
        // читаем построчно заголовок ответа HTTP
        $bEndOfHeader = false;
        while (!feof($sock) && !$bEndOfHeader){
            $s = fgets($sock, 1024);
            $this->aResponseHeaders[] = $s;
            // Смотим размер данных
            $param = stristr($s, 'Content-length: ');
            if (is_string($param)){
                $content_length = (integer)substr($s, strlen('Content-length: '));
            }
            // Смотим метод компрессии
            $param = stristr($s, 'Content-encoding: ');
            if (is_string($param)){
                $compress_method = trim( substr($s, strlen('Content-encoding: ')));
            }
            // признак конца заголовка
            if ("\r\n" == $s) $bEndOfHeader = true;
        }
        // читаем данные
        $res = '';
        while (!feof($sock)){
            $tmp = fread($sock, 128);
            $res .= $tmp;
        }
        // закрываем сокет
        fclose($sock);
        // если контент сжат расжать
        if (isset($compress_method)){
            switch ($compress_method){
                case 'gzip' :
                    $res = gzuncompress($res);
                    break;
                case 'deflate' :
                    $res = gzinflate($res);
                    break;
                default:
                    return 1;        
            }
        }
        return $res;
    }
}
?>

Вот тут он же в архиве

  http_client.inc.rar (2 Кб, Скачено: 519)

Вот пример использования для GET и POST запросов:

1
2
3
4
5
6
7
8
9
10
<?
//Подключаем файл
include ("http_client.inc.php");
//Инициализируем класс
$Soc = new HttpClient();
//Пример отправки GET запроса
$sContentGet = $Soc->Get("ya.ru", "index.html");
//Пример отправки POST запроса
$sContentPost = $Soc->Post("blogus.ru", "/add/default.aspx", 80, $post);
?>

В следующих статьях я на примерах покажу как можно использовать данный класс.


ШляпаТак сякСреднеУже что-тоВери гуд (Ещё нет оценок)
Loading ... Loading ...

Tags: , , ,

 Страница 1 из 1  1 

Подпишись

Облачко тегов

Ссылки

Галерея





Rambler's Top100

Яндекс цитирования

Google PageRank



Рейтинг блогов

Рейтинг блогов

Я - на Карте






BlogMemes.ru

Рейтинг блогов. Заработок в интернете

Рейтинг блогов

Позиция в конкурсе

    Кнопка

Календарь

    Сентябрь 2010
    Пн Вт Ср Чт Пт Сб Вс
    « Март    
     12345
    6789101112
    13141516171819
    20212223242526
    27282930  

Активный месяц

Поиск по сайту

Партнёры











Copyright © 2008 - 2010 Гришкин SEO Блог. Тема от WebGO. Карта сайта. Каталог ссылок.