Upgrade От Debian Etch до Debian Lenny

Ще бъдат кратък, че "много е сложно":
apt-get update && apt-get dist-upgrade

#Заменяте etch със lenny
vim /etc/apt/sources.list
:%s/etch/lenny

apt-get update && apt-get dist-upgrade && reboot

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

Как да си обновя WordPress плъгините google-sitemap-generator и all-in-one-seo-pack от shell

Тук отново няма да описвам кое какво прави понеже е прекалено елементарно всичко. Просто ще напиша как се обновяват WordPress плъгините-  Google Sitemap Generator и All-in-one-seo-pack на сравнително рационално ниво:

Тук очевидно се вижда че става въпрос за update на WordPress Google Sitemap Generator:

cd /example.com/wp-content/plugins/;
wget http://downloads.wordpress.org/plugin/google-sitemap-generator.3.1.7.zip;
unzip -o google-sitemap-generator.3.1.7.zip;
rm -fr google-sitemap-generator.3.1.7.zip;

Тук отново очевидно се вижда, че се прави обновяване на WordPress all-in-one-seo-pack:

cd /example.com/wp-content/plugins/;
wget http://downloads.wordpress.org/plugin/all-in-one-seo-pack.zip;
unzip -o all-in-one-seo-pack.zip;
rm -fr all-in-one-seo-pack.zip;

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

Upgrade на WordPress от shell.

Вместо да обяснявам ред по ред предоставям простo  sh скриптче което прави всичко:

#!/bin/sh
mysqldb="vashata_baza";
mysqluser="vashiqt_user";
mysqlpass="vashata_parola";
wp_dir="/var/yourblog.com/public_html/";
cd /tmp/
echo "Backup your WordPress DB: $mysqldb";
mysqldump -u$mysqluser -p$mysqlpass $mysqldb > /tmp/wordpress_blog.sql
echo "Backup your Old WordPress";
#cp -Rp $wp_dir /tmp/wordpress_blog_backup/
echo "Download new WordPress";
wget -q http://wordpress.org/latest.zip
unzip /tmp/latest.zip
echo "Replace old WordPress files";
cp -avr /tmp/wordpress/* $wp_dir
echo "Delete temp files";
rm -fr /tmp/latest.zip /tmp/wordpress/
echo "Visit http://yourblog.com/wp-admin/upgrade.php"
echo "Click: Upgrade WordPress Database";
echo "Your WordPress is updated successfully"

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

Как да си счупим WordPress блога с php таг

Днес докато си пишех публикация за таговете <?php и <? ми се случи нещо интересно. Случайно добавих таговете <?php и <? в заглавието на публикацията и заради това се счупи цялата публикация. Ето пример на нормална публикация без "<?php" и със "<?php"
broken_wordpress_with_php_tags_before1
Публикували сме най- нормална публикация
broken_wordpress_with_php_tags_error1
Добавяме тага <?php" в заглавието на публикацията.
broken_wordpress_with_php_tags_after1
Виждаме, че нашата публикация е повредена от преди това добавения таг "

Същото може да се каже и за html тагове които не са затворени правилно. Ето пример:

<div style="display:none"

По- горния таг не е затворен правилно и ще повреди вашият пост.

Изводът е винаги да затваряме всеки един таг.

PS: ако в заглавието добавите <?php echo "martin"; ?> или какъвто и да е код НО СЪС ЗАТОВРЕН таг всичко ще бъде наред(няма да го изведе ) и няма да се счупи поста. Всъщност проблема е само когато добавите само таг за отваряне на 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)

Проблем при php.ini с таговете определящи вашия php код

Случвало ли ви се е да направите php файл с тагове

<?
echo "asd";
?>

и този същия файл да не се изпълнява като php, а като html. Причината е, че в настройките на php е указано да се ползва само тагa "<?php
, а не краткия вариант "<?".

За да се предостави възможност да ползваме отварящи тагове "<?php" и "<?" трябва да редактираме php.ini и да направим следната промяна:

; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/short-open-tag
short_open_tag = On

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

Създаване на WordPress plugin

В тази публикация ще опишем с няколко стъпки как може да напишиете WordPress plugin и Вие. Времето което е необходимо за прочитаме и усвояване на информацията е 15 минути.

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

Преди да започнем с писането на WordPress plugin "HelloWorld" е необходимо да имате основни познания по WordPress Plugins :

1. Наименование на разширението

Първата задача преди да започнете да правите WordPress разширение или plugin е да му дадете име и да проверите в хранилището ви (/wp-content/plugins/) с разширения дали има наличен WordPress разширение с името което сте си избрали. Ако името на вашето разширение е уникално то тогава ви остава единствено да продължите напред :) .

2. Директория на разширенията в WordPress
wordpress_plugin_directory1

В по- горния случай на изображението съответния плъгин се съхранява в директория, но това не е задължително. Ако конкретния плъгин се състои от единствен файл(както е нашият плъгин "HelloWorld") то е възможно да бъде поместен директно във /wp-content/plugins/helloworld.php

3. Основна информация за разширението

/*
Plugin Name: HelloWorld
Plugin URI: http://www.mpetrov.net/write_wordpress_plugin_from_scratch
Description: Your First WordPress Plugin- Hello World
Author: Martin Petrov
Version: 0.75
Author URI: http://www.mpetrov.net/
*/

