Category Archives: Web

Web

Често срещани проблеми с encoding при php

Случвало ли ви се е да имате стринг които е написан с cp1251 и които да искате да конвертирате в utf-8. Най- вероятно да, но случвало ли ви се е да имате стринг които е написан или на cp1251 или на utf-8 предполагам, че на доста няма да им се е налагало затова реших да напиша тази публикация за лесното на следващите след мен.
Имаме стринг "Това е текст" но незнаем на какъв енкодинг е. Преди да го конвертираме в utf-8 или cp-1251 първо трябва да знаем какъв е и след това е ясно. Ето разиграно решение:

<?php

$s_utf8=iconv("CP1251","UTF-8","Това е текст- ЮТФ-8");
$s_cp1251="Това е текст- ЦП1251";

$check1=mb_detect_encoding($s_utf8,'UTF-8,CP1251');
$check2=mb_detect_encoding($s_cp1251,'UTF-8,CP1251');

echo "[$s_utf8 <-><b>$check1</b>] -- [$s_cp1251 <-> <b>$check2</b>]";

?>

Ето примерен проблем при конвертиране с iconv:

<?php
iconv("UTF-8","CP1251",$s_cp1251);
iconv("CP-1251","UTF-8",$s_utf8);
?>

В горното казваме, че искаме да конвертираме UTF-8 към cp-1251, но това няма как да се реализира понеже стринга е CP1251. Същата тази грешка се получава и при следващото . Именно поради тази причина преди да се конвертира даден стринг към друг енкодинг трябва да се знае какъв е бил преди и какъв да бъде след.

Ето ви две функции за конвертиране от UTF8 към CP1251 и втората отново за конвертиране на CP1251 към UTF8, но с проверка за текущия входящ стринг. При тези две функции може да конвертирате без наличие на iconv.

function cp1251_to_utf8($s)
{
function detect_encoding($string)
{
static $list = array('utf-8', 'windows-1251');
foreach ($list as $item)
{
$sample = iconv($item, $item, $string);
if (md5($sample) == md5($string))
return $item;
}
return null;
}

if ( (detect_encoding($s)) == "windows-1251")
{
$c209 = chr(209); $c208 = chr(208); $c129 = chr(129);
for($i=0; $i<strlen($s); $i++)
{
$c=ord($s[$i]);
if ($c>=192 and $c<=239) $t.=$c208.chr($c-48);
elseif ($c>239) $t.=$c209.chr($c-112);
elseif ($c==184) $t.=$c209.$c209;
elseif ($c==168)    $t.=$c208.$c129;
else $t.=$s[$i];
}
return $t;
}
else
{
return $s;
}
}//End of function cp1251_to_utf8($s)

function utf8_to_cp1251($s)
{
if ((mb_detect_encoding($s,'UTF-8,CP1251')) == "UTF-8")
{
for ($c=0;$c<strlen($s);$c++)
{
$i=ord($s[$c]);
if ($i<=127) $out.=$s[$c];
if ($byte2)
{
$new_c2=($c1&3)*64+($i&63);
$new_c1=($c1>>2)&5;
$new_i=$new_c1*256+$new_c2;
if ($new_i==1025)
{
$out_i=168;
} else {
if ($new_i==1105)
{
$out_i=184;
} else {
$out_i=$new_i-848;
}
}
$out.=chr($out_i);
$byte2=false;
}
if (($i>>5)==6)
{
$c1=$i;
$byte2=true;
}
}
return $out;
}
else
{
return $s;
}
}

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Конструкции на SQL за поддръжка на таблици в MySQL

MySQL притежава няколко конструкции на SQL за поддръжка на таблици: CHECK TABLE за проверка на целостта им, REPAIR TABLE за извършване на поправка, ANALYZE TABLE за анализ и OPTIMIZE TABLE за оптимизиране.  Следва малко информация за всяка от конструкциите за поддръжка на таблици в MySQL:

CHECK TABLE

Конструкцията CHECK TABLE извършва проверка за целостта на структурата и съдържанието на съответната таблица. Тя е приложима и за MyISAM, и за InnoDB. За таблиците от тип MyISAM се осъществява също и актуализиране на статистиката на индексите. Ако дадената таблица с изглед, с CHECK TABLE се проверява дефиницията му. Ако данните, изведени от CHECK TABLE показват наличие на проблем с таблицата, тя трябва да бъде поправена.

REPAIR TABLE

Конструкцията REPAIR TABLE служи за коригиране на проблеми в таблица, която е повредена. Тя е приложима само за таблици от тип MyISAM. Можете да конфигурирате автоматична поправка на таблиците на MyISAM.

Пример: repair table dhstudio

