All posts by amri

Какво е ezSQL и как да го ползваме

Какво е ezSQL?

ezSQL е Open Source PHP клас за връзка с бази данни. Негов автор е Justin Vincent. Този клас поддържа следните бази данни: МySQL, Oracle8, SQLite (PHP).

Защо да ползваме ezSQL?
1. С него се пести време при писането на PHP код.
2. Поддържа кеширане на SELECT заявките.
3. Напълно безплатен, с възможност да се ползва абсолютно във всички възможни проекти.
4. Има възможност за debug .
5. Класа ezSQL поддържа Smarty.
6. Много малък и простичък клас които е напълно функционален и лесен за редактиране при необходимост :)
7. Използването на DB абстрактен слой позволява лесното мигриране от една DB към  друга. Пример: Необходимо е мигриране от Oracle към MySQL. В този случай единственото необходимо нещо да се направи е include на подходящия допълнителен клас към ezSQL.
8. За мен WordPress е сериозен пример за добър проект писан от добри PHP разработчици и именно това дава една положителна точка на ezSQL , понеже DB класа на WordPress "wpdb" е базиран на ezSQL.
9. Чрез ezSQL се пести доста код.

За да не изпадам в излишна теория и обща информация ще започна с примерите(в този случай примерите са най- добрата документация):

Първо трябва да се изтегли ezSQL класа от официалния сайт на Justin Vincent-> Сайт на ezSQL

След като се изтегли е необходимо в нашия пример да се включи( (include) ядрото на ezSQL (ez_sql_core.php) и след това базата с която ще се работи(в случая е MySQL: (ez_sql_mysql.php) ):

include_once "../shared/ez_sql_core.php";
include_once "ez_sql_mysql.php";
$db = new ezSQL_mysql('db_user','db_password','db_name','db_host');

Сега вече можем да правим примера.

1. Простa INSERT/UPDATE заявка:

$db->query("INSERT INTO users (id, name, email) VALUES (NULL,'Ribok','[email protected]')");

или

$db->query("UPDATE users SET name = 'Ribok' WHERE id = 4");

2. SELECT заявка за извеждане на един ред:

$user = $db->get_row("SELECT name, email FROM users WHERE id = 4");

echo $user->name;
echo $user->email;

3. Бързо асоцииране на променлива с резултат от просто select с един ред:

$var = $db->get_var("SELECT count(*) FROM users");

echo $var;

4. SELECT заявка и извеждане на многобройни редове:

$results = $db->get_results("SELECT name, email FROM users");

foreach ( $results as $user )
{
echo $user->name;
echo $user->email;
}

5. Select заявка за конкретна колона:

foreach ( $db->get_col("SELECT name,email FROM users",0) as $name )
{
echo $name;
}

6. Изследване на заявките, чрез DEBUG(Активира се по- следния начин):

$db->debug();

7. Активиране на кеширането на заявки:

$db->cache_timeout = 24;
$db->cache_dir = '/tmp/ezsql_cache';
$db->use_disk_cache = true;
$db->cache_queries = true;

Времето се измерва в часове, но ако желаете да бъде в секунди е необходимо да се направи малка корекция.
Във файл "ez_sql_core.php" ,  ред "317" се заменя:

if ( (time() -- filemtime($cache_file)) > ($this->cache_timeout*3600) )

със:

if ( (time() -- filemtime($cache_file)) > ($this->cache_timeout) )

PS0: Ако някои има някакви допълнения или коментари може да ги сподели.

PS1: В никакъв случай не твърдя, че това е най- страхотния клас, защото има и други добри като AdoDB които е с доста дълга история. Идеята на това ръководство е да бъде в полза на някои търсещ или ползващ такъв клас :).

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

MySQL бележки за работа с повече таблици :)

Прави се заявка за изтриване на всички таблици започващи с oc от база "comptech":

SELECT CONCAT("DROP TABLE ",GROUP_CONCAT(TABLE_NAME)) AS stmt FROM information_schema.TABLES WHERE
TABLE_SCHEMA = "comptech" AND TABLE_NAME LIKE "oc%";

Прави се заявка за изтриване на всички таблици от база "comptech" с изключение на foo,bar,baz

SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
FROM information_schema.tables
WHERE table_schema = 'comptech' AND table_name NOT IN ('foo', 'bar', 'baz');

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

Промяна на Vbulletin парола през MySQL или phpMySQL

Идеята е на форум Vbulletin с userid ='1' да се сетна парола 'parola'(това е администратора):

UPDATE user set password = MD5(concat(MD5('parola'), user.salt)) WHERE userid = 1

Ако таблицата има префикс:

UPDATE labuser set password = MD5(concat(MD5('parola'), labuser.salt)) WHERE userid = 1

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

Грешки при опит за ssh login

Когато се логвах на една машина на един приятел през SSH получих следните грешки. По- долу съм описал и техните решения.

Грешка 1: ssh_exchange_identification: Connection closed by remote host

Решение: Да се проверят следните файлове
/etc/hosts.deny и /etc/hosts.allow

Грешка 2: PTY allocation request failed on channel 0

Решение 2: rm -rf /dev/ptmx;mknod /dev/ptmx c 5 2;chmod 666 /dev/ptmx;umount /dev/pts;rm -rf /dev/pts;mkdir /dev/pts;mount /dev/pts;

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 -- Image Magick на Cent OS

Основни пакети

1. yum install ImageMagick.i386
2. yum install ImageMagick-devel.i386
3. pecl install imagick

4. След като се инсталира imagick трябва да се зареди в php.ini
Kомпилирания модул може да се намери в /usr/lib/php/modules .

