PHP и MySQL




Быстрый перенос сайта на ModX Evo на другой сервер

Interface & Features в ModX Evo

Для переноса сайта, сделанного на системе управления сайтом ModX Evo, требуется потратить в среднем не более 15 минут в зависимости от скорости интернета. Но необходимо проделать следующие шаги (далее...)


Сортировка по дате в ModX Evolution и Ditto

Столкнулся с трудностью сортировки по дате публикаций в CMS ModX Evolution.
Ввод даты осуществляется с помощью TV-параметра с названием datepub - надо было, чтобы дата публикация фактическая и отображаемая были независимы.
После долгих мучений сортировки в Ditto, который упорно сортировал не по дате, а по числу, (далее...)


Изменение урл без бана поисковиками

Однажды я сменил CMS у сайта, вследствие чего поменялись адреса страниц. Оказалось, так делать нельзя, ибо поисковики, особенно факинг яндекс, вместо анализа текстов, тупо банит сайт. Оказалось, надо делать 301 редирект.

Redirect 301 /page/oldpage http://markimarta.ru/pages/newpage

Естесственно, адреса своих страниц и урлов надо подставить


Как лучше изучать технические предметы?

Я всегда учил по книжкам. Читал, разбирался. Один раз ходил на курсы по программированию для профессионалов на PHP. С тем, что мне там преподали, разобраться сам не мог. Но зато теперь самостоятельно C# осваиваю по учебнику в прямом смысле - все настолько понятно, что даже удивляюсь, как я раньше не мог на этом языке писать? 🙂


SSH выборка и копирование файлов

Команда cpio позволяет создавать и распаковывать архивы, или копировать файлы с одного места в другое. cpio может считывать и писать в tar файлы. cpio работает подобно утилите tar, возможно даже лучше.

Как я писал выше, cpio работает подобно tar, но так же может принимать данные с стандартного ввода, например вот таким образом мы используя команду find найдем все файлы с расширением *.c и заархивируем их.

# find / -name "*.c" | cpio -o --format=tar > c-file.backup.tar
# find / -iname "*.pl" | cpio -o -H tar > perl-files.tar

Мы также можем указать имя архива используя опцию -F:

# find / -iname "*.pl" | cpio -o -H tar -F perl-files.tar

Где,

* -o: создать архив
* -F: имя архива
* -H format: Указание используемого формата файла.
* -i: распаковка архива

Вы можете распаковать архив следующей командой:

# cpio -i -F perl-files.tar

Получаем список файлов в архиве:

# cpio -it -F perl-files.tar

Архивируем директорию /home на ленту ( /dev/nst0):

# find /home | cpio -o -H tar -F /dev/nst0

Восстанавливаем бэкап используя следующую команду:

# cpio -i -F /dev/nst0

Бэкапим директорию /home на удаленную систему:

# find /home | cpio -o -H tar -F user@backup.nixcraft.in:/dev/nst0 --rsh-command=/usr/bin/ssh


Mysql update нескольких строчек по условию

Иногда нужно обновить в таблице MySql n-ое количество строк. Причем вставить не одно значение, а несколько в зависимости от условия.

Запрос будет таким

UPDATE tbl_name  SET fld = CASE

WHEN pid=16 THEN '1'

WHEN pid=17 THEN '2'

WHEN pid=19 THEN '54'

ELSE fld END;

Причем если не поставить в конце ELSE fld, то все не подходящие по условию значения будут обнулены.

Для вставки синтаксис проще

INSERT INTO mytable (id, title) VALUES ('1', 'val1'), ('2', 'val2');


Регулярные выражения

Регулярные выражения Perl - мощный инструмент для поиска и обработки текста, в то же время позволяющий реализовать в одной строке программного кода довольно сложные операции.

В качестве примера можно привести такую задачу: нужно заменить в какой-либо строке все знаки "+" на пробелы. В воплощении на C это выглядело бы так:

void PlusToSpace(char *str) { register int i; for (i=0;str[i];i++) if(str[i]=='+') str[i]=' '; }

На Perl же эта задача выполняется гораздо быстрее:

$str=~tr/+/ /;

Именно это и дает Perl'у преимущество перед программами, например, на C, в применении в web-области.

Формат выражения выглядит так:

/pattern/

где pattern и представляет собой маску, состоящую из любых элеменов из этого списка:

/pattern/ Соответствие
x? ноль или один символ 'x'
x* ноль или больше символов 'x'
x+ один или больше символов 'x'
.* ноль или больше любых символов
.+ один или больше любых символов
{m} M символов
[] символы, заключенные в []
[^] символы, кроме заключенных в []
[0-9] любая цифра от '0' до '9'
[a-z] любая буква от 'a' до 'z'
[^0-9] любой символ, не находящийся между '0' и '9'
[^a-z] любой символ, не находящийся между 'a' и 'z'
/^.../ первый символ в строке
/...$/ последний символ в строке
\d одна цифра, то же, что и [0-9]
\d+ одна или больше цифр, то же, что и [0-9]+
\D одна не-цифра, то же, что и [0-9]
\D+ одна или больше не-цифр, то же, что и [0-9]+
\w один alphanumeric символ (латинская буква или цифра), то же, что и [a-zA-Z0-9]
\w+ один или больше alphanumeric-символов, то же, что и [a-zA-Z0-9]+
\W один не-alphanumeric символ, то же что и [^a-zA-Z0-9]
\W+ один или больше не-alphanumeric символ, то же что и [^a-zA-Z0-9]+
\s один space символ (пробел, табуляция, новая строка), то же что и [\n\t\r\f]
\s+ один или больше space символов, то же что и [\n\t\r\f]
\S один не-space символ, то же что и [^\n\t\r\f]
\S+ один или больше не-space символов, то же что и [^\n\t\r\f]+
a|b|c 'a' или 'b' или 'c'
abc подстрока "abc"
(pattern) () запоминает группу символов, присваивая их переменным $1, $2 и т.д. См. примеры.
/pattern/i игнорировать регистр букв