ANALYZE TABLE

Конструкцията ANALYZE TABLE служи за актуализиране на таблица с информация за разпределението на ключовите стойности в нея. Тя се използва от оптимизатора за избор на по- подходящи планове за изпълнението на заявки. Тази конструкция работи с таблици на MyISAM и InnoDB.

Пример: analyze table dhstudio

OPTIMIZE TABLE

Конструкцията OPTIMIZE TABLE служи за "изчистване" на таблици от тип MyISAM чрез дефрагментирането им. Резултатът е повторното разпределяне на неизползваното пространство, получено в резултат от изтриване и актуализации, както и обединяване на записите, които са били разделени и съхранени разпокъсано. OPTIMIZE TABLE се използва също така за сортиране на индексните страници, ако не са подредени, както и за актуализиране на статистиката за индексите.
OPTIMIZE TABLE работи и с таблици на InnoDB, но ги пренасочва към конструкцията ALTER TABLE, която ги изгражда наново. По този начин се актуализира статистиката за индексите и се освобождава място в клъстерния индекс.

Пример:  optimize table dhstudio

Ако искате да разберете кои таблици трябва да оптимизирате изпълнете следното:

show table status where Data_free!=0;

По този начин ще фрагментирате таблиците които се нуждаят от това, а не тези които са фрагментирани.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Забиване на статичен енкодинг

Случвало ли ви се е да искате да забиете енкодинг за цял уеб сайт от Apache, а не от самите страници. Има много варианти за това, но аз ще предложа htaccess.
Във .htaccess добавяме следния ред:

AddCharset cp1251 .html

С този ред казваме, че всички .html файлове ще бъдат изпълнени със Charset Windows-1251 или cp-1251.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Изпълнение на php в прост html файл

Реших да напиша тази публикация понеже доста хора знаят как да пишат и изпълняват php скриптове във *.php файлове и още толкова много хора незнаят как да изпълняват php в статичен html файл.

1. Трябва да направите промени в MIME Конфигурацията, а именно да добавите:

RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html

Може да добавите тези редове във виртуалня хост, в apache2.conf както и в .htaccess

2. Да вмъкнем php в html- Пример:

<html><head><title>Primer za izpylnenie na php w html</title>
</head>
<body>
<i>Red 1 statichen w html</i>
<br>
<b>Red 2 dinamichen ot php</b></body>
</html>

Изпълнението е следното:

Red 1 statichen w html
Red 2 dinamichen ot php

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Процент на кликове в ТОП 10 резултати

Случвало ли ви се е когато търсите нещо в интернет търсачките да си зададете въпроса колко процента от посетителите кликат на първата позиция, втора, третата и т.н. Тук с тази таблица предоставена от seosearcher можете най- нагледно да си изясните всичко, а именно, че пърият резултат привлича над 50% от потребителите.

click-distribution-serp

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Какво да направите ако получите: semget() failed: Permission denied in wp-cache error

Преди малко на един блог с платформа WordPress с плъгин WP-cache изплю следния проблем : "

Warning: sem_get() [function.sem-get]: failed for key 0x152b: Permission denied in /WEB/haha-bg.com/public_html/wp-content/plugins/wp-cache/wp-cache-phase2.php on line 98

Warning: Cannot modify header information -- headers already sent by (output started at /WEB/haha-bg.com/public_html/wp-content/plugins/wp-cache/wp-cache-phase2.php:98) in /WEB/haha-bg.com/public_html/wp-includes/pluggable.php on line 865

За да поправите проблема трябва да намерите конфигурационния файл на wp-cache може да бъде намерен във директорията /wp-content/ или в случая е:
/source1/haha-bg.com/public_html/wp-content/wp-cache-config.php

Трябва да премхнем коментара от променливата $use_flock като по този начин и задаваме стойност "true"

<?php
/*
WP-Cache Config Sample File

See wp-cache.php for author details.
*/

$cache_enabled = true; //Added by WP-Cache Manager
$cache_max_time = 1600; //Added by WP-Cache Manager
$use_flock = true; // Set it tru or false if you know what to use
$cache_path = ABSPATH . 'wp-content/cache/';
$file_prefix = 'wp-cache-';

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Доста сериозен проблем с един сайт

Един от сайтове ми имаше толкова голяма натоварване, че чак увисваше целия сайт + машината, понеже умишлено не съм разделил ресурсите които да могат да ползват. Започнах да разглеждам къде е проблема и признавам отнеме ми време за да го открия. След като вече знам къде е проблема се чудя що за простотия и колко лесно можех да се досетя, но уви…

Проблема беше в изпълнението на :

"select w from $mysql_table ORDER BY RAND() LIMIT $max_tags;"

