Ще бъдат кратък, че "много е сложно":
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
Тук отново няма да описвам кое какво прави понеже е прекалено елементарно всичко. Просто ще напиша как се обновяват 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;
Вместо да обяснявам ред по ред предоставям прост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"
Същото може да се каже и за html тагове които не са затворени правилно. Ето пример:
<div style="display:none"
По- горния таг не е затворен правилно и ще повреди вашият пост.
Изводът е винаги да затваряме всеки един таг.
PS: ако в заглавието добавите <?php echo "martin"; ?> или какъвто и да е код НО СЪС ЗАТОВРЕН таг всичко ще бъде наред(няма да го изведе ) и няма да се счупи поста. Всъщност проблема е само когато добавите само таг за отваряне на 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
В тази публикация ще опишем с няколко стъпки как може да напишиете WordPress plugin и Вие. Времето което е необходимо за прочитаме и усвояване на информацията е 15 минути.
Разширенията във WordPress позволяват лесно редактиране и персонализиране на вашият WordPress блог. С разширенията на WordPress може да добавите нови функции без да е необходимо препрограмирането из основи на WordPress ядрото.
Преди да започнем с писането на WordPress plugin "HelloWorld" е необходимо да имате основни познания по WordPress Plugins :
1. Наименование на разширението
Първата задача преди да започнете да правите WordPress разширение или plugin е да му дадете име и да проверите в хранилището ви (/wp-content/plugins/) с разширения дали има наличен WordPress разширение с името което сте си избрали. Ако името на вашето разширение е уникално то тогава ви остава единствено да продължите напред :) .
2. Директория на разширенията в WordPress
В по- горния случай на изображението съответния плъгин се съхранява в директория, но това не е задължително. Ако конкретния плъгин се състои от единствен файл(както е нашият плъгин "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");
?>
Няма да конкретизирам проект или сървър, но ще кажа, че таблицата 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, но той все пак не е пророк :)
Забелязали ли сте, че когато публикувате публикация във WordPress със съдържание от двойно тире "--" или кавични ", то те се презаписват от други подобни символи което не позволява правилното копиране на публикацията. Този проект се решава с този малък плъгин които написах за 2 мин. Ето го и него: Разширение за WordPress .Изтеглете този плъгин и го запишете във /wp-content/plugins/ . След това го активирайте от [Plugins] или ["Разширения"] като натиснете бутона "Включване".
PS: WordPress plugin for coders. Fix problems with double dashes and quotes. Click here for DOWNLOAD .
Не е необходимо системата да бъде 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 с две чертички) то това ще ви донесе неприятности в къщи :)
По поздразбиране времето за затваряне на 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.