Это, конечно, не понять с первого раза, поэтому вот примеры:
Пример Описание
$str=~/perl/; проверяет, есть ли в строке $str подстрока "perl"
$str=~/^perl/; проверяет, начинается ли строка с подстроки "perl"
$str=~/perl$/; проверяет, заканчивается ли строка на подстроку "perl"
$str=~/c|g|i/; проверяет, содержит ли строка символ 'c' или 'g' или 'i'
$str=~/cg{2,4}i/; проверяет, содержит ли строка символ 'c', следующие сразу за ним 2-4 символа 'g', за которыми следует символ 'i'
$str=~/cg*i/; проверяет, содержит ли строка символ 'c', слудующие за ним 0 или больше символа 'g', за которыми следует символ 'i'
$str=~/c..i/; проверяет, содержит ли строка символ 'c', и символ 'i', разделенные двумя любыми буквами
$str=~/[cgi]/; проверяет, содержит ли строка один из символов 'c', 'g' или 'i'
$str=~/\d/; проверяет, содержит ли строка цифру
$str=~/\W/; проверяет, содержит ли строка символы, не являющиеся буквами латинского алфавита и цифрами
Использование regular expressions
=~ (проверка соответствия строки маске)

Этот оператор выполняет функцию, схожую c функцией оператора ==, сравнивая переменную, содержащую строку с маской.

Пример 1:

$string="I love cgi"; if($string=~/cgi/) { print "верно"; }

Пример 2:

$string="chmod 755 test.cgi"; if($string=~/[a-z]+\s\d+\s.*/) { print "верно"; } # 'chmod' -- [a-z]+ - 1 или больше букв # ' ' -- \s - 1 пробел # '755' -- \d+ - 1 или больше цифр # ' ' -- \s - 1 пробел # 'test.cgi' -- .* - дальше идут любые символы

Пример 3: проверка, e-mail адреса

$string="billgates@microsoft.com"; if($string=~/\w+\@\w+\.\w+/) { print "верно"; } # 'billgates' -- \w+ - 1 или больше букв/цифр # '@' -- \@ - символ @ # 'microsoft' -- \w+ - 1 или больше букв/цифр # '.' -- \. - символ . # 'com' -- \w+ - 1 или больше букв/цифр

!~ (проверка несоответствия строки маске)

Этот оператор является обратным оператору =~ (так же как != явл обратным по отношению к ==).
tr (перевод)

Аргументами этой функции эвляются две маски с одинаковым количеством элементов.

$string=tr/SEARCHLIST/REPLACELIST/;

А занимается она тем, что заменяет элемент из SEARCHLIST соответствующим элементом из REPLACELIST.

Пример 1:

$string="testing"; $string=~tr/et/ET; # Сейчас $string="TEsTing"; $string=~tr/a-z/A-Z/; # А сейчас $string="TESTING";

Пример 2:

$string="I+like+CGI"; $string~tr/+/ /; # Сейчас $string="I Like CGI"

s (замена)

Эта функция заменяет часть строки, соответствующую PATTERN на REPLACE.

$string=s/PATTERN/REPLACE/eg;

Где 'e' и 'g' - необязательные параметры:

* g - заменяет все встречающиеся части строка, соответствующие PATTERN. Если этот параметр опущен - заменяет только первое соответствие.
* e - означает что REPALCE является выражением, а не просто строкой (в REPLACE содержатся переменные)

Пример 1:

$string="i:love:perl"; $string=~s/:/*/; # now $string="i*love:perl" $string=~s/:/*/; # now $string="i*love*perl" $string=~s/*/+/g; # now $string="i+love+perl" $string=~s/+/ /g; # now $string="i love perl" $string=~s/perl/cgi/; # now $string="i love cgi"

Пример 2:

$string="i love perl"; $string=~s/(love)/<$1>/; # теперь $string="i perl" # Сдесь первое найденное слово "love" # присваевается переменной $1

Пример 3:

$string="www22cgi44"; $string=~s/(\d+)/$1*3/eg; #сейчас $string="www66cgi132"; # Параметр 'e' показывает # что $1*2 - вычисление, а не просто строка

/pattern/

Работу этой функции поясняют примеры:

Пример 1

$string="chmod 711 cgi"; $string=~/(\w+)\s+(\d+)/;

* (\w+) соответствует любому количуству букв. Соотвествие, найденное в строке будет присвоено переменной $1.
* \s+ соответствует любому количуству пробелов.
* (\d+) соответствует любому количуству цифр. Соотвествие, найденное в строке будет присвоено переменной $2.

Теперь $1="chmod", $2="711"

Пример 2:

$string="chmod 711 cgi"; @list=split(/\s+/,$string); # разбить строку $string, # используя пробелы # в качестве разделителей

Получим массив:

@list=("chmod","711","cgi");



MarkiMarta.ru. Записки отца-программиста" с 2009 г.
Категория информационной продукции 18+
Яндекс.Метрика