Инсталиране на Curl

Тази статия има за цел да я предостави информация как се инсталира Curl версия 7.19.6:

wget http://curl.haxx.se/download/curl-7.19.6.tar.gz
tar zxvf curl-7.19.6.tar.gz
cd curl-7.19.6

./configure --with-ssl \
--with-gnutls \
--disable-libssh2 \
--disable-ldaps \
--disable-ldap \
--disable-sspi \
--disable-libidn \
--disable-ares \
--disable-spnego \
--disable-gssapi \
--disable-krb4

make && make install

Проблем при изпълнението на ./configure:

configure: WARNING: SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.
configure: WARNING: Use --with-ssl, --with-gnutls or --with-nss to address this.
Решение: apt-get install libssl-dev

Промени в последната версия 7.19.6:

Changes:

* CURLOPT_FTPPORT (and curl's -P/--ftpport) support port ranges
* Added CURLOPT_SSH_KNOWNHOSTS, CURLOPT_SSH_KEYFUNCTION, CURLOPT_SSH_KEYDATA
* CURLOPT_QUOTE, CURLOPT_POSTQUOTE and CURLOPT_PREQUOTE can be told to ignore error responses when used with FTP

Bugfixes:

* crash on bad socket close with FTP
* leaking cookie memory when duplicate domains or paths were used
* build fix for Symbian
* CURLOPT_USERPWD set to NULL clears auth credentials
* libcurl-NSS build fixes
* configure script fixed for VMS
* set Content-Length: with POST and PUT failed with NTLM auth
* allow building libcurl for VxWorks
* curl tool exit codes fixed for VMS
* --no-buffer treated correctly
* djgpp build fix
* configure detection of GnuTLS now based on pkg-config as well
* libcurl-NSS client cert handling segfaults
* curl uploading from stdin/pipes now works in non-blocking way so that it continues the downloading even when the read stalls
* ftp credentials are added to the url if needed for http proxies
* curl -o -- sends data to stdout using binary mode on windows
* fixed the separators for "array" style string that CURLINFO_CERTINFO returns
* auth problem over several hosts with re-used connection
* improved the support for client certificates in libcurl+NSS
* fix leak in gtls code
* missing algorithms in libcurl+OpenSSL
* with noproxy set you could still get a proxy if a proxy env was set
* rand seeding on libcurl on windows built with OpenSSL was not thread-safe
* fixed the zero byte inserted in cert name flaw in libcurl+OpenSSL
* don't try SNI with SSLv2 or SSLv3 (OpenSSL and GnuTLS builds)
* libcurl+OpenSSL would wrongly acknowledge a cert if CN matched but subjectAltName didn't
* TFTP upload sent illegal TSIZE packets

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

Fatal error: Call to undefined function xmlrpc_encode_request()

Лошава грешка. Очевидно които е ползва xmlrpc знае за какво иде реч, но все пак за тези които не са просветлени. Повече информация за функцията може да намерите тук: php.net .
Проблемът с xmlrpc_encode_request се решава като се инсталира модула за xmlrpc, а именно при Debian:

apt-get install php5-xmlrpc

Това е всичко сега вече функцията xmlrpc_encode_request работи страхотно.

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

Често срещани проблеми с 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)

Спиране на SYN Flood чрез sysctl и iptables

На една машина нямаше правила за спиране на syn flood и трябваше да добавя такива. Понеже се сетих, че преди много години това беше сериозен проблем реших да напиша тази кратка публикация която обяснява как се спира съответния syn flood. Ако искате да тествате дали вашата машина е подвластна на syn flood може да тествате със hping3 или по- конкретно:

hping3 --faster -S  example.com
#Ако искате да конкретизирате порт, ето така:
hping3 --faster -S  example.com -p 80

Ако машината ви замръзне или се случи натоварване то определено имате проблем :).

Ето решение на проблема чрез използване на sysctl + iptables :

Файл: Sysctl.conf

net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_max_syn_backlog = 2048

Записване и презареждане на sysctl:

sysctl -p

Промени в iptables(създаване на верига syn-flood) :

iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 100/s --limit-burst 150 -j RETURN
iptables -A syn-flood -j DROP

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

Проблем с phpmyadmin

Днес ми репортнаха за един от моите инсталирани phpmyadmin, че извеждал грешка :
PHPMYADMIN The configuration file now needs a secret passphrase (blowfish_secret).

