Posts Tagged ‘php’

Как послать код 404 ошибки php

Среда, августа 14, 2013
header('HTTP/1.1 404 Not Found'); // собственно сам код

header('Location: /404.html'); //редирект на станицу ошибки
 exit(); //ну а это уже на всякий случай, 
//чтобы не происходило выполнение скрипта дальше

Циклы в php

Пятница, сентября 21, 2012

Цикл WHILE


while (логическое_выражение)
инструкция;

или


while (логическое_выражение) {
инструкция1;
инструкция2;
...
инструкцияN;
}

Если логическое_выражение истинно, выполняется тело цикла, в противном случае – переходим на следующий за циклом оператор.

Цикл do while


do
{
тело_цикла;
}
while (логическое_выражение);

После очередной итерации проверяется, истинно ли логическое_выражение, и, если это так, управление передается вновь на начало цикла, в противном случае цикл обрывается.

Форматируем номер телефона

Вторник, ноября 1, 2011

Если номер телефона выглядит 89235005355, то читать его не удобно, а если 8-923-500-53-55 то прочитать его гораздо легче.

Добиться нормального отображения телефона можно сдледующим образом:

$pnone="89235005355";
$reg="([0-9]{1})([0-9]{3})([0-9]{3})([0-9]{2})([0-9]{2})";
$pat="\\1-\\2-\\3-\\4-\\5";
$newPhone=ereg_replace($reg,$pat,$phone);

то же саме на JavaScript:

var pnone="89235005355";
var reg="([0-9]{1})([0-9]{3})([0-9]{3})([0-9]{2})([0-9]{2})";
var pat="$1-$2-$3-$4-$5";
var newPhone=phone.replace(RegExp(reg),pat));

В обоих случаях в переменной newPhone будет отформатированный номер телефона: 8-923-500-53-55.

Ну и в завершении скажу, что это решение подходит только для федеральных номеров РФ и то если они начинаются с 8 на не с +7.



Округление в php, mySQL и JavaScript

Пятница, сентября 9, 2011

Не редко приходится округлять числа при программировании для веб. Встроенные функции веб-языков позволяют выполнять эту оперцию.

Округление в PHP

Функция round().

Синтаксис:

float round ( float value [, int precision] ) .

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

Правила округления для функции round соответствую правилам округления в обычной математике, т.е. 3.7 будет округлено до 4, тогда как 4.4 будет округлено до 3.

Функция ceil()

Синтаксис:

float ceil ( float value )

Эта функция округляет число до ближайшего челого числа в большую сторону, т.е. 3.1 и 3.9 будет округлено до 4.

Функция ceil() всегда имеет  только один параметр.

Функция floor();

Синтаксис:

float floor(float value)

В  отличии от функции ceil() эта функция округляет число в меньшую сторону, таким образом, для чисел 3.1 и 3.9 функция floor() вернет 3.

Округление в MySQL

ROUND(число [, точность])  аналог функции round() в php.

TRUNCATE(число) аналог функции ceil() в php.

FLOOR(число)  аналог функции floor() в php.

Округление в JavaScript

Метод round() объекта Math.

Синтаксис:

Math.round(x)

Округляет число подобно функции round() в php без второго параметра.

Метод floor() объекта Math.

Синтаксис:

Math.floor(x)

Округляет число до ближайшего  большего или равного целого числа.

Метод ceil() объекта Math.

Синтаксис:

Math.ceil(x)

Округляет число до ближайшего  меньшего или равного целого числа.

Метод  toFixed(число знаков после запятой)

Для округления в Javascript вещественного числа до N знаков после запятой можно воспользоваться методом toFixed объекта Number:
(3.2489).toFixed(2); //результат 3.24
Math.PI.toFixed(4); //результат 3.1416 – число π с 4 знаками после запятой

Метод toFixed возвращает число в виде строки с заданным числом цифр после запятой.

Метод toPrecision()

Синтаксис:

numObj.toPrecision ([precision])

precision  – Необязательный. Число значащих цифр. Должно быть в диапазоне 1 – 21, включительно.

Округляет число до общего количества цифр вне зависимости: после запятой или нет.

Number("90").toPrecision(4)  // = 90.00
Number("90.1234").toPrecision(4)  // = 90.12

Если указанное значение precision не достижимо обрезанием десятичной части – переводит число в экспоненциальную форму.

Преобразование IP-адресов в PHP и MySQL

Понедельник, апреля 4, 2011

Формат IP-адреса достаточно удобен для человека: четыре цифры, разделенные точками. Однако такой формат очень не удобен при программировании, поэтому IP-адреса преобразуют в обычное число для удобства.

Рассмотрим какие инструменты для этого применяются.

PHP
Функция php ip2long – переводит ip-адрес в число, а php-функция long2ip выполняет обратное преобразование из числа в ip-адрес.
Ip-адрес, преобразованный первой функцией, можно записать в базу данных в числовое поле, что гораздо удобнее и эффективнее по сравнению с символьным типом.