Сигурно забелязвате, че информацията се съхранява като коментар т.е. това не е php код за изпълнение, а просто за информация.

4. Лиценз  на разширението.

Повечето разширения са под лиценза GPL използван и от WordPress или от лиценз съвместим с GPL. За да посочите GPL лиценза като такъв трябва да добавите следните редове по- долу:

<?php

/*  Copyright YEAR  PLUGIN_AUTHOR_NAME  (email : PLUGIN AUTHOR EMAIL)

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
?>

Преди версия 2.0 на WordPress, тези допълнителни визуални плъгини трябваше на ръка да бъдат кодирани в темата и по този начин владееното на PHP беше задължително. Във версия 2.0 и всяка следваща версия е въведена опцията „Widgets" или "Джаджи" от където може да добавяте и премахвате разширения (plugins) като всяка операция може да се извърши с Drag and Drop.

Разширението кеото ще създадем ще можем да менажираме от "Widgets" или „Джаджи" и когато го активираме ще излиза в sidebar на нашата тема.

Хайде да започнем с писането на нашият първи plugin за WordPress:

Първо трябва да създадем php файл които ще се казва: helloworld.php и ще го запишем в директория: /wp-content/plugins/ . В крайна сметка файла ще бъде ето тук: /wp-content/plugins/helloworld.php .  Може да използвате „vim","mcedit","nano","pico","vi" и какъвто редактор решите.

След като създадохме празния файл-plugin е необходимо да добавим общата информация за него. Ето каква ще бъде информацията:

<?php
/*
Plugin Name: HelloWorld
Plugin URI: http://www.mpetrov.net/write_wordpress_plugin_from_scratch
Description: Your First WordPress Plugin- Hello World
Author: Martin Petrov
Version: 0.75
Author URI: http://www.mpetrov.net/
*/

?>

След това добавете основната функция HelloWorld() която ще извежда съобщението „Hello World. I'm your first WordPress plugin":

<?php

function HelloWorld()
{
echo "<b><font color='white'>He</font><font color='green'>llo</font> <font color='red'>World</font>. I'm your first WordPress plugin</b>";
}

?>

Тук очевидно става ясно, че тази функция единствено извежда текст.

Сега добавете по- интересните функции:

<?php

function widget_HelloWorld($args)
{
extract($args);
echo $before_widget;
echo "$before_title <font color='white'>Title</font> <font color='green'>of</font> <font color='red'>Widget</font> $after_title";
HelloWorld();
echo $after_widget;
}
function HelloWorld_init()
{
register_sidebar_widget("Hello World","widget_HelloWorld");
}
add_action("plugins_loaded", "HelloWorld_init");

Сега ще разгледаме функциите по отделно за да се изяснят действията които извършват. Първата функция widget_HelloWorld($args) е за това какво ще се показва в съответния sidebar (когато  плъгина е активиран в Widgets). Може би е добре да забележите , че първо извеждаме съобщение за заглавие и след това викаме функцията която по- рано написахме отново за извеждане на текст HelloWorld() .

Втората функция HelloWorld_init() се извиква когато WordPress плъгина е активиран. Той извиква WordPress функцията която ще регистрира новия Widget plugin които ще нарече „Hello World"

Последния ред от плъгина добавя екшън, чрез които се казва на WordPress да извика HelloWorld_init() когато плъгина е зареден.

Това е кратко ръководоство което не може да покрие цялата информация относто създаването на Wordpress плъгини, но може да ви предостави основна информация. Надявам се, че информацията Ви е била полезна.

Приложение -- файл: helloworld.php:

<?php
/*
Plugin Name: HelloWorld
Plugin URI: http://www.mpetrov.net/write_wordpress_plugin_from_scratch
Description: Your First WordPress Plugin- Hello World
Author: Martin Petrov
Version: 0.75
Author URI: http://www.mpetrov.net/
*/

