При использовании модуля пагинации (pagination) в kohana 3.2 столкнулся с неприятным нюансом:
модуль не формировал правильные ссылки.
Имея роут прописанный в bootstrap.php вида:
1 2 3 4 5 6 7 8 | Route::set('catalog', 'catalog(/(/ )(/ .html))') ->defaults(array( 'directory' => 'index', 'action' => 'index', 'controller' => 'catalog', )); |
где <page> используется для постраничной навигации, я получал все ссылки с одинаковым путем:
http://site/catalog/category/n
где n - номер страницы, который не выводился
Проблема оказалась в модуле https://github.com/kohana/pagination входившем ранее в ядро kohanы, он прекрасно работает до версии 3.1., но в kohana 3.2 он не работает.
Для версии 3.2 необходимо использовать модуль пагинации находящийся по ссылке:
https://github.com/kloopko/kohana-pagination
Скрипт приведен с учетом изменения строки запроса Google в сентябре 2011.
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 | <?php //Google PR START function StrToNum($Str, $Check, $Magic) { $Int32Unit = 4294967296; $length = strlen($Str); for ($i = 0; $i < $length; $i++) { $Check *= $Magic; if ($Check >= $Int32Unit) { $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit)); $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check; } $Check += ord($Str{$i}); } return $Check; } function HashURL($String) { $Check1 = StrToNum($String, 0x1505, 0x21); $Check2 = StrToNum($String, 0, 0x1003F); $Check1 >>= 2; $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F); $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF); $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF); $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F ); $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 ); return ($T1 | $T2); } function CheckHash($Hashnum) { $CheckByte = 0; $Flag = 0; $HashStr = sprintf('%u', $Hashnum) ; $length = strlen($HashStr); for ($i = $length - 1; $i >= 0; $i --) { $Re = $HashStr{$i}; if (1 === ($Flag % 2)) { $Re += $Re; $Re = (int)($Re / 10) + ($Re % 10); } $CheckByte += $Re; $Flag ++; } $CheckByte %= 10; if (0 !== $CheckByte) { $CheckByte = 10 - $CheckByte; if (1 === ($Flag % 2) ) { if (1 === ($CheckByte % 2)) { $CheckByte += 9; } $CheckByte >>= 1; } } return '7'.$CheckByte.$HashStr; } function getpagerank($url) { $fp = fsockopen("toolbarqueries.google.com", 80, $errno, $errstr, 30); if (!$fp) {} else { $out = "GET /tbr?features=Rank&sourceid=navclient-ff&client=navclient-auto-ff&ch=" . CheckHash(HashURL($url)) . "&q=info:" . $url . " HTTP/1.1\r\n"; $out .= "Host: toolbarqueries.google.com\r\n"; $out .= "User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { $data = fgets($fp, 128); $pos = strpos($data, "Rank_"); if($pos === false){} else { $pagerank = substr($data, $pos + 9); } } fclose($fp); } return $pagerank; } ?> <? //Yandex TIC START function getTIC($url) { $str=file('http://bar-navig.yandex.ru/u?ver=2&show=32&url='.$url); if ($str==false) { $ans=false; } else { $is_find=preg_match("/value=\"(.\d*)\"/", join("",$str), $tic); if ($is_find<1) { $ans=0; } else { $ans=$tic[1]; } } return $ans; } ?> |
Инклюдите в свой код этот скрипт и вызываете:
<?php $url = 'http://site.com'; getpagerank($url); ?>
Код проверен - 100% полностью рабочий!
Столкнулся с тем, что на некоторых хостингах не работает роутинг у kohana. Я использую Kohana 3.2 с включенным .htaccess и отключенным index.php в url.
На главную страницу попадаем без проблем, а вот при попытке перейти по внутренним ссылкам выдает следующую ошибку:
No input file specified .
При этом все роутинги прописаны правильно. На локальном хостинге все работает корректно.
Поиск в сети дает различные варианты, ниже приведен тот, которым я решил эту проблему.
Пишем в .htaccess
RewriteRule .* index.php/$0 [PT,L]
меняем на
RewriteRule .* index.php?kohana_uri=$0 [PT,L,QSA]
Недавно в связи со сменой дисков перестали работать некоторые программы, которые были установлены по умолчанию для определенного типа файлов.
Решается следующим образом:
1. В консоли - regedit (редактирование реестра).
2. Затем в реестре находим HKEY_CLASSES_ROOT\Applications\
3. Далее ищем свою программу, которые не работает по дефолту. Как правильно, подменю:
shell -> open ->command и дальше видим путь к своей программе - меняем его на правильный и все.
У меня все заработало.
Для запрета доступа к папке сайта используются директивы allow и deny.
Если необходимо запретить доступ с определенного IP-адреса - это будет выглядеть так:
#Запрет с 16:18 31-03-2011 Order allow,deny allow from all Deny from 198.69.132.24
Закрыть доступ ВСЕМ, кроме определенных IP:
Order deny,allow deny from all # Список IP через пробел, с которых доступ разрешен Allow from 194.111.70.48 194.78.47.128
В случае, если необходимо закрыть доступ по маске то используем неполный адрес:
# неполный адрес 198.69. # полные адреса, соответствующие первому 198.69.132.24 198.69.136.89 198.69.1.8
Таким образом, если необходимо закрыть доступ по маске:
#Запрет с 06:18 31-03-2011 Order allow,deny allow from all Deny from 198.69.
Далее, если нам нужно закрыть доступ только к определенной папке:
# Указываем папку, к которой запрещаем доступ <Directory /root-access/> Order allow,deny # Всем, кроме ... allow from all Deny from 198.69. </Directory>
Разрешение доступа только с определенных IP к определенной папке (адреса записываются через пробел):
# Указываем папку, к которой запрещаем доступ по имени хоста и его IP <Directory /root-access/> Order deny, allow deny from all #Адреса записываются через пробел Allow from 198.69.144.98 198.69.144.94 198.69.144.92 </Directory>
Также есть возможность указывать в одном списке и хост-имя и IP-адрес:
# Указываем папку, к которой запрещаем доступ по имени и IP <Directory /root-access/> Order allow,deny # Всем, ... allow from all # ... кроме имя хоста и его IP Deny from robot.fromx.com 148.145.21.14 </Directory>