ip2long('2.60.255.255'); //возвратит 37552127.
long2ip( '37552127' ); //возвратит 2.60.255.255.

MySQL
В языке MySQL есть аналог php-функции ip2long, позвозяющий переобразовать ip-адрес в число, это функция MySQL INET_ATON, а обратное преобразование числа в ip-адрес осуществляется с помощью mysql-функции INET_NTOA.

SELECT INET_ATON( '2.60.255.255' ) - возвратит 37552127.
SELECT INET_NTOA( '37552127' )  -возвратит 2.60.255.255.

Функция STR_TO_DATE MySQL

Вторник, февраля 8, 2011

Преобразовывает дату в MySQL формат

SELECT STR_TO_DATE(  “07.02.2011 10:22:43″,  “%d.%m.%Y %H:%i:%s” ) ;

параметры те же что в DATE_FORMAT

Функция DATE_FORMAT MySQL

Вторник, февраля 8, 2011

SELECT DATE_FORMAT(“2011-02-08″,’%d.%m.%Y’);

%M Название месяца (январь…декабрь)

%W Название дня недели (воскресенье…суббота)

%D День месяца с английским суффиксом (0st, 1st, 2nd, 3rd и т.д.)

%Y Год, число, 4 разряда

%y Год, число, 2 разряда

%X Год для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с ‘%V’

%x Год для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с ‘%v’

%a Сокращенное наименование дня недели (Вс…Сб)

%d День месяца, число (00..31)

%e День месяца, число (0..31)

%m Месяц, число (00..12)

%c Месяц, число (0..12)

%b Сокращенное наименование месяца (Янв…Дек)

%j День года (001..366)

%H Час (00..23)

%k Час (0..23)

%h Час (01..12)

%I Час (01..12)

%l Час (1..12)

%i Минуты, число (00..59)

%r Время, 12-часовой формат (hh:mm:ss [AP]M)

%T Время, 24-часовой формат (hh:mm:ss)

%S Секунды (00..59)

%sСекунды (00..59)

%p AM или PM

%w День недели (0=воскресенье..6=суббота)

%U Неделя (00..53), где воскресенье считается первым днем недели

%u Неделя (00..53), где понедельник считается первым днем недели

%V Неделя (01..53), где воскресенье считается первым днем недели. Используется с `%X’

%v Неделя (01..53), где понедельник считается первым днем недели. Используется с `%x’

%% Литерал `%’.

Проверка на корректность номера телефона регулярными выражениями

Четверг, января 27, 2011

/^8[0-9]{10}$/ это регулярное выражение соответствует номеру 8XXXXXXXXXX, т.е. 8 и ровно 10 любых цифр

На javascript:

if (/^8[0-9]{10}$/.test(testted_var)){

alert(“Телефон корректен!”)

}else{

alert(“Телефон некорректен!”)

}

На php:

if (preg_match(“/^8[0-9]{10}$/”, $testted_var)){

echo “Телефон корректен!”;

}else{

echo “Телефон корректен!”;

}

Убираем лимит на размер импортируемого файла в PhpMyAdmin

Среда, января 12, 2011

При импорте базы в PhpMyAdmin максимальный размер загружаемого файла по умолчанию равен 2М. Что бы изменить это значение нужно исправить upload_max_filesize в файле php.ini. Однако, этого может быть недостаточно. Если нужное значение больше заданного в переменной post_max_size в том же файле, если нужно можно поменять и его. Но нужно учитывать, что оба этих значения должны быть меньше указанного в memory_limit. И еще: если файл велик, то возможно, для его обработки понадобится много времени, ограничение в переменной max_execution_time может дать отрицательный эффект.

Ну и конечно же, нужно перезапустить apache.

Шапка таблицы в phprtf

Суббота, января 30, 2010

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

Используя поисковики, нашел неплохую библиотеку phprtf.

Все работало, генерировалась ртэфка, за одним исключением: ни как не хотел работать повтор шапки таблицы, а было ооооочень нужно.

Заглянув код генерируемого файла увидел, что тэг \trhdr (он то и отвечает за повтор строки на каждой странице) подставляется к каждой ячейке, соответственно, все строки как бы должны повторяться и не повторяется ничего.

Заглянув в иходники библиотеки увидел то место где и происходит вставка этого тэга, а поскольку свойство firstRowHeader класса Table распространяется на всю таблицу, то и подстановка происходит во все строки.

Лечением этого бага является замена куска кода (в файле rtf/Table.php):

if (!empty($this->firstRowHeader)) {
$content .= '\trhdr ';
}

на следующий код:

if ((!empty($this->firstRowHeader))and($row==1)) {
$content .= '\trhdr ';
}

Ну, естественно, после создания талицы в необходимо выставить соответствующий флаг:

$rtf = new Rtf();
$sect = &$rtf->addSection();
$table = &$sect->addTable();
$table->addRows(150, 0);
$table->setFirstRowAsHeader();