function HelloWorld()
{
echo "<b><font color='white'>He</font><font color='green'>llo</font> <font color='red'>World</font>. I'm your first WordPress plugin</b>";
}

function widget_HelloWorld($args)
{
extract($args);
echo $before_widget;
echo "$before_title <font color='white'>Title</font> <font color='green'>of</font> <font color='red'>Widget</font> $after_title";
HelloWorld();
echo $after_widget;
}

function HelloWorld_init()
{
register_sidebar_widget("Hello World","widget_HelloWorld");
}

add_action("plugins_loaded", "HelloWorld_init");
?>

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

Немърливост в база данни с InnoDB таблици

Няма да конкретизирам проект или сървър, но ще кажа, че таблицата tablicaX беше локната. За целта реших да проверя каква е MyISAM или InnoDB:

mysql> show create table tablicaX;
ERROR 1033 (HY000): Incorrect information in file: './bazaX/tablicaX.frm'

Не става ясно каква е таблицата. Добре. Реших да предположа, че е масовия енжин MyISAM и направих следното:

myisamchk -r '/var/lib/mysql/bazaX/tablicaXs.frm';
myisamchk: error: '/var/lib/mysql/bazaX/tablicaX.frm' is not a MyISAM-table

На практика нещо определено не е в час,  но какво ?!

Отговорът отново е прост: В my.cnf открих skip-innodb .

Просто си активирате InnoDB енжина и всичко е наред. Кофти е, че MySQL не алармира за спирането на InnoDB engine, но той все пак не е пророк :)

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

Плъгин за WordPress- Поправя проблема с двойното тире и кавичките

Wordpress LogoЗабелязали ли сте, че когато публикувате публикация във WordPress със съдържание от двойно тире "--" или кавични ", то те се презаписват от други подобни символи което не позволява правилното копиране на публикацията. Този проект се решава с този малък плъгин които написах за 2 мин. Ето го и него: Разширение за WordPress .Изтеглете този плъгин и го запишете във /wp-content/plugins/ . След това го активирайте от [Plugins] или ["Разширения"] като натиснете бутона "Включване".

PS:  WordPress plugin for coders. Fix problems with double dashes and quotes. Click here for DOWNLOAD .

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 5.3 на Debian Lenny

Не е необходимо системата да бъде Debian Lenny просто тази в момента е такава(както и да е). Освен, че системата е на Debian Lenny, apache- 2.2 и mysql 5.1 . Преминавам по същество как да инсталираме php  5.3 :) :

Според моите изисквания отностно конфигурацията на PHP споделям следните options:

./configure --prefix=/usr --with-apxs2=/usr/sbin/apxs \
--with-mysql=/usr/local/mysql51/ \
--with-tidy=/usr \
--with-curl=/usr/bin \
--with-curlwrappers \
--with-openssl-dir=/usr \
--with-zlib-dir=/usr \
--with-xpm-dir=/usr \
--with-pdo-mysql=/usr \
--with-xsl=/usr \
--with-ldap \
--with-xmlrpc \
--with-iconv-dir=/usr \
--with-bz2=/usr \
--with-mcrypt=/usr \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-zlib-dir=/usr \
--with-freetype-dir=/usr \
--with-pear \
--with-imap \
--with-kerberos \
--with-imap-ssl \
--with-libedit \
-enable-exif \
-enable-mbstring \
-enable-calendar \
-enable-zip

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

Проблем: configure: error: xml2-config not found. Please check your libxml2 installation.
Решение: apt-get install libxml2-dev

Проблем: configure: warning: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
Решение: apt-get install re2c

Проблем: configure: error: Please reinstall the BZip2 distribution
Решение: apt-get install libbz2-dev

Проблем: configure: error: Please reinstall the libcurl distribution -- easy.h should be in <curl-dir>/include/curl/
Решение: Инсталиране на Curl от тук

Проблем: configure: error: libjpeg.(a|so) not found.
Решение: apt-get install libjpeg62-dev

Проблем: configure: error: libpng.(a|so) not found.
Решение: apt-get install libpng12-dev

Проблем: configure: error: libXpm.(a|so) not found.
Решение: apt-get install libxpm-dev

Проблем: configure: error: freetype.h not found.
Решение: apt-get install libfreetype6-dev

Проблем: configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.
Решение: apt-get install libc-client-dev

Проблем: configure: error: Cannot find ldap.h
Решение: apt-get install libldap2-dev