echo 'extension=imagick.so' >>  /etc/php.ini

6. Рестартиране на apache2

/etc/init.d/httpd restart

7. Проверяване дали всичко е инсталирано правилно:

Прави се файл info.php със съдържание:

<?php phpinfo(); ?>

Ако всичко е наред вътре ще има секция "imagick"

Грешки възникнали при изпълнение на публикацията:

В1. Няма инсталиран pecl

О1. yum install php-pear

В2. При инсталиране на imagick дава грешка

downloading imagick-3.0.1.tgz …
Starting to download imagick-3.0.1.tgz (93,920 bytes)
…………………done: 93,920 bytes
13 source files, building
running: phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
Please provide the prefix of Imagemagick installation [autodetect] :
building in /var/tmp/pear-build-root/imagick-3.0.1
running: /tmp/tmp2lZYQm/imagick-3.0.1/configure --with-imagick
checking for egrep… grep -E
checking for a sed that does not truncate output… /bin/sed
checking for cc… no
checking for gcc… no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
ERROR: `/tmp/tmp2lZYQm/imagick-3.0.1/configure --with-imagick' failed

О2. yum install gcc

В3. Втора грешка при инсталиране на imagick

sh: make: command not found
ERROR: `make' failed

О3. yum install make

Други интересни неща

За да се видят какви файлове са записани от пакета ImageMagick.i386

yum install yum-utils

repoquery --list ImageMagick.i386

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

VNC сървър на Debian

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

apt-get update && apt-get install tightvncserver xtightvncviewer

Стартиране:

vncserver :1 -geometry 1024×768 -depth 16 -pixelformat rgb565

Спиране:

vncserver -kill :1

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

Насочване на под домейни в Kloxo

Идеята е всеки под домейн да сочи към root директорията на главния домейн т.е.

sub1.domain.tld -> domain.tld (root directory)
sub2.domain.tld -> domain.tld (root directory)
sub3.domain.tld -> domain.tld (root directory)

Идеята е контрола върду домейна и под домейните да се направи от PHP

1. Прави се A запис на DNS сървъра отговарящ за домейна:

* A IP ADDRESS

2. Настройва се kloxo по същия начин както в точка 1

admin -> Server :linux -> Domains -> domain.tld -> Manage Dns

3. Указваме на apache да приема всички под домейни в root директорията на главния домейн
Редактирам конфигурационния файл на Apache за Vhost-a през SSH които в случая е:

/home/httpd/domain.tld/conf/kloxo.domain.tld

Преди:
ServerAlias www.domain.ltd

След:
ServerAlias *.domain.ltd

След промените записваме файла

4. Рестартираме httpd от меню admin-> Server :linux -> Services -> httpd

Добавка към тази публикация: http://mpetrov.net/nasochvane-na-pod-domejni-v-kloxo-chast-2-podredba

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

Увеличаване размера на виртуалния диск на VMware Machine

Проблема е следния: Понеже имам един Windows под VMware с диск 3GB, а в този момент се оказа, че не ми достига мястото заради едно приложение реших да го увелича на 4.5 GB .

В този пост ще стане ясно как се увеличава размер на диск във VMware машина.

1. Първо трябва физически да увеличим размера

Virtual Machine Settings -> Hard Disk (SCSI) -> Utilities -> Expand

избира се новият размер на вирталния диск във VMware

и след известно конвертиране излиза хубавото съобщение, че всичко е готово:

The disk was successfully expanded. You now need to repartition the disk and expand the filesystems from within the guest operating system.

Има и други методи за оразмеряване, но на този е най- лесен:

Друг начин за resize на виртуален диск във VMware е:
1. vmware-vdiskmanager -x {diskSize}GB "virtual_file.vmdk"
2. VMWare converter

2. След като го увеличихме физически остава и Windows-а да види разликата защото в момента си вижда стария размер. За да се получи крайния ефект ще ползваме GParted Live CD които ще boot-нем.

За да накараме VMware да зареди през CD-то ще влезем в BIOS с F2 и ще сложим като първо зареждащо устройство CD-to. След като заредим Gparted ще видим, че стария размер на дяла се вижда съвсем нормално, а новият допълнителен размер се вижда като unallocated. Маркираме стария дял и с десния бутон натискаме Resize като избираме максималната стойност.

След като потвърдим това действие със Apply и рестартираме машината(ще премахнем CD зареждането на Gparted за да си зареди нормално Windows-a) ще видим, че новият размер на дяла е видим за този Windows и всичко е супер.

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

Промяна на Уеб сървър при Kloxo панел

За да се смени активния lighttpd на apache в Kloxo панел трябва да се изпълнет следните действия:

1. В меню: admin -> Server : linux -> Switch Program
В секция Web се избира  "apache" и потвърждава с бутона "Update"

2. В меню:  admin->  Server : linux -> Services
Спиране на lighttpd
Стартиране на httpd

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

Проблем с Joomla 1.0.X и php 5

Идеята е Joomla 1.0.X да се подкара с PHP 5.X.

Когато се направи обаче извежда куп грешки , че половината функции са Deprecated и грешки в някои функции.

Warning съобщенията за Deprecated функциите се крие като се сетне във файл:  /etc/php5/apache2/php.ini :

error_reporting  =  E_ALL & ~E_NOTICE & ~E_DEPRECATED

Друго необходимо нещо е да се едитне файл: /includes/Cache/Lite/Function.php , РЕД 74 и да се направи следната промяна.

Преди:

$arguments = func_get_args();


След:

$arguments = func_get_args();
$numargs = func_num_args();
for($i=1; $i < $numargs; $i++){
$arguments[$i] = &$arguments[$i];
}

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