Решението е:

Отваряте файл /var/lib/phpmyadmin/blowfish_secret.inc.php
и се копира този ред където е въведен вашият blowfish. Пример:
$cfg['blowfish_secret'] = 'Примерен hesh81927398akjhasdklfj';

Копираната променлива и хеш записвате в най- долния ред на файла /etc/phpmyadmin/blowfish_secret.inc.php

След това презареждате phpmyadmin от браузъра и всичко е наред. :)

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

Сетване на Charset UTF8 при mount на cd

Случвало ли ви се е под GNU/Linux да се опитате да монтирате диск в които всичкото съдържание е на кирилица. Предполагам да. В моя случай имах проблем с това, а именно енкодинга по подразбиране с които монтира диска не отговаряше на реалния. За целта статично казвам, че енкодинга трябва да бъде UTF8.

Ето пример как става монтиране на CD с charset UTF8:

mount -t iso9660 /dev/cdrom /media/cdrom -o iocharset=utf8

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

Телефон на услуги за България

Преди телефона на услуги беше 144 или 145, но от както промениха толкова пъти телефона така и не стана ясно какъв е телефона на услуги.

Телефон за услуги (телефонен номер): 11 800

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

Система за непрекъснато подаване на мастило

Система за непрекъснато подаване на мастилоРеших да изложа малко информация за системите за непрекъснато подаване на мастило понеже няма много информация  или ако има се намира адски трудно.

Може ли мастиленоструйният принтер да печата евтино?

Отговорът на този въпрос можем да открием в СНПМ (системи за непрекъснато подаване на мастило). Задачата на тези системи е да обезпечи непрекъснатото подаване на мастило към печатащата глава на принтера, в зависимост от разхода му. Системите се състоят от:

резервоари за мастило, които са многократно по-големи от оригиналните касети;

многоканални силиконови тръби, свързващи резервоарите със специални касети;

касети, снабдени със само-нулиращи се чипове.

Описаните системи позволяват да се увеличи значително обема на печат, в сравнение с оригиналните касети, както и да се използват алтернативни мастила в разфасовки от 100 до 1000 мл, които са в пъти по-евтини.

Положителните страни на СНПМ са:

висока стабилност на качеството на печат. То се постига благодарение на постоянното налягане на мастилото в печатащата глава и не зависи от нивото на мастилото в резервоарите;

повишена безопасност при печат -- няма риск от попадане на въздух в главите при смяна на касетите;

повишаване обема на печат без риск от внезапно свършване на мастилото в касетата;

намаляване себестойността на печат от 10 до 30 пъти;

запазване на гаранцията на принтера -- поставянето на СНПМ не води до механични повреждания на принтера;

системата ще увеличи живота на вашия принтер.

За отрицателните страни на системите:

Няма такива!!!

При поставянето трябва да се обърне внимание на мястото и начина на монтиране на силиконовите тръби -- те не трябва да се оплитат и да пречат на движението на главите. Единственото негативно нещо за вашия принтер е използването на некачествени мастила, те могат да запушат печатащата глава.

Поевтиняването на печата може да се изчисли за определен принтер -- например за Epson Photo R300:

Оригиналната касета съдържа 13ml = 430 страници А4 при 5% запълване (посочения брой страници е даден от Epson). При 100% запълване една касета отпечатва 21,5 страници. При така направения разчет една страница се покрива на 100% с 13/21,5=0,605 ml. При цена около 25 лв. за оригинална касета -- цената на мастилото за една отпечатана страница А4 100% е 0,605*25/13=1,16 лв.

При използване на съвместими касети за този принтер (на цена около 12 лв. за касета) цената пада на 0,605*12/13=0,56 лв.

Когато печатаме със СНПМ и цена на мастило за Epson R300 около 24 лв. за 200 ml, стойността на една отпечатана страница А4 със 100% запълване вече е 0,605*24/200=0,073 лв. (няма грешка)!!!

Цената на СНПМ за този принтер е 150 лв., което е съизмеримо с цената на един комплект оригинални касети.

Системите за непрекъснато подаване на мастило се използват предимно в принтери с дълъг живот на главите. Такива са почти всички модели на Epson и Canon.

Източник: Варна Бит

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)

Личен Блог на Мартин Петров