Проблем: configure: error: mcrypt.h not found. Please reinstall libmcrypt.
Решение: apt-get install libmcrypt-dev

Проблем: configure: error: edit library required by readline not found
Решение: apt-get install libedit-dev

Проблем: configure: error: SNMP sanity check failed. Please check config.log for more information.
Решение: apt-get install libsnmp-dev

Проблем: configure: error: Cannot find libtidy
Решение: apt-get install libtidy-dev

Проблем: configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
Решение: apt-get install libxslt1-dev

Проблем: checking for mcrypt support… yes
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
Решение: apt-get install libmcrypt-dev

След това се изпълнява:

make && make install

Препоръчително е да изпълните преди "make install" "make test"

Voila: Thank you for using PHP.

Необходимо е да активирате php5 модула в Apache 2.2 по- следния метод:

a2enmod php5
Enabling module php5.
Run '/etc/init.d/apache2 restart' to activate new configuration!

/etc/init.d/apache2 restart

За малко да забравим да копираме php.ini в неговата директория :)

cp /tmp/php-5.3.0/php.ini-production /usr/lib/php.ini

Сега ще сетнем и подразбираща времева зона:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone =Europe/Sofia

Идеята е, че ако времевата зона на машината не е сетната правилно и от PHP извикате функция Date() ше ви изведе следната грешка:

Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Sofia' for 'EEST/3.0/DST' instead in /var/www/test1.php on line 2
2009-10-21

Рестартираме (не reload, а restart !) Apache2 за да влязат новите промени в действие.

Това е всичко. Вече имате последна стабилна версия на PHP 5.3

Други проблеми:

Проблем: Зареждате модула php и всичко се очаква да е наред, но Apache все още не php файловете не се изпълняват.
Решение: Трябва да се добави в конф. файл как да се употребяват *.php файловете /etc/apache2/httpd.conf :

<IfModule mime_module>
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps

</IfModule>

Проблем: При php.ini с таговете определящи вашия php код.
Решение натиснете ТУК

PS: Много внимавайте при конфигурацията на PHP с използването на -enable , --with . Забележете, че "enable" е с една чертичка отпред, а "with" с две черти. Ако напишете "--enable" (enable с две чертички) то това ще ви донесе неприятности в къщи :)

<IfModule mime_module>
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps
</IfModule>
VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Как да сетнем wait_timeout na постоянна връзка към mysql- pconnect

По поздразбиране времето за затваряне на persistent connection в MySQL е доста секунди, но аз искам да променя това време на по- малко, примерно 15 секунди. Това може да се направи от my.cnf,  но ще бъде сетване на всички Persistent connections (постоянни връзки), а аз искам само на текущата. Все пак за инфо как се сетва wait_timout в my.cnf

Файл: /etc/mysq/my.cnf
wait_timeout = 1800
/etc/init.d/mysqd restart
Има и друг вариант да сетнете от Mysql, wait_timeout за глобално ползване или чрез: mysql> set global wait_timeout=60 . Но този вариант няма да е така дълготраен колкото по- горния

Тук идеята обаче не е тази. Решението разбира се е както обикновенно доста простично. След като се напарави постоянна връзка се изпълнява сетването на wait_timeout. Ето пример за това:

mysql> set @@session.wait_timeout=360;

След като сетнахме секундите които трябва да изтекат преди да се затвори постоянната връзка сега можем да проверим дали всичко е наред:

mysql> select @@session.wait_timeout,@@global.wait_timeout;
+---------------------------------------+------------------------------+
| @@session.wait_timeout             | @@global.wait_timeout |
+---------------------------------------+-------------------------------+
|                                                    28800 |                                 360 |
+-----------------------------9--------+-------------------------------+
1 row in set (0.00 sec)

Очевидно всеки си е задал въпроса: Защо му е да ограничава persistent connection на 15 секунди след като може да използва обикновенна връзка mysql_connect с възможност за затваряне веднага след изпълнение на скрипта (mysql_close)? Отговорът е защото заявките които се изпълняват са в рамките на 15 секунди т.е. за 15 секунди могат да се изпълнят 20 заявки в случаен интервал т.е. не е ясно кога трябва да се затвори връзката и кога не. За целта използвам pconnect с времеви прозорец 15 секунди и абсолютно всичко работи прекрасно.

PS: Това може да бъде решение на въпроса "mysql_connect има възможност за затваряне след изпълнение mysql_close, но mysql_pconnect няма mysql_pclose" Като се окаже малко време на практика това ще бъде неформално mysql_pclose.

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

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