Изпълнеието на тази mysql  заявка беше не толкова натоварващо като такова, а че се изпълнява 600 пъти в рамките на няколко секунди поради високата посещаемост на този сайт.

Извод: Ако смятате да правите популярен сайт или приложение което да се ползва от много хора онлайн НЕ ВИ ПРЕПОРЪЧВАМ ДА ИЗПОЛЗВАТЕ  MySQL функцията RAND() (без кеширане) или просто използвайте друг метод за случайно извеждане.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Списък със сайтове в България предоставящи sms реклама

Уеб сайт: www.etaj55.com
Описание: Развлекателен сайт -- запознанства, музика, клипове, блогове, игри, виртуален магазин.
Активност: 5 000 импресии
Мобилни оператори: ГлоБул, ВиваКом и Мтел.
Цена на изпратен SMS: 1.20 лв (вкл. ДДС)
Префикс при изпращане: неизвестен
Номер за изпращане на sms:неизвестен
Пример за изпращане: неизвестен
Директна връзка към страницата за SMS реклама: ТУК
Статус: Не активен

Уеб сайт: www.stranabg.com
Описание: Страна БГ -- дайджест на българските медии
Активност: 7 дни
Мобилни оператори: ГлоБул, ВиваКом и Мтел.
Цена на изпратен SMS: 4.80 лв (вкл. ДДС)
Префикс при изпращане: payst или „pay st"
Номер за изпращане на sms: 1703
Пример за изпращане: „payst www.referati.org"
Директна връзка към страницата за SMS реклама: ТУК
Статус: Активен

Уеб сайт: www.stroitelbg.com
Описание: Строителен Форум
Активност: 7 дни
Мобилни оператори: неизвестни
Цена на изпратен SMS: 1.20 лв (вкл. ДДС)
Префикс при изпращане: неизвестен
Номер за изпращане на
sms: неизвестен
Пример за изпращане:
неизвестен
Директна връзка към страницата за
SMS реклама: ТУК
Статус: Не активен

Уеб сайт: www.bulgar-bg.com
Описание:
Булгар-портал за БЪЛГАРИ!
Активност: Всяко следващо съобщение избутва предишните и се позиционира на първо място. (от 10 позиции)
Цена на изпратен SMS: 0.60 лв (вкл. ДДС)
Префикс при изпращане:paybul"
Номер за изпращане на sms: 1518
Пример за изпращане:
paybul www.referati.org"
Директна връзка към страницата за
SMS реклама: ТУК
Статус: Активен

Уеб сайт: www.music-joy.net
Описание: Музикален сайт
Активност: Рекламният линк е активен, докато не бъде изместен от други линкове
Цена на изпратен SMS: 1.20 лв (вкл. ДДС)
Префикс при изпращане: неизвестен
Номер за изпращане на sms: неизвестен
Пример за изпращане: неизвестен
Директна връзка към страницата за
SMS реклама: ТУК
Статус: Не активен

Уеб сайт: www.prosoccer.bg
Описание: Сайт за професионални спортни прогнози
Активност: Рекламният линк е активен, докато не бъде изместен от други линкове
Цена на изпратен SMS: 1.20 лв (вкл. ДДС)
Префикс при изпращане:PAY REK"
Номер за изпращане на sms: 2323
Пример за изпращане: "PAY REK www.referati.org"
Директна връзка към страницата за
SMS реклама: ТУК
Статус: Активен

Уеб сайт: www.bgflash.org
Описание: Он-лайн флаш игри, Класации, Турнири, Награди, Снимки, Профили
Активност: 2 500, 5000 и 10 000 импресии
Цена на изпратен SMS: 0.60, 1.20 и 2.40 лв (вкл. ДДС)
Префикс при изпращане:pay bgflash"
Номер за изпращане на sms: 2225
Пример за изпращане: "pay bgflash"
Директна връзка към страницата за
SMS реклама: ТУК
Допълнителна информация: След като изпратите sms трябва да отворите допълнителната форма и да въведете номера от които изпращате предния sms. В тази форма може да добавяте информация за линка или линк към банер.
Статус: Активен

Уеб сайт: www.dupeta.net
Описание: Сайт за запознанства
Активност: 10 000 импресии
Цена на изпратен SMS: 4.80 лв (вкл. ДДС)
Префикс при изпращане:media"
Номер за изпращане на sms: 1703
Пример за изпращане: "media"
Директна връзка към страницата за
SMS реклама: ТУК
Допълнителна информация: След като изпратите sms  ще получите уникален код които трябва да въведете ТУК.
Статус: Активен

Уеб сайт: www.cs-bg.info
Описание: Counter-Strike портал
Активност: 10 000 и 50 000 импресии
Цена на изпратен SMS: 1.20 лв. , 2.40 лв. (вкл. ДДС)
Префикс при изпращане: неизвестен
Номер за изпращане на sms: неизвестен
Пример за изпращане: неизвестен
Директна връзка към страницата за
SMS реклама: ТУК
Допълнителна информация: Преди да изпратите SMS трябва да се регистрирате в сайта.
Статус: Активен

Уеб сайт: www.moetodete.com
Описание: Моето Дете: Сайт-форум за настоящи и бъдещи родители и педагози
Активност: 10 000 импресии
Цена на изпратен SMS: 1.20 лв. (вкл. ДДС)
Префикс при изпращане: pay mdrec
Номер за изпращане на sms: 1923
Пример за изпращане: pay mdrec 25
Директна връзка към страницата за SMS реклама: ТУК
Допълнителна информация: Необходимо е да изпратите рекламен банер на adres nfmoetodete[at]abv.bg и ще получите ID на банера си. За да закупите 1 000 импресии за Вашият банер изпратете един смс
Статус: Активен

Уеб сайт: www.auto.italiabg.com
Описание: Уеб сайт за автомобили
Активност: Всеки линк е в режим на публикуване, докато не достигне минимум 100 клика
Цена на изпратен SMS: 1.20 лв. (вкл. ДДС)
Префикс при изпращане: "payit"
Номер за изпращане на sms: 2216
Пример за изпращане: "payit www.referati.org"
Директна връзка към страницата за SMS реклама: ТУК
Статус: Активен

Уеб сайт: www.pismo.bg
Описание: Електронна поща
Активност: 24 часа
Цена на изпратен SMS: 1.20 лв. , 2.40 лв. (вкл. ДДС)
Префикс при изпращане: "get pismo 4"
Номер за изпращане на sms: 2323
Пример за изпращане: "get  pismo  4"
Директна връзка към страницата за SMS реклама: ТУК
Допълнителна информация: Изпратете текст „get pismo 4" след което ще получите обратен смс със идентификатор които трябва да въведете ТУК
Статус: Активен

Уеб сайт: www.obiavite.biz
Описание: Сайт за безплатни обяви
Активност: 1, 4 и 14 дневна VIP обява
Цена на изпратен SMS: 0.60 лв, 1.20 лв. , 2.40 лв. (вкл. ДДС)
Префикс при изпращане: неизвестен
Номер за изпращане на sms: неизвестен
Пример за изпращане: неизвестен
Директна връзка към страницата за SMS реклама: ТУК
Статус: Активен

Уеб сайт: www.naemite.com
Описание: Специализиран портал за безплатни обяви за наеми
Активност: Рекламният линк е активен, докато не реализира 30 клика
Цена на изпратен SMS: 0.30 лв. (вкл. ДДС)
Префикс при изпращане: неизвестен
Номер за изпращане на sms: неизвестен
Пример за изпращане: неизвестен
Директна връзка към страницата за SMS реклама: ТУК
Статус: Не активен

VN:F [1.9.22_1171]
Rating: 5.0/5 (2 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Възстановяване на нормалния текст във Firefox

firefoxПредполагам знаете, че Firefox има възможност да уголемявате и респективно да намалявате текста на всяка уеб страница. Пример за увеличаване е клавишната комбинация (Shortcut) "Ctrl" и "+" и за смаляване на текста "Ctrl" и "-" .

Проблем тук е, че тези две клавишни комбинации са доста широко разпространени за сметка на третата комбинация за възстановяване на първоначалната големина на текста. Възстановяването става чрез натискане на следните бутони "Ctrl" и "0"(нула) .

На практика съм виждал доста хора които ползват функцията за увеличаване на текст върху конкретен сайт и след това незнаят какво увеличение са направили на сайта поради това сайтът се чупи. Опитват да затворят браузъра и да отворят сайта отново, но уви сайтът е отново счупен. За целта се използва клавишната комбинация "Ctrl" + "0"(нула) която възстановява стандартната големина на текста в конкретната страниаца.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Динамично добавяне на ред в html

Икона на htmlДнес се наложи да правя/редактирам едно малко приложение в което се налага да се менажират редовете в таблица без да се релоадва страницата. Тъй като съм го правил доста пъти реших да потърся другите методи и начини и да понапиша малко за това. Преводох, добавях, редактира и като цяло ето една публикация която има за цел да ви обясни как динамично, чрез javascript да добавяте,редактиране,изтриване редове или коловини в таблиците на html :).
Ето я публикацията: Динамично добавяне на ред в таблица, чрез innerHTML срещу DOM срещу cloneNode

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)