Справочник по PHP

         

Календарные функции


JDToGregorian

Преобразование дневного Юлианcкого счета в Грегорианскую дату.

Синтаксис :

string jdtogregorian(int julianday);

Преобразование дневного Юлианcкого счета в Грегорианскую в формате "месяц/день/год"

GregorianToJD

Преобразовывает Грегорианскую дату на Дневный Юлианский cчет.

Синтаксис :

int gregoriantojd(int month, int day, int year);

Правильный дипазон для Грегорианского календаря 4714 д.э. до 9999 н.э.

Хотя это программное обеспечение может оперировать даты в обратном порядке до 4714 д.э., такое использование может быть бесполезно и не значительно. Грегорианский календарь не был учрежден до Октября 15, 1582 (или Октябрь 5, 1582 в Юлианском календаре). Некоторые страны еще очень долго не принимали его. Например, Великобритания преобразовалась в 1752, СССР в 1918 и Греции в 1923. Наиболее Европейские страны использовали Юлианский Календарь До Грегорианского.

Пример :<?php$jd = GregorianToJD(10,11,1970);echo("$jd\n");$gregorian = JDToGregorian($jd);echo("$gregorian\n");?>

JDToJulian

Преобразовывает дату Юлианского календаря на дневный Юлианский счет.

Синтаксис :

string jdtojulian(int julianday);

Преобразование дневного Юлианского счета в строку, содержащую дату Юлианского Календаря в формате "месяц/день/год".

JulianToJD

Преобразовывает дату Юлианского Календаря на дневной Юлианский счет.

Синтаксис :

int juliantojd(int month, int day, int year);



Правильный дипазон для Юлианского календаря 4713 д.э. до 9999 н.э.

Хотя это программное обеспечение может оперировать даты в обратном порядке до 4713 д.э. такое использование может быть бесполезно и не значительно. Календарь был создан в 46 д.э., но подробные не стабилизировался до по крайней мере 8 н.э., и возможно познее в 4-ом столетии. Также, начало года различно от одной культуры к другой - не все соглашаются, что Январь это первый месяц.

JDToJewish

Преобразовывает дневной Юлианский счет в Еврейский календарь.


Синтаксис :

string jdtojewish(int julianday);

JewishToJD

Преобразовывает дату в Еврейском Календаре на дневной Юлианский счет.

Синтаксис :

int jewishtojd(int month, int day, int year);

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

JDToFrench

Преобразовывает дневной Юлианский счет в Французский Республиканский календарь.

Синтаксис :

string jdtofrench(int month, int day, int year);

Преобразовывает дневной Юлианский счет в Французский Республиканский календарь.

FrenchToJD

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

Синтаксис :

int frenchtojd(int month, int day, int year);

Эта программа преобразовывают даты в начиная с 1 до 14 (Грегорианские даты 22 Сентября 1792 до 22 1806 Сентября). Это покрывает тот период когда календарь использовался.

JDMonthName

Возвращает название месяца.

Синтаксис :

string jdmonthname(int julianday, int mode);

Возвращает строку с названием месяца. main сообщает функции, в какой календарь нужно преобразовать дневнрй Юлианский счет на, и какой тип месячных имен должен быть возвращен.

Календарные способы



0



Грегорианский - apreviated



1



Грегорианский



2



Юлианский - apreviated



3



Юлианский



4



Еврейский



5



Французский Республиканский

JDDayOfWeek

Возвращает день недели.

Синтаксис :

mixed jddayofweek(int julianday, int mode);

Возвращает день недели. Может возвратить строку(string) или int в зависимости от способа(mode).

Календарные недельные пути



Способ



Значение



0



возвращает дневной номер как int (0=воскресенье, 1=понедельник, и т.п.)



1



возврат string содержание дня недели (английское-грегорианское)



2



возвращает string содержа abreviated дени недели (английский-грегорианский)






Ключи и значения


array_flip

Меняет местами индексы и значения массива.

Синтаксис :

array array_flip(array arr)

Эта функция "пробегает" по массиву и меняет местами его ключи и значения. Исходный массив arr не изменяется, а результирующий массив просто возвращается. Конечно, если в массиве присутствовало несколько элементов с одинаковыми значениями, учитываться будет только последний из них:

$A = array("a"=>"aaa", "b"=>"aaa", "c"=>"ccc");

$A = array_flip($A);

// Теперь $A===array("aaa"=>"b", "ccc"=>"c");

array_keys

Возвращает список из ключей массива.

Синтаксис :

list array_keys(array arr [,mixed search_value])

Функция возвращает список, содержащий все ключи массива arr. Если задан необязательный параметр search_value, то она вернет только те ключи, которым соответствуют значения search_value.

$arr = array(0 => 100, "color" => "red", 15);array_keys($arr); // возвратит array(0, "color", 1) $arr = array("blue", "red", "green", "blue", "blue");array_keys($arr, "blue"); // возвратит array(0, 3, 4)

array_values

Удаление ассоциативных индексов массива.

Синтаксис :

list array_values(array arr)

Функция array_values() возвращает список всех значений в ассоциативном массиве arr, т.е. превращает ассоциативный массив в простой (скалярный).

$arr = array("size" => "XL", "color" => "gold");array_values($arr);// возвратит array("XL", "gold")

Очевидно, такое действие бесполезно для списков, но иногда оправданно для хешей.

in_array

Осуществляет проверку массива на наличие значения.

Синтаксис :

bool in_array(mixed val, array arr)

Функция in_array() возвратит true, если в массиве arr содержится элемент со значением var.

$arr = array("1", "2", "tree");if(in_array["2", $arr)) echo "2 есть";


array_count_values

Возвращает количество одинаковых значений массива.

Синтаксис :

array array_count_values(array arr)

Эта функция подсчитывает, сколько раз каждое значение встречается в массиве arr, и возвращает ассоциативный массив с ключами - элементами массива и значениями - количеством повторов этих элементов. Иными словами, функция array_count_values()

подсчитывает частоту появления значений в массиве arr.

$LIst = array(1, "hello", 1, "world", "hello");array_count_values($array);// возвращает array(1=>2, "hello"=>2, "world"=>1)

sizeof

Возвращает число элементов массива.

Синтаксис :

int sizeof(array arr)

Функция sizeof() возвращает количество элементов в массиве arr на подобие действия функции count().

count

Возвращает число элементов в массиве или объекте.

Синтаксис :

int count(mixed var)

Функция count() возвращает число элементов в массиве или объекте var. В случае, если var - скалярная переменная, то функция возвращает 1, если такая переменная существует, или 0, если такой переменной нет.

Надо отметить, что 0 возвращается и тогда, когда указан массив, не содержащий элементов.

Для проверки существования переменной лучше воспользоваться функцией isset().

$a[0] = 1;$a[1] = 3;$a[2] = 5;$result = count($a) // возвратит 3

array_sum

Возвращает сумму всех элементов массива.

Синтаксис :

mixed array_sum(array arr [, int num_req])

Эта функция возватит сумму всех числовых элементов массива. От типа значений в массиве зависит тип возвращаемого числа (integer или float).

$arr = array(2,4,6,7);echo "Сумма: ".array_sum($arr);// выведет Сумма: 19

 

 

array_rand

Производит случайную выборку индексов массива.

Синтаксис :

mixed array_rand(array arr [, int num_req])

Функция array_rand() возвращает в массиве выбранные случайным образом индексы элементов массива arr.

Аргумент num_req указывает число возвращаемых индексов. В случае, если выбирается один элемент, то возвращается не массив, а значение.

srand((double)microtime() *1000000);// здесь мы проинициализировали генератор случайных чисел$arr = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");$rand_keys = array_rand($arr, 2);echo $arr[$rand_key[0]]."<BR>";echo $arr[$rand_key[1]]."<BR>";


Комплексная замена в строке


strtr

Комплексная замена в строке.

Синтаксис :

string strtr(string str, string from, string to)

string strtr(string str, array from)

В первом случае функция strtr() возвращает строку str, у которой каждый символ, присутствующий в строку from, заменяется на корреспондирующий из строки to. В случае, если строки from и to

различной длины, то лишние конечные символы длинной строки игнорируются.

Во втором случае функция strtr() возвращает строку, в которой фрагменты строки str заменяются на соответствующие индексам значения элементов массива from. При этом функция пытается заменить сначало наибольшие фрагменты исходной строки и не выполняет замену в уже модифицированных частях строки. Таким бразом, теперь мы можем выполнить несколько замен сразу:

$Subs = array(  "<name>" => "Larry",  "<time>" => date("d.m.Y"));$st="Привет, <name>! Сейчас <time";echo strtr($st,$Subs);

А вот как можно "отменить" действие функции HtmlSpecialChars():

$Trans=array_flip(get_html_translation_table());$st=strtr($st, $Trans);

В результате мы из строки, в которой все спецсимволы заменены на их HTML-эквиваленты, получим исходную строку.



Копирование / вставка ячеек


В Excel при помощи PHP можно копировать ячейки и вставлять ранее скопированные ячейки.


Копирование ячеек происходит в два этапа: сначало надо выделить копируемую область и копировать ее методом Copy(), а затем нужно выделить область, в которую будут вставлены скопированные ячейки и вставить их

<?php$xls = new COM("Excel.Application"); // Создаем новый COM-объект$xls->Application->Visible = 1;      // Заставляем его отобразиться$xls->Workbooks->Add();              // Добавляем новый документ// Задаем копируемую ячейку$range=$xls->Range("A1");$range->Value = "Cправочник Web-языков";// Копируем ее$range->Copy(); // Задаем область, в которую скопируется ячейка$range=$xls->Range("A3:A9");$range->Select();$range=$xls->Selection();// Вставляем$xls->ActiveSheet->Paste();?>

Здесь ActiveSheet - ссылка на выделенные ячейки.



Курсор массива


reset

Производит сброс курсора массива.

Синтаксис :

mixed reset(array arr);

Функция reset() устанавливает внутренний курсор массива arr на его начало и возвращает значение начального элемента.

end

Производит перенос курсора в конец массива.

Синтаксис :

mixed end(array arr);

Функция end() устанавливает внутренний курсор массива arr на последний элемент и возвращает значение начального элемента.

next

Производит перенос курсора вперед.

Синтаксис :

mixed next(array arr);

Функция next() возвращает значение элемента, на котором в данный момент находится курсор, и перемещает курсор массива на следующий элемент. Возвращает false, если элементов больше не осталось.

Также false возвращается, если встречается элемент с пустым значением, следовательно для корректной работы с массивом, содержащим пустые элементы, лучще использовать функцию each().

prev

Производит перенос курсора назад.

Синтаксис :

mixed prev(array arr);

Функция prev() возвращает значение элемента, на котором в данный момент находится курсор, и перемещает курсор массива на предыдущий элемент. Возвращает false, если элементов больше не осталось.

Также false возвращается, если встречается элемент с пустым значением, следовательно для корректной работы с массивом, содержащим пустые элементы, лучще использовать функцию each().

current

Определение текущего элемента массива.

Синтаксис :

mixed current(array arr);

Функция current() возвращает значение элемента, на котором в данный момент находится курсор массива, при этом не сдвигая курсор.

Функция возвратит false, если курсор оказался вне пределов массива, или массив не имеет элементов.

pos

Определение текущего элемента массива.

Синтаксис :

mixed pos(array arr);

Эта функция синоним функции current().

key

Функция возвращает индекс текущего элемента массива.

Синтаксис :

mixed key(array arr);

each

Получение текущего элемента массива.

Синтаксис :

array each(array arr);


Функция each() возвращает в массиве пару "индекс и значение" текущего элемента массива, на который указывает внутренний курсор, и сдвигает курсор массива на следующий элемент. Возващаемый массив имеет четыре элемента:

[0] => индекс[1] => "значение"[key] => индекс[value] => "значение"

Функция возвращает false, если курсор достиг конца массива.

$foo = array("bob", "fred", "jussi", "joini", "egon", "marliese");$bar = each($foo);// теперь $bar = (0=>0, 1=>"bob", key=>0, value=>"bob")

Обычно функцию each() используют в паре с list() для перебора элементов массива:

reset($HTTP_POST_VARS);while(list($key, $val) = each($HTTP_POST_VARS)) {  echo "$key = %val<BR>";}

array_walk

Применение функции к элементам массива.

Синтаксис :

int array_walk(array arr string func, mixed userdata);

Функция array_walk() применяет пользовательскую функцию func к каждому элементу массива arr. В пользовательскую функцию передаются три или два (в случае, если аргумент userdata не указан) аргумента: значение текущего элемента, его индекс и аргумент userdata.

В случае, если func требует более трех аргументов, при каждом ее вызове будет выдаваться предупреждение. Чтобы блокировать выдачу этих предупреждений, поставте знак "@" перед функцией array_walk() или воспользуйтесь функцией error_reporting().

Функция func будет получать значения и индексы массива arr по занчению, т.е. не сможет вносить в него изменения. Если это необходимо, передайте аргумент arr по ссылке, указав перед его именем "&", и тогда все изменения отразяться в массиве.

В PHP 4 необходимо явно вызывать функцию reset(), чтобы установить внутренний курсор на первый элемент.

$v = array("d"=>"A1", "a"=>"B2", "b"=>"C3", "c"=>"D4");function test_alter(&$item1, $key, $prefix) { // по ссылке  $item1 = "$prefix $item1";}; function test_print($item2, $key) {  echo "$key. $item2<BR>";}; array_walk($v, "test_print");reset($v);array_walk($v, "test_alter");reset($v);array_walk($v, "test_print");


Логические функции определения типа переменной


is_scalar

Проверяет, является ли переменная простой.

Синтаксис :

bool is_scalar(mixed var)

Возвращает true, если var имеет скалярный тип (чила, строки, логические значения), но не комплексный (массивы или объекты).

is_null

Проверяет, является ли переменная пустой.

Синтаксис :

bool is_null(mixed var)

Возвращает true, если var не существует (или ей явно присвоено пустое значение null). Функция эквивалентна выражению:

(var===null или is_set(var)

is_numeric

Проверяет, является ли переменная числовой.

Синтаксис :

bool is_numeric(mixed var)

Возвращает true, если var имеет численный тип (integer, double), или строковой с числовым значением.

is_bool

Проверяет, является ли переменная логической.

Синтаксис :

bool is_bool(mixed var)

Возвращает true, если var имеет тип логического значения (TRUE или FALSE), а иначе - false.

is_int

Определяет, является ли переменная типа integer(целочисленной).

Синтаксис :

bool is_int(mixed var);

Возвращает true, если var имеет целочисленный тип.

is_integer

Определяет, является ли переменная типа integer.

Синтаксис :

bool is_integer(mixed var);

Возвращает true, если var является типа integer (целочисленной), или false в обратном случае.

is_long

Определяет, является ли переменная типа integer(целочисленной).

Синтаксис :

bool is_long(mixed var);

Возвращает true, если var имеет целочисленнй тип (integer, long), или false в обратном случае.

is_real

Определяет, является ли переменная типа real (дробной).

Синтаксис :

bool is_real(mixed var);

Возвращает true, если var типа real (дробная), или false в обратном случае.

is_float

Определяет, является ли переменная типа float (дробная).

Синтаксис :

bool is_float(mixed var);

Возвращает true, если var типа float (дробная), или false в обратном случае.

is_double

Определяет, является ли переменная типа double (дробная).

Синтаксис :

bool is_double(mixed var);

Возвращает true, если var является типа double (дробной), или false в обратном случае.


is_string

Определяет, является ли переменная строкой.

Синтаксис :

bool is_string(mixed var);

Возвращает true, если var - это строка, или false в обратном случае.

is_array

Определяет, является ли переменная массивом.

Синтаксис :

bool is_array(mixed var);

Возвращает true, если var - это массив, или false в обратном случае.

is_object

Определяет, является ли переменная объектом.

Синтаксис :

bool is_object(mixed var);

Возвращает true, если var - это объект (object), или false в обратном случае.

is_resource

Определяет, является ли переменная указателем на ресурс.

Синтаксис :

bool is_resource(mixed var);

Возвращает true, если var указывает на ресурс, выделенный и возвращенный предназначенной для этого функцией.

Ресурсы - это объекты, подобные файлам или результатам запросов к базам данных, выделяемые и освобождаемые внутренними функциями PHP. Когда программе больше не требуется какой-либо ресурс, хорошей практикой программирования является его явное освобождение предназначенными для этого функциями. Но в большинстве случаев интерпретатор PHP самостоятельно, по мере необходимости освобождает ненужные ресурсы (обычно при завершении сценария).

get_resource_type

Определение типа дескриптора ресурса.

Синтаксис :

string get_resource_type(resource $handle);

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

$c = mysql_connect();echo get_resource_type($c)."\n";// выведет: mysql link $file = fopen("filename.txt","w");echo get_resource_type($file)."\n";// выведет: file $doc = new_xmldoc("1.0");echo get_resource_type($doc)."\n";// выведет: domxml document


Манипулирование изображениями


imageCreate

Создание пустой картинки.

Синтаксис :

int imageCreate(int x, int y)

Создает пустую картинку размером x на y точек и возвращает ее идентификатор. После того, как картинка создана, вся работа с ней осуществляется именно через этот идентификатор, по аналогии с тем, как мы работаем с файлом через его дескриптор.

Пример:

Создание новой картинки при помощи GD и вывод ее в экран браузера:

<?phpheader ("Content-type: image/png");$im = @imagecreate (50, 100)    or die ("Не удается открыть новую картинку!");$background_color = imagecolorallocate ($im, 255, 255, 255);$text_color = imagecolorallocate ($im, 233, 14, 91);imagestring ($im, 1, 5, 5,  "A Simple Text String", $text_color);imagepng ($im);?>

imageCreateFromPng

Создание рисунка из файла PNG.

Синтаксис :

int imageCreateFromPng(string filename)

Эта функция загружают изображения из файла PNG в память и возвращает его идентификатор. Как и после вызова imageCreate(), дальнейшая работа с картинкой возможна только через этот идентификатор. При загрузке с диска изображение распаковывается и храниться в память уже в неупакованном формате, для того чтобы можно было максимально быстро производить с ним различные операции, такие как масштабирование, рисование линий и т.д.

Пример:

Пример нахождения ошибки при открытии графического файла.

function LoadPNG ($imgname) {  $im = @imagecreatefrompng ($imgname); /* Attempt to open */  if (!$im) { /* See if it failed */    $im  = imagecreate (150, 30); /* Create a blank image */    $bgc = imagecolorallocate ($im, 255, 255, 255);    $tc  = imagecolorallocate ($im, 0, 0, 0);    imagefilledrectangle ($im, 0, 0, 150, 30, $bgc);    /* Output an errmsg */    imagestring ($im, 1, 5, 5, "Error loading $imgname", $tc);  }  return $im;}

imageCreateFromJpeg

Создание рисунка из файла JPEG.

Синтаксис :

int imageCreateFromJpeg(string filename)

Эта функция загружают изображения из файла в память и возвращают его идентификатор. Как и после вызова imageCreate(), дальнейшая работа с картинкой возможна только через этот идентификатор. При загрузке с диска изображение распаковывается и храниться в память уже в неупакованном формате, для того чтобы можно было максимально быстро производить с ним различные операции, такие как масштабирование, рисование линий и т.д.


imageCreateFromGif

Создание рисунка из файла GIF.

Синтаксис :

int imageCreateFromGif(string filename)

Эта функция загружают изображения из файла в память и возвращают его идентификатор. Как и после вызова imageCreate(), дальнейшая работа с картинкой возможна только через этот идентификатор. При загрузке с диска изображение распаковывается и храниться в память уже в неупакованном формате, для того чтобы можно было максимально быстро производить с ним различные операции, такие как масштабирование, рисование линий и т.д.

Стоит упомянуть, что GD начиная с версии 1.6 не поддерживает формат GIF. В связи с этим данная функция практически не используется.

imagePng

Функция выводит изображение в PNG-формате в любой браузер или в файл.

Синтаксис:

int imagePng(int im [, string filename])

Эта функция сохраняет изображение, заданное своим идентификатором и находящееся в памяти, на диск, или же выводят его в браузер.

Разумеется, вначале изображение должно быть загружено или создано при помощи функции imageCreate(), т.е. мы должны знать его идентификатор im.

Если аргумент filename

опущен, то сжатые данные в соответствующем формате выводятся прямо в стандартный выходной поток, т.е. в браузер. Нужный заголовок Content-type

при этом не выводится, ввиду чего нужно выводить его вручную при помощи Header().

Фактически, вы должны вызвать одну из трех команд, в зависимости от типа изображения:

Header("Content-type: image/png") для PNG.

Пример:

Пример использования функции imagepng():

<?php$im = imagecreatefrompng ("test.png");Header("Content-type: image/png")imagepng ($im);?>

imageJpeg

Отсылка рисунка JPEG браузеру или сохранение его в файле.

Синтаксис:

int imageJPEG(int im [, string filename [, int quality]])

Эта функция сохраняет изображение, заданное своим идентификатором и находящееся в памяти, на диск, или же выводит его в браузер.

Разумеется, вначале изображение должно быть загружено или создано при помощи функции imageCreate(), т.е. мы должны знать его идентификатор im.



Если аргумент filename

опущен, то сжатые данные в соответствующем формате выводятся прямо в стандартный выходной поток, т.е. в браузер. Нужный заголовок Content-type при этом не выводится, ввиду чего нужно выводить его вручную при помощи Header().

Фактически, вы должны вызвать одну из трех команд, в зависимости от типа изображения:

Header("Content-type: image/jpeg") для Jpeg

Третий необязательный параметр quality задает качество изображения (от 0 до 100).

<?php$im=imageCreateFromJPEG("img/file.jpg");Header("Content-type: image/jpeg");imageJPEG($im,"",30);?>

image2WBMP

Вывод изображения в браузер или файл.

Синтаксис :

int image2WBMP( resource image [, string filename [, int threshold]])

Функция выводит изображение, заданное дескриптором image, в браузер, либо в файл, имя которого задано необязательным параметром filename.

Если изображение выводится в браузер, необходимо задать его тип WBMP как image/vnd.wap.wbmp

функцией Header():

<?php$file = "php.png";$image = imagecreatefrompng($file); header("Content-type: " . image_type_to_mime_type(IMAGETYPE_WBMP));image2wbmp($image); // Вывод wbmp-картинки в браузер?>

Функция image2WBMP() доступна PHP только если версия библиотеки GD 1.8 или ниже.

imageGif

Отсылка рисунка GIF браузеру или сохранение его в файле.

Синтаксис:

int imageGIF(int im [, string filename])

Функция сохраняют изображение, заданное своим идентификатором и находящееся в памяти, на диск, или же выводят его в браузер.

Разумеется, вначале изображение должно быть загружено или создано при помощи функции imageCreate(), т.е. мы должны знать его идентификатор im.

Если аргумент filename

опущен, то сжатые данные в соответствующем формате выводятся прямо в стандартный выходной поток, т.е. в браузер. Нужный заголовок Content-type

при этом не выводится, ввиду чего нужно выводить его вручную при помощи Header().

Фактически, вы должны вызвать одну из трех команд, в зависимости от типа изображения:



Header("Content-type: image/gif").

Т.к. библиотека GD, начиная с версии 1.6, не поддерживает формат GIF, данная функция используется редко.

imageCopy

Копирование части рисунка.

Синтаксис :

int imageCopy(int dst_im, int src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)

Функция копирует прямоугольную область начиная с позиции (src_x, src_y) шириной src_w

и высотой src_h из рисунка src_im в рисунок dst_im, придав копируемой области смещение (dst_x, dst_y).

В следующем примере будет картинка file1.png целиком скопирована в file2.png

<?php// Создаем первую картинку на основе готового изображения$im1=imageCreateFromPNG("img/file1.png");// Определяем ее размеры$size_x=imageSX($im1);$size_y=imageSY($im1);// Создаем вторую пустую картинку$im2=imageCreate($size_x,$size_y);// Копируем рисунок целиком из первого изображения во второеimageCopy($im2,$im1,0,0,0,0,$size_x,$size_y);// Сохранение скопированной картинки в файлеimagePNG($im2, "img/file2.png");?>

imageCopyResized

Копирование части рисунка с масштабированием.

Синтаксис :

int imageCopyResized(int dst_im, int src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)

Эта функция - одна из самых мощных и универсальных. С помощью нее можно копировать изображения (или их участки), перемещать или масштабировать их.

dst_im задает идентификатор изображения, в который будет помещен результат работы функции. Это изображение должно уже быть создано или загружено и иметь надлежащие размеры.

src_im - идентификатор изображения, над которым проводится работа. Впрочем, src_im и dst_imмогут и совпадать.

Параметры srcX, srcY, srcW, srcH задают область внутри исходного изображения, над которой будет осуществлена операция - соответственно, координаты ее верхнего левого угла, ширину и высоту.

Наконец, четверка dstX, dstY, dstW, dstH задает то место на изображении dst_im, в которое будет "втиснут" указанный в предыдущей четверке прямоугольник. Заметьте, что, если ширина или высота двух прямоугольников не совпадают, то картинка автоматически будет нужным образом растянута или сжата.

В следующем примере файл file1.jpg

уменьшается вдвое и записывается в файл file2.jpg:

<?php$old = imageCreateFromJpeg("img/file1.jpg");$w = imageSX($old);$h = imageSY($old);$w_new=rounr($w/2);$h_new=round($h/2);$new = imageCreate($w_new, $h_new);imageCopyResized($new, $old, 0, 0, 0, 0, $w_new, $h_new, $w, $h);imageJpeg($new, "img/file2.jpg");imageDestroy($old);imageDestroy($new);?>

imageDestroy

Уничтожение рисунка.

Синтаксис :

int imageDestroy(int im)

Функция уничтожает дескриптор im ранее созданного рисунка (наподобие закрытия файла fclose() после открытия fopen()).


Манипулирование каталогами


mkdir

Создание каталога.

Синтаксис :

bool mkdir(string $name, int $perms)

Создает каталог с именем $name и правами доступа perms. Права доступа для каталогов указываются точно так же, как и для файлов. Чаще всего значение $perms устанавливают равным 0770 (предваряющий ноль обязателен - он указывает PHP на то, что это - восьмеричная константа, а не десятичное число).

 

 

Пример:

mkdir("my_directory",0755);     // создает подкаталог в текущем каталогеmkdir("/data");     // создает подкаталог data в корневом каталоге

В случае успеха функция возвращает true, иначе - false.

rmdir

Удаление каталога.

Синтаксис :

bool rmdir(string $name)

Удаляет каталог с именем $name.

Каталог должен быть пустым, а его атрибуты должны позволять это.

В случае успеха функция возвращает true, иначе - false.

chdir

Смена текущего каталога.

Синтаксис :

int chdir(string $directory);

Изменяет текущий PHP каталог на directory. Возвращает FALSE если не может изменить, TRUE если смена произошла. Параметр $directory может определять и относительный путь, задающийся от текущего каталога.

Пример:

chdir("/tmp/data"); // переходим по абсолютному путиchdir("./js"); // переходим в подкаталог текущего каталогаchdir(".."); // переходим в родительский каталогchdir("~/data"); // переходим в /home/пользователь/data (для Unix)

getcwd

Полный путь.

Синтаксис :

string getcwd()

Данная функция возвращает текущую директорию, относительно которой проводятся файловые операции, т.е. возвращает полный путь к текущему каталогу, начиная от "корня" (/). Если такой путь не можнет быть отслежен, вызов "проваливается" и возвращается false.

diskfreespace

Определяет свободное пространство в каталоге

Синтаксис :

float diskfreespace (string directory);

Данная функция возвращает в байтах свободное пространство в каталоге directory, то есть в соответствующей ей файловой системе или на разделе диска.

Пример:

$diskspace=diskfreespace("/");// Тем самым мы определили свободное место в корневой директории "/"



Минимум и максимум


min

Эта функция возвращает наименьшее из чисел, заданных в ее аргументах.

Синтаксис :

mixed min(mixed $arg1 [int $arg2, ..., int $argn])

Различают два способа вызова этой функции: с одним параметром или с несколькими. Если указан лишь один параметр (первый), то он обязательно должен быть массивом и возвращается минимальный элемент этого массива. В противном случае первый (и остальные) аргументы трактуются как числа с плавающей точкой, они сравниваются, и возвращается наименьшее. Тип возвращаемого значения выбирается так: если хотябы одно из чисел, переданных на вход, задано в формате с плавающей точкой, то и результат будет с плавающей точкой, в противном случае результат будет целым числом. С помощью этой функции нельзя лексографически сравнивать строки - только числа.

$x = min(5,3,4,6,5,6,8,9);// $x = 3$x[0]=4;$x[1]=1;$x[2]=5;$x[3]=2;echo min($x); // выведет 1

max

Получение наибольшего аргумента.

Синтаксис :

mixed max(mixed $arg1 [int $arg2, ..., int $argn])

Функция работает аналогично min(), только ищет максимальное значение.

$x = max(5,3,4,6,5,6,8,9);// $x = 9$x[0]=4;$x[1]=1;$x[2]=5;$x[3]=2;echo max($x); // выведет 5



О этом справочнике


Справочник предназначается для людей, уже освоивших азы программирования на языке PHP.

Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.

В связи с тем, что данный ресурс постоянно пополняется новой информацией, скачать обновленную версию справочника можно из раздела Download (www.spravkaweb.ru/download.php).

Дата выхода данной версии справочника: 25 октября 2004 года.

Если Вы нашли ошибки в справочнике, а также если имеются предложения по его улучшению, прошу писать мне на майл admin@spravkaweb.ru

Также на сайте доступны для скачивания справочники по CSS, Perl, MySQL.

Обновления:

25 октября 2004 г. – Добавлена глава Советы в тему

20 августа 2004 г. – первый выпуск справочника.

Часть 1. Синтаксис языка и операторы



Обработка результатов запроса


mysql_result

Получение определенного поля результата.

Синтаксис :

int mysql_result(int result, int row [, mixed field])

Функция возвращает значение поля field в строке результата с номером row.Параметр field может задавать не только имя поля, но и его номер - позицию, на которой столбец "стоял" при создании таблицы, а также полное имя поля вида: "имя_таблицы.имя_поля". Тем не менее, рекомендуется везде, где это только возможно,использовать именно имена полей.

Функция универсальна: с ее помощью можно "обойти" весь результат по одной ячейке. И хотя это не возбраняется, но делать, однако, не рекомендуется, т.к. mysql_result() работает довольно медленно.

mysql_fetch_array

Извлекает из результата очередную запись и помещает ее в ассоциативный массив.

Синтаксис :

array mysql_fetch_array(int result [, int result_type])

Функция mysql_fetch_array() возвращает очередную строку результата в виде ассоциативного массива, где каждому полю сопоставлен элемент с ключом, совпадающим с именем поля. Дополнительно в массив записываются элементы с числовыми ключами и значениями, соответствующими величинам полей с этими индексами. В возвращаемом массиве они размещаются сразу за элементами с "обычными" ключами.

Параметр result_type задает вид возвращаемого массива и может принимать одно из следующих значений: MYSQL_NUM, MYSQL_ASSOC, MYSQL_BOTH (по умолчанию).

Может возникнуть вопрос: зачем вообще нужны числовые индексы. Ответ прост: дело в том, что в результате выборки в действительности могут присутствовать поля (фактически, колонки) с одинаковыми именами, но, соответственно, с различными индексами. Это происходит тогда, когда выборка в SELECT производится одновременно из нескольких таблиц.

mysql_connect($host, $user, $pass);$result=mysql_db_query("database", "select id, name from tabl");while($row=mysql_fetch_array($result)) {  echo "id: ".$row["id"]."<BR>";  echo "id: ".$row[0]."<BR>";  echo "name: ".$row["name"]."<BR>";  echo "name: ".$row[1]."<BR>";};mysql_free_result($result);


mysql_fetch_row

Записывает запись в нумерованный массив.

Синтаксис :

array mysql_fetch_row(int result)

Функция возвращает массив- список со значениями полей очередной строки результата result. Если указатель текущей позиции результата был установлен за последней записью (то есть строки кончились), возвращается false. Текущая позиция сдвигается к следующей записи, так что очередной вызов mysql_fetch_row()

вернет следующую строку результата.

Каждое поле записи сохраняется в нумерованном элементе массива. Нумерация начинается с 0.

$r=mysql_query("select * from OutTable where age<30");while($Row=mysql_fetch_row($r)) {  // обрабатываем строку $Row}

Как видим, цикл оборвется, как только строки закончатся, т.е. когда mysql_fetch_row() вернет false.

mysql_fetch_object

Получение записи в свойствах объекта.

Синтаксис :

object mysql_fetch_object(int result)

Функция возвращает объект, в свойствах которого находятся поля текущей записи. В случае, если записи кончились, возвращает false.

mysql_connect($host, $user, $pass);$result=mysql_db_query("database", "select * from table");while($rows=mysql_fetch_object($result)) {  echo $rows->id;  echo $rows->name;};

mysql_fetch_lengths

Возвращает длину элемента записи.

Синтаксис :

array mysql_fetch_lengths(int result)

Функция mysql_fetch_lengths() возвращает длину значения, полученного при помощи функций mysql_fetch_row(), mysql_fetch_array() или mysql_fetch_object().

Например, в следующем примере:

$arr=mysql_fetch_row($result);$len=mysql_fetch_lengths($result);

массив $len будет содержать длину соответствующих элементов массива $arr, т.е. $len[0]=strlen(arr[0]) и т.д.

mysql_fetch_field

Возвращает информацию о свойствах объекта и о поле записи.

Синтаксис :

object mysql_fetch_field(int result [, int field_offset])

В необязательном параметре field_offset задается номер поля, свойства которого мы хотим получить. Если этот параметр не указан, при каждом вызвове функции mysql_fetch_field() возвращаются свойства следующего поля из набора записей result.



Возвращаемый объект имеет следующие свойства:

  name - имя поля

  table - имя таблицы, которой принадлежит поле

  max_length - максимальная длина поля

  not_null - 1, если полю разрешено пустое значение

  primary_key - 1, если поле является ключевым

  unique_key - 1, если в поле допускаются только уникальные значения

  multiple_key - 1, если в поле допустимо иметь повторяющиеся значения

  numeric - 1, если поле числовое

  blob - 1, если поле имеет тип BLOB

  type - тип поля

  unsigned - 1, если поле числовое беззнаковое

  zerofill - 1, есле поле заполняется нулями

mysql_connect($host,$user,$pass);$result=mysql_db_query("database", select * from table");for($i=0;$i<mysql_num_fields($result);$i++) {  echo "Свойства поля $i:<BR>";  $param=mysql_fetch_field($result);  if(!$param) echo "Нет информации о свойствах!";  echo "<PRE>name:          $param->nametable:         $param->tablemax_length:    $param->max_lengthnot_null:      $param->not_nullprimary_key:   $param->primary_keyunique_key:    $param->unique_keymultiple_key:  $param->multiple_keynumeric:       $param->numericblob:          $param->blobtype:          $param->typeunsigned:      $param->unsignedzerofill:      $param->zerofill</PRE>";}

mysql_field_seek

Производит перемещение курсора к указанному полю.

Синтаксис :

int mysql_field_seek(int result, int field_offset)

Данная функция является излишней. Следующие фрагменты будут эквивалентны:

$param=mysql_fetch_field($result, field_offset);иmysql_field_seek($result, field_offset);$param=mysql_fetch_field($result);

mysql_field_name

Возвращает имя поля.

Синтаксис :

string mysql_field_name(int result, int filed_index)

Функция mysql_field_name() возвращает имя поля, которое расположено в результате result с индексом filed_index (нумерация начинается с 0).

$result=mysql_query("SELECT id, name from table");echo mysql_field_name($result,1); // Выведет: name



mysql_field_table

Возвращает имя таблицы, из которой было извлечено поле.

Синтаксис :

string mysql_field_table(int result, int field_offset)

Возвращает имя таблицы, из которой было извлечено поле со смещением field_offset

в результате result.

mysql_field_len

Возвращает длину поля.

Синтаксис :

int mysql_field_len(int result, int filed_offset)

Функция возвращает длину поля в результате result. Поле, как обычно, задается указанием его смещения. Под длиной здесь подразумевается не размер данных поля в байтах, а тот размер, который был указан при его создании. Например, если поле имеет тип varchar и было создано (вместе с таблицей) с типом varchar(100), то для него будет возвращено 100.

mysql_field_type

Возвращает тип набора записей в результате.

Синтаксис :

string mysql_field_type(int result, int filed_offset)

Эта функция похожа на mysql_filed_name(), только возвращает не имя , а тип соответствующей колонки в результате. Им может быть, например, int, double, real и т.д.

mysql_connect($host,$user,$pass);mysql_select_db("mydb");$result=mysql_query("SELECT * FROM tabl");$fields=mysql_num_fields($result);$rows=mysql_num_rows($result);$i=0;$table=mysql_field_table($result,$i);echo "Таблица "$table" имеет $fields полей и $rows записей<BR>";echo "Структура таблицы:<BR>";while($i<$fields) {  $type=mysql_field_type($result,$i);  $name=mysql_field_name($result,$i);  $len=mysql_field_len($result,$i);  $flags=mysql_field_flags($result,$i);  echo $type." ".$name." ".$len." ".$flags."<BR>";  $i++;}

mysql_field_flags

Эта функция возвращает флаги, которые были использованы при создании указанного поля в таблице.

Синтаксис :

string mysql_field_flags(int result, int field_offset)

Возвращаемая строка представляет собой набор слов, разделенных пробелами, так что вы можете преобразовать ее в массив при помощи функции explode():

$Flags=explode(" ",mysql_field_flags($r,$field_offset));



Поля записей в MySQL могут иметь следующие свойства-флаги:

"not_nul", "primary_key", "unique_key", "multiple_key", "blob", "unsigned", "zerofill", "binary", "enum", "auto_increment", "timestamp".

mysql_list_fields

Возвращает список полей таблицы.

Синтаксис :

int mysql_list_fields(string dbname, string tblname [,int link_identifier])

Функция mysql_list_fields() возвращает информацию об указанной таблице tblname

в базе данных bdname, используя идентификатор соединения link_identifier, если он задан (в противном случае - последнее открытое соединение). Возвращаемое значение - идентификатор результата, который может быть проанализирован обычными средствами. В случае ошибки возвращается -1, текс сообщения ошибки может быть получен обычным способом.

$link=mysql_connect($host,$user,$pass);$fields=mysql_list_fields("db1", "table", $link);$colums=mysql_num_fields($fields); // число полей в таблице// Далее распечатаем имена всех полей таблицыfor($i=0;$i<$colums;$i++) {  echo mysql_field_name($fields,$i)."<BR>";}

mysql_num_fields

Эта функция возвращает число полей в одной строке результата, т.е. число колонок в результате.

Синтаксис :

int mysql_num_fields(int result)

В силу сказанного, функция позволяет определить горизонтальную размерность "двумерного массива результата".

mysql_errno

Возвращает номер последней ошибки.

Синтаксис :

int mysql_errno ([int link_identifier])

Данная функция возвращает номер последней зарегистрированной ошибки или 0, если ошибок нет.

Идентификатор link_identifier можно не указывать, если за время работы сценария было установлено только одно соединение.

mysql_connect("dbname");echo mysql_errno().": ".mysql_error()."<BR>";

mysql_error

Возвращает сообщение об ошибке.

Синтаксис :

string mysql_error ([int link_identifier])

Эта функция возвращает строку, содержащую текст сообщения об ошибке или пустую строку, если ошибок небыло.

mysql_connect("dbname");echo mysql_errno().": ".mysql_error()."<BR>";

Часть 6. Графика


Общие возможности


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

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

Сделать это можно при помощи функции mail(), которую мы сейчас и будем изучать.

Синтаксис функции mail():

bool mail(string $to, string $subject, string $msg [, string $header]);

Функция mail() посылает письмо с темой $subject и содержанием $msg по адресу $to.

Если Вы хотите, чтобы письмо ушло по нескольким адресам, разделите их пробелами.

Само сообщение может быть многострочным. Для перехода на новую строку поставьте знак перехода на новую строку "\n" в конце каждой строки.

mail("name@mail.ru", "my subject", "stroka1\nstroka2\nstroka3");

Или тотже самое можно записать так:

mail("name@mail.ru", "my subject", "stroka1stroka2stroka3");

В четвертом необязательном параметре $header можно указать заголовки нашего сообщения.

Под заголовками я подразумеваю информацию, передаваемую вместе с письмом почтовому клиенту, которая будет содержать некоторые технические данные, такие как: кодировка письма, имя отправителя, обратный адрес отправителя и т.д. Это схоже с использованием тега <META> в HTML.

Чтобы было более понятно, что из себя представляют заголовки, и где они находятся в письме, откройте почтовый клиент и посмотрите на любое письмо в том виде, как оно пришло (Для Outlook это можно сделать нажав правой клавишей мыши на сообщение->Свойства->Подробно->Исходное сообщение).

Как мы видим, письмо представляет простой текстовой файл, состоящий из двух общих разделов:

Вверху идут заголовки письма, затем через две строки идет само письмо.

Заголовков письма достаточно много, но не все они используются при написании скрипта отправки почты.

Вот некоторые наиболее часто используемые:

From: "Имя пользователя отправителя" <Обратный адрес отправителя>To: <Адрес, по которому отправляют письмо>Subject: Тема письма


В Excel при помощи PHP можно произвести следующие действия с документами:

  создать новый документ;

  открыть ранее созданный документ;

  сохранить открытый документ;

  закрыть документ.




Доступны следующие действия:

выравнивание по значению;

выравнивание по левому краю;

выравнивание по центру;

выравнивание по правому краю;

выравнивание с заполнением;

выравнивание по ширине;

распределение по центру выделения;

распределение по горизонтали;

выравнивание по верхнему краю;

центрирование по вертикали;

выравнивание по нижнему краю;

выравнивание по высоте;

распределение по вертикали;

задание отступа в ячейке.




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

  сделать жирным;

  выделить курсивом;

  сделать подчеркнутым;

  установить шрифт;

  установить размер шрифта;

  установить цвет текста;




В Excel при помощи PHP можно произвести следующие действия со строками:

 добавить строку;

  удалить строку;

  задать высоту одной строки или группы строк;

  сделать автоподбор высоты одной строки или группы строк;

  скрыть строку или группу строк;

  отобразить ранее скрытую строку или группу строк.




В Excel при помощи PHP можно произвести следующие действия с колонками:

  добавить колонку;

  удалить колонку;

  задать ширину одной или нескольких колонок;

  сделать автоподбор ширины одной или нескольких колонок;

  скрыть колонку или группу колонок;

  отобразить ранее скрытую колонку или группу колонок;

  установить ширину для всех колонок.




В Excel при помощи PHP можно произвести следующие действия с листами:

  выбрать лист;

  добавить новый лист;

  переместить лист;

  удалить лист;

  переименовать лист;




В Excel при помощи PHP можно делать следующие операции с таблицами:

  задать толщину и стиль линий бордюра таблицы;

  задать толщину и стиль линий внутренней сетки таблицы;

  установить цвет бордюра и внутренней сетки таблицы;




копирование ячеек;

вставка скопированных ячеек;

перемещение ячеек;



Обзор обработчиков


handler_open

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

Синтаксис :

bool handler_open(string $save_path, string $session_name)

Функция вызывается, когда вызывается session_start(). Обработчик должен взять на себя всю работу, связанную с открытием базы данных для группы сессий с именем $session_name. В параметре $save_path передается то, что было указано при вызове session_save_path() или же путь к файлам-хранилищам данных сессий по умолчанию.

handler_close

Этот обработчик вызывается, когда данные сессии записаны во временное хранилище и его нужно закрыть.

Синтаксис :

bool handler_close()

handler_read

Чтение данных сессии.

Синтаксис :

string handler_read(string $sid)

Этот обработчик вызывают, когда нужно прочитать данные сессии с идентификатором $sid из временного хранилища.

Возвращаемые данные представлены в следующем виде:

имя1=значение1;имя2=значение2;имя3=значение3;...

имяN задает имя очередной переменной, зарегестрированной в сессии, а занчениеN - результат вызова функции Serialize() для значения этой переменной.

Например, наша запись может иметь следующий вид:

foo|i:1;count|i:10;

Она говорит о том, что из временного хранилища были прочитаны две целые переменные, первая из которых равна 1, а вторая - 10.

handler_write

Запись данных сессии.

Синтаксис :

string handler_write(string $sid, string $data)

Этот обработчик предназначен для записи данных сессии с идентификатором $sid во временное хранилище - например, открытое ранее обработчиком handler_open(). Параметр $data задается в точно таком же формате. Фактически, чаще всего действие этой функции сводится к записи в базу данных строки $data без каких-либо ее изменений.

handler_gc

Очищает временное хранилище данных через определенный промежуток времени.

Синтаксис :

bool handler_gc(int $maxlifetime)

Этот обработчик вызывается каждый раз при завершении работы сценария. Если пользователь окончательно покинул сервер, заначит, данные сессии во временном хранилище можно уничтожить. Этим и должна заниматься функция handler_gc(). Ей передается в параметрах то время (в секундах), по прошествии которого PHP принимает решение о необходимости удалить все ненужные данные.


session_set_save_handler

Регистрация обработчиков.

При описании обработчиков мы указывали их имена с префиксом handler. На самом деле, это совсем не является обязательным. Даже наоборот - вы можете давать такие имена своим обработчикам, какие только захотите.

Но возникает вопрос: как же тогда PHP их найдет? Вот для этого и существует функция регистрации обработчиков, которая говорит интерпретатору, какую функцию он должен вызывать при наступлении того или иного события.

Синтаксис :

void session_set_save_handler($open, $close, $read, $write, $destroy, $gc)

Эта функция регестрирует подпрограммы, имена которых переданы в ее параметрах, как обработчики текущих сессии. Параметр $open содержит имя функции, которая будет вызвана при инициализации сессии, а $close - функции, вызываемой при ее закрытии. В $read и $write нужно указать имена обработчиков, соответственно, для чтения и записи во временное хранилище. Функция с именем, заданным в $destroy, будет вызвана при уничтожении сессии. Наконец, обработчик, определяемый параметром $gc, используется как обработчик мусора.

Эту функцию можно вызывать только до инициализации сессии, в противном случае она просто игнорируется.


Определение параметров файла


stat

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

Синтаксис :

array stat(string $filename)

Этот массив всегда содержит следующие элементы с указанными ключами:

0  - устройство;1  - Номер узла inode;2  - атрибуты защиты файла;3  - число синонимов ("жестких" ссылок) файла;4  - идентификатор uid владельца;5  - идентификатор gid группы;6  - тип устройства;7  - размер файла в байтах;8  - время последнего доступа в секундах, прошедших с 1 января 1970 года;9  - время последней модификации содержимого файла;10 - время последнего изменения атрибутов файла;11 - размер блока;12 - число занятых блоков;

Этот массив помещает информацию, которая доступна в системах Unix. Под Windows многие поля могут быть пусты.

Если $filename задает не имя файла, а имя символической ссылки, то всетаки будет возвращена информация о том файле, на который ссылается эта ссылка (а не о ссылке).

fileatime

Возвращает время последнего доступа к файлу.

Синтаксис :

int fileatime(string filename)

Время выражается в количестве секунд, прошедших с 1 января 1970 года (Unix timestamp). Если файл не обнаружен, возвращает false.

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

filemtime

Возвращает время последнего изменения файла или false в случае отсутствия файла.

Синтаксис :

int filemtime(string $filename)

filectime

Возвращает время создания файла.

Синтаксис :

int filectime(string $filename)

filesize

Возвращает размер файла в байтах или false, если файла не существует.

Синтаксис :

int filesize(string $filename)

touch

Устанавливает время модификации.

Синтаксис :

int touch(string $filename [, int $timestamp])

Устанавливает время модификации указанного файла $filename равным $timestamp

(в секундах, прошедших с 1 января 1970 года). Если второй параметр не указан, то подразумевается текущее время. Вслучае ошибки возвращает false.

Если файл с указанным именем не существует, он создается пустым.



Открытие документа


pdf_set_info

Заполнение поля информации документа.

Синтаксис :

void pdf_set_info(int pdf_document, string fieldname, string value)

Возможные поля fieldname:

  Subject

  Title

  Creator

  Author

  Keywords

  Одно, определяемое пользователем.

Функция должна вызываться до создания страниц.

<?php$fd = fopen("test.pdf", "w");$pdfdoc = pdf_open($fd);pdf_set_info($pdfdoc, "Author", "Имя автора");pdf_set_info($pdfdoc, "Creator", "Название создателя");pdf_set_info($pdfdoc, "Title", "Заголовок");pdf_set_info($pdfdoc, "Subject", "Тема");pdf_set_info($pdfdoc, "Kewwords", "Ключевые, слова");pdf_set_info($pdfdoc, "CustomField", "Чтото еще");pdf_begin_page($pdfdoc, 595, 842);pdf_end_page($pdfdoc);pdf_close($pdfdoc);?>

Эта функция заменяет собой pdf_set_info_keyword(), pdf_set_info_title(), pdf_set_info_subject(), pdf_set_info_creator().

pdf_open

Открытие нового документа pdf.

Синтаксис :

int pdf_open(int file)

Функция делает файл, открытый функцией fopen(), документом pdf. Если не указывать дескриптор файла, он создается в памяти и затем может выводиться на стандартный поток вывода или отсылаться броузеру. Функция возвращает дескриптор документа, который следует указывать в последующих pdf-функциях.

pdf_close

Закрытие документа pdf.

Синтаксис :

void pdf_close(int pdf_document)

pdf_begin_page

Начало новой страницы.

Синтаксис :

void pdf_begin_page(int pdf_document, double width, double height)

Аргументы height и width задают высоту и ширину страницы. После внесения на страницу информации ее следует закрыть функцией pdf_end_page().

pdf_end_page

Завершение страницы.

Синтаксис :

void pdf_end_page(int pdf_document)

После этой функции модификация этой страницы невозможна.



Открытие файла


fopen

Открывает файл и привязывает его к дескриптору.

Синтаксис :

int fopen(string $filename, string $mode, bool $use_include_path=false)

Открывает файл с именем $filename в режиме $mode и возвращает дескриптор открытого файла. Если операция "провалилась", то функция возвращает false. Необязательный параметр use_include_path говорит о том, что, если задано относительное имя файла, его следует искать также и всписке путей, используемом инструкциями include и require. Обычно этот параметр не используют.

Параметр $mode может принимать следующие значения:

r

- Файл открывается только для чтения. Если файла не существует, вызов регистрирует ошибку. После удачного открытия указатель файла устанавливается на его первый байт, т.е. на начало.

r+

- Файл открывается одновременно на чтение и запись. Указатель текущей позиции устанавливается на ее первый байт. Если файла не существует, возвращает false. Если в момент записи указатель файла установлен где-то в середине файла, то данные запишутся прямо поверх уже имеющихся, а не раздвинут их, при необходимости увеличив размер файла.

w

- Создает новый пустой файл. Если на момент вызова уже был файл с таким именем, то он предварительно уничтожается. В случае неверно заданного имени файла вызов "проваливается".

w+

- Аналогичен r+, но если файл изначально не существовало, создает его. После этого с файлом можно работать как в режиме чтения, так и записи. Если файл существовал до момента вызова, его содержимое удаляется.

a

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

a+

- Открывает файл в режиме чтения и записи, указатель файла устанавливается на конец файла, при этом содержимое файла не уничтожается. Отличается от a тем, что если файла изначально не существовало, то он создается. Этот режим полезен, если вам нужно что-то дописать в файл, но вы не знаете, создан ли уже такой файл.

Но это еще не полное описание параметра $mode. Дело в том, что в конце любой из строк r,w,a,r+,w+ и a+ может находиться еще один необязательный символ - b или t. Если указан b (или не указан вообще никакой), то файл открывается в режиме бинарного чтения/записи. Если же это t, то для файла устанавливается режим трансляции символа перевода строки, т.е. он воспринимается как текстовой.

tmpfile

Создает новый временный файл с уникальным именем и открывает его на чтение и запись.

Синтаксис :

int tmpfile()

В дальнейшем вся работа должна вестись с возвращенным файловым дескриптором, потому что имя файла недоступно.

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



Открытие ранее созданного документа:


Открытие документа можно сделать при помощи метода Open()

объекта Workbooks().

В передаваемом методу Open() параметре нужно указать имя открываемого файла:

<?php$xls = new COM("Excel.Application");  // Создаем новый COM-объект$xls->Application->Visible = 1;       // Заставляем его отобразиться$xls->Workbooks->Open("C:\test.xls"); // Открываем ранее сохраненный документ?>

Если указать не полный а относительный путь, то поиск открываемого файла будет происходить не на сервере а на компьютере пользователя (по умолчанию это папка "Мои документы").



Отправка письма в HTML-виде


Для отправки письма в HTML-виде достаточно в заголовке Content-type указать тип документа не text/plain (простой текст), а text/html (html-текст). А само письмо записать в html-виде:

$subject="Тема письма";$header="Content-type: text/html; charset=\"windows-1251\"";$header.="From: "\Evgen"\ <evgen@mail.ru>";$header.="Subject: $subject";$header.="Content-type: text/html; charset=\"windows-1251\"";$msg="<body><li>Сторака 1<li>Сторака 2<li>Сторака 3</body>";mail("name@mail.ru", $subject, $msg, $header);



Параметры изображения


Применение и установка

Здесь мы рассмотрим идею создания рисунков сценарием "на лету". Это очень может пригодиться при создании сценариев-счетчиков, графиков, картинок-заголовков, да и многого другого.

Для деятельности такого рода существует специальная библиотека под названием GD. Она содержит в себе множество функций (такие как рисование линий, растяжение/сжатие изображения, заливка до границы, вывод текста и т.д.), которые могут использовать программы, поддерживающие работу с данной библиотекой.

Поддержка GD включается при компиляции и установке PHP. Возможно, некоторые хостинг-провайдеры ее не имеют.

Для подключения модуля на вашем локальном диске нужно открыть в Блокноте файл php.ini

из каталога с файлами Windows (обычно C:\Windows)

Затем:1. Настройте следующий параметр:extension_dir=C:\Program Files\PHP4\extensions  Здесь мы уведомляем PHP, что модули он должен искать   в каталоге C:\Program Files\PHP4\extensions.2. Найдите закомментированную строку ;extension=php_gd.dll   и разкомментируйте ее, т.е. уберите ; в начале.3. Сохраните изменения в файле php.ini

imageTypes

Определение графических форматов, поддерживаемых PHP.

Синтаксис :

int imageTypes(void)

Функция возвращает битовую маску графических форматов, которые поддерживает данная версия библиотеки GD: IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP

<?phpif(imageTypes() && IMG_PNG) echo "формат PNG поддерживается";?>

GetImageSize

Определение размеров рисунка.

Синтаксис :

array GetImageSize(string filename [,array imageinfo])

Эта функция предназначена для быстрого определения в сценарии размеров (в пикселях) и формата рисунка, имя файла которого передано ей в первом параметре. Она возвращает список из четырех элементов. Первый элемент (с ключем 0) хранит ширину картинки в пикселях, второй (с ключем 1) - его высоту. Ячейка массива с ключем 2 определяется форматом изображения: 1, если это GIF, 2 в случае JPG, 3 для PNG и 4 - SWF. Следующий элемент, имеющий ключ 3, будет содержать после вызова функции строку примерно следующего вида: height=sx width=sy, где sx и sy - соответственно ширина и высота изображения. Это применение задумывалось для того, чтобы облегчить вставку данных о размере изображения в тег <img>, который может быть сгенерирован сценарием:

<?php$size_img=GetImageSize("img/image.jpg");echo "<IMG src='img/image.jpg' $size_img>";?>


Если при обращении к функции был указан второй необязательный массив imageinfo, в него можно записать дополнительную информацию о файле. Это могут быть, например, различные маркеры JPG APP (внедренная информация).

Функция iptcparse() позволяет конвертировать эти данные в читаемый вид:
<?php$size_img=GetImageSize("img/image.jpg", &$info_arr);if(isset($info_Arr["APP13"])) {  $iptc = iptcparse($info_arr["APP13"]);  var_dump($iptc);};?>
Данная функция не требует наличия библиотеки GD.
imageSX

Определение ширины рисунка.
Синтаксис :

int imageSX(int im)

Функция возвращает горизонтальный размер изображения, заданного своим идентификатором im, в пикселях.
imageSY

Определение высоты рисунка.
Синтаксис :

int imageSY(int im)

Функция возвращает вертикальный размер изображения, заданного своим идентификатором im, в пикселях.
read_exif_data

Чтение заголовков EXIF из файла JPEG.
Синтаксис :

array read_exif_data(string filename)
Параметр filename
не может быть URL.
Функция возвращает ассоциативный массив, в котором индексами являются имена заголовков EXIF.

Заголовки EXIF обычно хранят информацию цифровых камер (в различном виде).
<?php$exif = read_exif_data("img/file.jpg");print_r($exif);?>
Данный пример выведет что-то наподобие:
Array(    [FileName] => file.jpg    [FileDateTime] => 1064566998    [FileSize] => 31646    [CameraMake] => Eastman Kodak Company    [CameraModel] => KODAK DC265 ZOOM DIGITAL CAMERA (V01.00)    [DateTime] => 2002:08:31 02:12:45    [Height] => 454    [Width] => 620    [IsColor] => 1    [FlashUsed] => 0    [FocalLength] => 8.0mm    [RawFocalLength] => 8    [ExposureTime] => 0.004 s (1/250)    [RawExposureTime] => 0.0040000001899898    [ApertureFNumber] => f/ 9.5    [RawApertureFNumber] => 9.5100002288818    [FocusDistance] => 16.66m    [RawFocusDistance] => 16.659999847412    [Orientation] => 1    [ExifVersion] => 0200)


Данная функция доступна, если подключена библиотека EXIF.

Для этого необходимо либо снять комментарий со строки ;extension=php_exif.dll в файле windows\php.ini (должно быть extension=php_exif.dll), либо откомпилировать PHP с параметром --enable-exif.
Для работы этой функции библиотека GD не требуется.
imageInterlace

Установка черезстрочности.
Синтаксис :

int imageInterlace(int im [, int interlace])
Если в функции задан второй необязательный параметр interlace, и он равен 1, то рисунок im
отображается черезстрочно, если равен 0, то последовательно.
Функция возвращает текущую установку черезстрочности.
gd_info

Возвращает информацию о библиотеке GD.
Синтаксис :

array gd_info(void)
Функция возвращает массив, содержащий версию и параметры установленной библиотеки GD.
<?php$gd=gd_info();echo "<pre>";print_r($gd);echo "</pre>";?>
Приведенный пример выведет примерно следующее:
Array(    [GD Version] => bundled (2.0.22 compatible)    [FreeType Support] => 1    [FreeType Linkage] => with freetype    [T1Lib Support] =>     [GIF Read Support] => 1    [GIF Create Support] =>     [JPG Support] => 1    [PNG Support] => 1    [WBMP Support] => 1    [XBM Support] => 1    [JIS-mapped Japanese Font Support] => )
image_type_to_mime_type

Возвращает Mime-Type типа изображения.
Синтаксис :

string image_type_to_mime_type( int imagetype)
Функция возвращает MIME-тип картинки, заданный константой в параметре imagetype.
<?phpheader("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG));?>
Список констант и возвращаемых значений функции image_type_to_mime_type():
  IMAGETYPE_GIF - image/gif
  IMAGETYPE_JPEG - image/jpeg
  IMAGETYPE_PNG - image/png
  IMAGETYPE_SWF - application/x-shockwave-flash
  IMAGETYPE_PSD - image/psd
  IMAGETYPE_BMP - image/bmp
  IMAGETYPE_TIFF_II - image/tiff
  IMAGETYPE_TIFF_MM - image/tiff
  IMAGETYPE_JPC - application/octet-stream
  IMAGETYPE_JP2 - image/jp2
  IMAGETYPE_JPX - application/octet-stream
  IMAGETYPE_JB2 - application/octet-stream
  IMAGETYPE_SWC - application/x-shockwave-flash
  IMAGETYPE_IFF - image/iff
  IMAGETYPE_WBMP - image/vnd.wap.wbmp
  IMAGETYPE_XBM
- image/xbm Данная функция не требует наличия библиотеки GD.

Переменные и массивы


list

Заносит элементы массива в переменные.

Синтаксис :

list() - языковая конструкция (наподобие array()). Она присваивает перечисленным переменным значения элементов массива, причем первой переменной присваивается первый элемент массива, второй переменной - второй элемент и т.д.

compact

Упаковывает в массив переменные из текущего контекста.

Синтаксис :

array compact(mixed varname1 [, mixed $varname2, ...])

Функция compact()

упаковывает в массив переменные из текущего контекста (глобального или контекста функции), заданные своими именами в varname1, $varname2 и т.д. При этом в массиве образуются пары с ключами, равными содержимому varnameN, и значениями соответствующих переменных.

Число аргументов может быть неопределенное.

Если в аргументе указано имя несуществующей переменной, он пропускается. Действие этой функции противоположно функции extract().

$a="Test string";$b="Some text";$A=compact("a","b");// теперь $A===array("a"=>"Test string", "b"=>"Some text")

Почему же тогда параметры функции обозначены как mixed? Дело в том, что они могут быть не только строками, но и списками строк. В этом случае функция последнего перебирает все элементы этого списка, и упаковывает те переменные из текущего контекста, имена которых она встретила. Более того - эти списки могут, в свою очередь, также содержать списки строк, и т.д. Правда, последнее используется достаточно редко.

$a="Test";$b="Text";$c="CCC";$d="DDD";$List=array("b",array("c","d"));$A=compact("a",$List);// теперь $A===array("a"=>"Test", "b"=>"Text",           "c"=>"CCC", "d"=>"DDD")

extract

экспорт элементов массива в переменные.

Синтаксис :

void extract(array arr [, int extract_type] [, string prefix])

Эта функция производит действия, прямо противоположные compact(). А именно, она получает в параметрах массив arr и превращает каждую его пару ключ=>значение в переменную текущего контекста.



Перемещение ячеек:


Если при копировании копируемые ячейки оставались на месте, то при перемещении копируемые ячейки удаляются.

Перемещение осуществляется методом Cut().

<?php$xls = new COM("Excel.Application"); // Создаем новый COM-объект$xls->Application->Visible = 1;      // Заставляем его отобразиться$xls->Workbooks->Add();              // Добавляем новый документ // Задаем копируемую ячейку$range=$xls->Range("A1");$range->Value = "Cправочник Web-языков";// Копируем ее$range->Cut(); // Задаем область, в которую скопируется ячейка$range=$xls->Range("A3");$range->Select();$range=$xls->Selection();// Вставляем$xls->ActiveSheet->Paste();?>



Почтовые функции


mail

Отсылает почту.

Синтаксис : mail($to, $subject, $msg [,$headers]);

Функция mail()

посылает сообщение с телом $msg (это может быть "многострочная строка", т.е. переменная, содержащая несколько строк, разделенных символом перевода строки) по адресу $to. Можно задать сразу несколько получателей, разделив их адреса пробелами в параметре $to.

Пример :

mail("spravka_web@chat.ru spravka_web@hut.ru",     "Мое сообщение",     "Первая строка\nВторая строка\nТретья строка");

В случае, если указан четвертый параметр, переданная в нем строка вставляется между концом стандартных почтовых заголовков (таких как To, Content-type

и т.д.) и началом текста письма. Обычно этот параметр используется для задания дополнительных заголовков письма.

Пример :

mail("spravka_web@chat.ru spravka_web@hut.ru",     "Тема",     "Тело письма",     "From: webmaster@chat.ru\n".     "Reply-To: webmaster@chat.ru\n".     "X-Mailer: PHP/" . phpvarsion());



Поиск в тексте


strchr

Поиск первого вхождения символа в строку.

Синтаксис :

string strchr(string haystack, string needle)

Данная функция работает идеентично функции strstr().

strstr

Поиск первого вхождения подстроки в строку.

Синтаксис :

string strstr(string haystack, string needle)

Функция strstr() возвращает участок строки, заданной в параметре haystack, начиная с первого фрагмента, указанного в параметре needle и до конца.

В случае неудачи возвращает false.

Данная функция чувствительна к регистру.

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

$email = "mailname@mail.ru";$domain = strstr($email, "@");// или$domain = strstr($email, ord("@"))echo $domain;// выведет @mail.ru

stristr

Нахождение первого вхождения подстроки, не учитывая регистр.

Синтаксис :

string stristr(string haystack, string needle)

Функция stristr() возвращает участок строки, заданной в параметре haystack, начиная с первого фрагмента, указанного в параметре needle и до конца.

В случае неудачи возвращает false.

Данная функция нечувствительна к регистру.

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

strrchr

Поиск последнего вхождения подстроки.

Синтаксис :

string strrchr(string haystack, string needle)

Функция strrchr() возвращает участок строки, заданной в параметре haystack, начиная с последнего фрагмента, указанного в параметре needle и до конца.

В случае неудачи возвращает false.

Данная функция чувствительна к регистру.

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

// получим последний каталог в $PATH$dir = substr(strrchr($PATH, ":"), 1);// а здесь получим все после последнего перевода строки$text = "text 1\nText2\nText3";echo substr(strrchr($text, 10), 1);

strpos

Находит позицию первого вхождения подстроки в заданной строке.



Положение указателя текущей позиции


feof

Указатель конца файла.

Синтаксис :

int feof(int $f)

Возвращает true, если достигнут конец файла (то есть если указатель файла установлен за концом файла).

Пример:$f=fopen("myfile.txt","r");while(!feof($f)){  $str=fgets($f);   // Обрабатываем очередную строку $str }fclose($f);

fseek

Устанавливает указатель файла на определенную позицию.

Синтаксис :

int fseek(int $f, int $offset, int $whence=SEEK_SET)

Устанавливает указатель файла на байт со смещением $offset (от начала файла, от его конца или от текущей позиции, в зависимости от параметра $whence). Это может и не сработать, если дескриптор $f ассоциирован не с обычным локальным файлом, а с соединением HTTP или FTP.

Параметр $whence задает с какого места отсчитывается смещение $offset. В PHP для этого существуют три константы, равные, соответственно, 0, 1 и 2:

SEEK_SET

- устанавливает позицию начиная с начала файла;

SEEK_CUR

- отсчитывает позицию относительно текущей позиции;

SEEK_END

- отсчитывает позицию относительно конца файла;

В случае использования последних двух констант параметр $offset

вполне может быть отрицательным (а при применении SEEK_END он будет отрицательным наверняка). В случае успешного завершения эта функция возвращает 0, а в случае неудачи -1.

ftell

Возвращает положение указателя файла.

Синтаксис :

int ftell(int $f)



Получение заголовков запроса


getallheaders

Получение всех заголовков запроса.

Синтаксис :

array GetAllHeaders()

Функция GetAllHeaders() возвращает ассоцативный массив, содержащий данные о HTTP-заголовках запроса клиента, породившего запуск сценария. Ключи массива содержат названия заголовков, а значения - их величины.

$headers = GetAllHeaders();

foreach($headers as $header=>$value)

echo "$header: $value<br>\n";

Функция GetAllHeaders() поддерживается PHP только в том случае, если он установлен в виде модуля Apache. В противном случае этой функции просто не будет (да и не может быть, потому что обычный CGI-сценарий не имеет доступа к загаловкам запроса). В частности, в PHP для Windows (который чаще всего реализуют именно в виде сценария) функция GetAllHeaders() недоступна.



Преобразование кодировок


convert_cyr_string

Преобразует строку из одной кодировки кириллицы в другую.

Синтаксис :

string convert_cyr_string(string str, string from, string to);

Функция переводит строку str из кодировки from в кодировку to. Конечно, это имеет смысл только для строк, содержащих "русские" буквы, т.к. латиница во всех кодировках выглядит одинаково. Разумеется, кодировка from должна совпадать с истинной кодировкой строки, иначе результат получится неверным. Значения from

и to - одиночный символ, определяющий кодировку:

  k - koi8-r

  w - windows-1251

  i - iso8859-5

  a - x-cp866

  d - x-cp866

  m - x-mac-cyrillic

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

bin2hex

Производит преобразование символьных данных в шестнадцатеричный вид.

Синтаксис :

string bin2hex(string str)

Функция bin2hex() возвращает стороковое шестнадцатеричное представление символьно-байтовых данных, содержащихся в строке str. Конвертация производиться побайтово, старший полубайт указывается первым.



Прикрепление файла


Письмо, содержащее прикрепленный файл, несколько отличается от простого. В нем добавляются некоторые заголовки, и немного меняется само построение, хотя несомненно само письмо остается текстовым файлом. Но давайте все по порядку.

Одна из особенностей - наличие заголовка Mime-Version.

Этот заголовок указывает стандарт, которому соответствует тело сообщения.

Сообщения, соответствующие MIME обязаны содержать такое поле заголовка со следующим текстом:

MIME-Version: 1.0

Если мы хотим отослать письмо с прикрепленными файлами, то необходимо использовать заголовок Content-type: multipart/mixed, который обозначает, что письмо состоит из нескольких частей, каждая из которых содержит свой заголовок Content-type.

Для обозначения границы этих частей необходимо использовать параметр boundary, который еще называется маркером границы.

Значением этого параметра может служить любая строка. Но надо учесть, что она должна быть уникальной и не встречалась в теле письма. Иначе письмо может быть неправильно разбито на части.

From: "Uspenskii Evgeny" <evgeny@spravkaweb.ru>To: user@domain.ruSubject: HelloMime-Version: 1.0Content-Type: multipart/mixed; boundary="spravkaweb-12345"

При разделении письма на части перед маркером должны стоять два знака дефиса.

А последний маркер, который обозначает конец письма, должен содержать в конце два знака дефиса.

Для каждой части необходимо установить свои заголовки.

После заголовков необходимо поставить два знака перевода строки.

From: "Uspenskii Evgeny" <evgeny@spravkaweb.ru>To: user@domain.ruSubject: HelloMime-Version: 1.0Content-Type: multipart/mixed; boundary="spravkaweb-12345"--spravkaweb-1234Content-type: text/plain; charset="windows-1251"Content-Transfer-Encoding: quoted-printable Hi!Here's that my file! --spravkaweb-1234Content-Type: application/x-rar-compressed; name="file.rar"Content-Transfer-Encoding:base64Content-Disposition:attachment UmFyIRoHAM+QcwAADQAAAAAAAABvYXQg ......spravkaweb-1234--


Если у нас идет часть с текстом, то надо заголовок Content-Transfer-Encoding присвоить значение quoted-printable, либо 7bit, либо 8bit.

Для части с файлом этот заголовок должен быть равен base64.

Заголовок Content-Disposition, присутствующий во второй части, указывает, как почтовой программе следует отобразить данную часть письма. Он может принимать значение attachment (этот участок не является частью письма, а просто прикреплен к нему в виде файла) и inline (включение, которое используется непосредственно в письме, например, картинка, вставляемая в HTML).

В первой части заголовком

Content-type: text/plain; charset="windows-1251"

указали, что это простой текст с кодировкой Windows.

Во второй же части заголовком

Content-Type: application/x-rar-compressed; name="file.rar"

указали, что тип файла - rar-архив, а имя файла - file.rar.

Если отправляем gif-картинку, его Content-type будет выглядеть:

Content-Type: image/gif; name="file.gif"

В случае, если заранее не известно, какой тип файла отправляем, или формат файла не является стандартным, следует заголовку Content-type присвоить значение application/octet-stream.

Content-Type: application/octet-stream; name="file.dat"

Прикрепленные файлы должны быть размещены в письме в формате base64. Преобразовать файл в этот формат можно при помощи функции base64_encode():

// Открываем файл для чтения в бинарном формате$file=fopen("file.zip", "rb");// Считываем его в строку $str_file$str_file=fread($file,filesize("file.zip"));// Преобразуем эту строку в base64-формат$str_file=base64_encode($str_file);

Теперь переменную $str_file, которая содержит файл, можно вставлять в письмо.

Для окончательного закрепления материала напишем функцию, которая отправляет письмо в HTML-формате по указанному адресату с прикрепленным файлом:

/*$to - адрес получателя письма$from_mail - адрес отправителя письма$from_name - имя отправителя письма$subject - тема письма$message - само сообщение в HTML-формате$file_name - путь к файлу, который надо прикрепить к письму(это может быть имя файла, выбранного в поле <input type=file name=file_name>)*/function sendMail($to,$from_mail,$from_name,$subject,$message,$file_name) {  $bound="spravkaweb-1234";  $header="From: \"$from_name\" <$from_mail>\n";  $header.="To: $to\n";  $header.="Subject: $subject\n";  $header.="Mime-Version: 1.0\n";  $header.="Content-Type: multipart/mixed; boundary=\"$bound\"";  $body="\n\n--$bound\n";  $body.="Content-type: text/html; charset=\"windows-1251\"\n";  $body.="Content-Transfer-Encoding: quoted-printable\n\n";  $body.="$message";  $file=fopen($file_name,"rb");  $body.="\n\n--$bound\n";  $body.="Content-Type: application/octet-stream;";  $body.="name=\"".basename($file_name)."\"\n";  $body.="Content-Transfer-Encoding:base64\n";  $body.="Content-Disposition:attachment\n\n";  $body.=base64_encode(fread($file,filesize($file_name)))."\n";  $body.="$bound--\n\n";  if(mail($to, $subject, $body, $header)) {    echo "<center>Письмо было успешно отправлено!</center>";  } else {    echo "<center>Сообщение не отправлено!</center>";  };};


Про сессии и Cookies


Проблема: - отключены Cookies

Бытует распространенное мнение, что сессии без Cookies не может существовать. Действительно, Cookies наиболее просто решает проблему идентификации пользователя, что необходимо для связи временного хранилища и данных сессии. Но вот что делать, если пользователь у себя в настройках отключил прием Cookies?

На этот случай разработчики PHP позаботились о передаче идентификаторов сессии не в Cookies, а каким-нибудь аналогичным путем, например через адресную строку броузера.

Решение: - изменение гиперссылок и форм

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

Вот пример использования сессий без Cookies:

<?session_name("testses");session_start();session_register("i");$i=@$i+1;?><body>Вы открыли эту страницу<?=$i?> раз. При закрытии браузера счетчик обнулиться.<BR><A href=sesclick.php?<?=SID?>>Нажмите для записи в счетчик!</A></body>

Этот пример будет работать, если у пользователя действительно отключены Cookies. Если они включены, PHP просто не будет генерировать константу SID и задействует Cookies.

Но в приведенном способе есть одно неудобство, а именно, везде в участки кода нужно вставлять <?=SID?>, и если вы гдето пропустили, то программа может не работать!

К счастью, разработчики PHP учли эту возможность, и решили уберечь нас от этого. По-этому если в какой-нибудь гиперссылке вы по ошибке пропустите <?=SID?>, PHP вставит его автоматически. При этом не повредив остальные параметры, которые могут присутствовать в URL.

Для проверки можно использовать следующий пример:

<?session_start()?><body><A href="php.php">PHP</A><A href="php.php?ss=1">PHP - выражения</A>

Вот что получиться, при наведении мышки на эти ссылки:

http://www.spravkaweb.ru/php.php?PHPSESSID=81456f6a886f2104

http://www.spravkaweb.ru/php.php?ss=1&PHPSESSID=34f5d04a35601510f45

В PHP существует еще одна возможность использовать сессии с отключенными Cookies - добавление скрытх полей в формы, которые формируют сценарий, чтобы передать идентификатор сессии вызываемому документу.

Приведем пример, который выявляет эту возможность:

<?session_start()?><form action=act.php mathod=post></form>

А вот что получиться при просмотре нашей страницы в виде HTML:

<form action="act.php" method="post"><INPUT TYPE=HIDDEN NAME="PHPSESSID" VALUE="0a561093f84d4321"></form>

Из примера мы видим, что PHP добавил в форму скрытое поле с нужным именем и занчением.



Работа с базами данных


mysql_connect

Устанавливает сетевое соединение с базой данных MySQL.

Синтаксис :

int mysql_connect([string $hostname[:port][:/path/to/socket][, [,string $username [,string $password]]])

Функция mysql_connect() устанавливает сетевое соединение с базой данных MySQL, расположенной на хосте $hostname, и возвращает идентификатор открытого соединения. Вся дальнейшая работа ведется именно с этим идентификатором. При регистрации указывается имя пользователя $username

и пароль $password. Строка $hostname также может включать в себя номер порта в виде "hostname:port"или путь к сокету для локальной машины в системах Unix - ":/path/to/socket" (если сервер MySQL настроен не на станадартный, а на какой-то другой порт).

При ошибке выдается предупреждение. Выдачу сообщения об ошибке можно блокировать, указав перед именем функции оператор "@".

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

В конце сценария обычно принято закрывать подключения функцией mysql_close(), но этого можно не делать, т.к. PHP автоматически закрывает все (неустойчивые) подключения при завершении сценария.

<?php   $conn = mysql_connect ("localhost", "username", "pass")        or die ("Соединение не установлено!");   print ("Соединение установлено!");   mysql_close($conn);?>

mysql_pconnect

Устанавливает устойчивое сетевое соединение с базой данных MySQL.

Синтаксис :

int mysql_pconnect([string $hostname[:port][:/path/to/socket][, [,string $username [,string $password]]])

Функция mysql_pconnect() устанавливает устойчивое сетевое соединение с базой данных MySQL, расположенной на хосте $hostname, и возвращает идентификатор открытого соединения. Вся дальнейшая работа ведется именно с этим идентификатором. При регистрации указывается имя пользователя $username

и пароль $password. Строка $hostname также может включать в себя номер порта в виде "hostname:port"или путь к сокету для локальной машины в системах Unix - ":/path/to/socket" (если сервер MySQL настроен не на станадартный, а на какой-то другой порт).


При ошибке выдается предупреждение. Выдачу сообщения об ошибке можно блокировать, указав перед именем функции оператор "@".

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

mysql_pconnect() действует аналогично mysql_connect, но с двумя отличиями:

  Перед подключением функция пытается проверить, имеется ли уже открытое подключение. Если есть, то возвращается идентификатор вместо создания нового подключения.

  При завершении сценария подключение не закрывается, а остается действующим для дальнейшего использования, т.е. функция mysql_close() не может закрыть подключения, созданное с помощью mysql_pconnect().

mysql_close

Закрывает установленное ранее соединение с базой данных.

Синтаксис :

int mysql_close ([int link_identifier])

Закрывает соединение с MySQL серевером с идентификатором link_identifier, или последнее открытое соединение, если используется без идентификатора.

Возвращает true при удачном закрытии или false при ошибке.

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

Подключения, установленные функцией mysql_pconnect(), не закрываются.

<?php   $conn = mysql_connect ("localhost", "username", "pass")        or die ("Соединение не установлено!");   print ("Соединение установлено!");   mysql_close($conn);?>

mysql_change_user

Изменяет параметры подключения.

Синтаксис :

int mysql_change_user(string user, string password [, string database [, int link_identifier]])

Если не указывается БД или подключение, то используется последняя активная БД.

Если авторизация не произошла, то параметры подключения не изменяются.

Работает с MySQL 3.23.3 и выше.

mysql_list_dbs

Возвращает список БД на сервере.

Синтаксис :

int mysql_list_dbs([int link_identifier])

Возврашает набор записей, содержащий список БД на сервере.

$bd=mysql_connect("localhost", "name", "pass");$bd_list=mysql_list_dbs($bd);while($row=mysql_fetch_object($bd_list)) {  echo $row->Database."\n";}



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

mysql_db_name

Возвращает имя базы данных из списка.

Синтаксис :

int mysql_db_name(int result, int row [, mixed field])

Параметр result задает дескриптор набора записей, полученных при помощи функции mysql_list_dbs(). Аргумент row указывает номер записи.

В случает ошибки данная функция возвращает false.

mysql_connect("localhost", "username", "pass");$db_list=mysql_list();for($i=0;$i<($cnt=mysql_num_rows($db_list));$i++) {  echo mysql_db_name($db_list,$i)."\n";}

Ранее функция называлась mysql_dbname().

mysql_select_db

Выбор одной базы данных MySQL.

Синтаксис :

int mysql_select_db (string database_name [, int link_identifier])

Возвращает true при удачном закрытии или false при ошибке.

Если Вы планируете открывать только одно соединение с базой данных за все время работы сценария, то можете не сохранять возвращенное значение, а также не указывать идентификатор при вызове всех остальных функций.

До того как послать первый запрос серверу MySQL, необходимо указать, с какой базой данных мы собираемся работать. Для этого и предназначена данная функция. Она уведомляет, что в дальнейших операциях с соединением link_identifier

(или с последним открытым соединением, если указанный параметр не задан) будет использоваться база данных database_name.

Если на момент вызова данной функции подключений к базе данных нет, то косвенно вызывается функция mysql_connect() с параметрами по умолчанию.

mysql_create_db

Создание базы данных MySQL.

Синтаксис :

int mysql_create_db(string dbname [, int link_identifier])

Эта функция создает новую базу данных MySQL с именем dbname, используя подключение link_identifier.

$db=mysql_connect("localhost", "name", "pass");if(mysql_create_db("my_db_name")) {  echo "БД my_db_name создана");} else {  echo "Ошибка создания БД: %s\n".mysql_error());}



mysql_drop_db

Удаление базы данных MySQL.

Синтаксис :

int mysql_drop_db(string database_name [, int link_identifier])

Функция mysql_drop_db() удаляет базу данных database_name, доступную в подключении link_identifier.

В случае успешного удаления возвращает true, при ошибке - false.

mysql_list_tables

Возвращает список таблиц в БД.

Синтаксис :

int mysql_list_tables(string database [,int link_identifier])

Функция возвращает идентификатор результата (одна колонка), в котором содержаться имена всех таблиц, присутствующих в базе данных. Для извлечения этих имен можно использовать функцию mysql_result() с номером колонки, равным 0, иди функцию mysql_tablename().

Следующий пример выведет все имена баз данных и таблиц, корорые в них содержаться:

$db=mysql_connect("localhost", "user_name", "");$db_list=mysql_list_dbs($db);while($r_db=mysql_fetch_object($db_list)) {  echo $r_db->Database."\n";    // распечатать список таблиц  $t_list=mysql_list_tables($r_db->Database);  for($i=0;$i<mysql_num_rows($t_list);$i++) {    echo " - ".mysql_tablename($t_list,$i)."\n";  }}

mysql_tablename

Возвращает имя таблицы в БД.

Синтаксис :

int mysql_tablename(int result, int i)

Функция возвращает имя таблицы с номером i из набора записей, полученных при помощи функции mysql_list_tables().

$db=mysql_connect("localhost", "user_name", "");$result=mysql_list_tables("db_name");$i=0;while($i<mysql_num_rows($result)) {  $t_name[$i]=mysql_tablename($result, $i);  echo $t_name[$i]."<BR>";  $i++;}

mysql_query

Посылает запрос базе данных MySQL.

Синтаксис :

int mysql_query(string query [,int link_identifier])

Эта функция посылает запрос query базе данных, связанной с идентификатором link_identifier Если идентификатор не указан, то принимается во внимание последнее открытое соединение. Если до этого соединение небыло установлено, то выполняется операция mysql_connect() с параметрами по умолчанию.



SQL-выражение, указанное в параметре query, не должно оканчиваться ";".

Если выражение содержит ошибки, или его выполнение приводит к ошибкам, то функция mysql_query() возвращает false.

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

  mysql_result() - получить элемент набора записей

  mysql_fetch_array() - внести запись в массив

  mysql_fetch_row() - занести запись в нумерованный массив

 mysql_fetch_assoc() - занести запись в ассоциативный массив

  mysql_fetch_object() - занести запись в объект

Чтобы узнать, сколько записей было найдено командой SELECT, воспользуйтесь функцией mysql_num_rows().

Для того, чтобы узнать, сколько записей было изменено в результате выполнения запросов DELETE, INSERT, REPLACE или UPDATE, воспользуйтесь функцией mysql_affected_rows().

После обработки результатов запроса он может быть удален функцией mysql_free_result(). Но в этом нет необходимости, т.к. результаты сами уничтожаются после завершения работы сценария.

mysql_db_query

Посылает запрос к указанной базе данных MySQL.

Синтаксис :

int mysql_db_query(string database, string query [,int link_identifier])

Эта функция эквивалентна следующей последовательности функций:

mysql_select_db(string database [, int link_identifier]);

mysql_query(string query [, int link_identifier]);

mysql_num_rows

Возвращает количество строк в результате запроса.

Синтаксис :

int mysql_num_rows(int result)

Эта функция возвращает число записей, найденных в результате выполнения SQL-команды SELECT (поиск по базе данных).

<?$link = mysql_connect("localhost", "username", "password"); mysql_select_db("database", $link); $result = mysql_query("SELECT * FROM table1", $link); $num_rows = mysql_num_rows($result);  echo "Получено строк: $num_rows\n";?>

mysql_affected_rows

Возвращает количество измененных записей в БД MySQL.



Синтаксис :

int mysql_affected_rows([int link_identifier]);

Функция mysql_affected_rows() возвращает количество записей, которые были изменены в базе данных в результате выполнения запросов DELETE, INSERT, REPLACE или UPDATE.

Если последним запросом была команда DELETE без ограничения WHERE (т.е. из таблицы были удалены все записи), то наша функция возвратит 0.

mysql_insert_id

Получает вставленный идентификатор.

Синтаксис :

int mysql_insert_id([int $link_identifier])

Функция возвращает непосредственно перед ее вызовом сгенерированный идентификатор записи для автоинкрементного поля после выполнения команды insert. Вызывать ее разумно только сразу после выполнения инструкции insert, например, в таком контексте:

mysql_query("insert into Таблица(поле 1, поле 2) values("aa","bb")");

$id=mysql_insert_id();

Теперь к только что вставленной записи можно обратиться, используя идентификатор $id:

$r=mysql_query("select * from Таблица where id=$id");

$Row=mysql_fetch_array($r);

mysql_data_seek

Устанавливает указатель текущей строки.

Синтаксис :

int mysql_data_seek(int result, int row_number)

Эта функция устанавливает указатель текущей строки в результате result в позицию row_number, так что следующий вызов mysql_fetch_row() и mysql_fetch_array()

вернет значения полей именно этой строки.

Нумерация записей ведется с 0.

Возвращает false в случае ошибки или если строки кончились.

mysql_free_result

Уничтожает набор записей.

Синтаксис :

int mysql_free_result(int result)

Данная функция освобождает память, занимаемую набором записей result, возвращенным запросом.

Эта функция необходима, когда нужно экономить память, т.к. PHP автоматически освобождает память при завершении сценария.


Работа с бинарными данными


pack

Пакетирование данных в двоичную строку.

Синтаксис :

string pack(string format [,mixed $args, ...]);

Функция pack() упаковывает заданные аргументы в бинарную строку, которая затем и возвращается. Формат параметров, а также их количество, задается при помощи строки $format, которая представляет собой набор однобуквенных спецификаторов форматирования - наподобие тех, которые указываются в sprintf(), но только без знака %. После каждого спецификатора может стоять число, которое отмечает, сколько информации будет обработано данным спецификатором. А именно, для форматов a,A,h и H число задает, какое количество символов будет помещено в бинарную строку из тех, что находится в очередном параметре-строке при вызове функции (то есть, определяет размер поля для вывода строки). В случае @ оно определяет абсолютную позицию, в которую будут помещены следующие данные. Для всех остальных спецификаторов следующие за ними числа задают количество аргументов, на которые распространяется действие данного формата. Вместо числа можно указать *, в этом случае подразумевается, что спецификатор действует на все оставшиеся данные.

Вот полный список спецификаторов формата:

  a - строка, свободные места в поле заполняются символом с кодом 0;

  A - строка, свободные места заполняются пробелами;

  h - шестнадцатиричная строка, младшие разряды в начале;

  H - шестнадцатиричная строка, старшие разряды в начале;

  c - знаковый байт (символ);

  C - беззнаковый байт;

  s - знаковое короткое целое (16 битовб порядок байтов определяется архитектурой процессора);

  S - беззнаковое короткое число;

  n - беззнаковое целое (16 битов, старшие разряды в конце);

  v - беззнаковое целое (16 битов, младшие разряды в конце);

  i - знаковое целое (размер и порядок байтов определяется архитектурой);

  I - беззнаковое целое;

  l - знаковое длинное целое (32 бита, порядок знаков определяется архитектурой);

  L - беззнаковое длинное целое;

  N - беззнаковое длинное целое (32 бита, старшие разряды в конце);


  V - беззнаковое целое (32 бита, младшие разряды в конце);

  f - число с плавающей точкой (зависит от архитектуры);

  d - число с плавающей точкой двойной точности (зависит от архитектуры);

  x - символ с нулевым кодом;

  X - возврат назад на 1 байт;

  @ - заполнение нулевым кодом до заданной абсолютной позиции.

// Целое, целое, все остальное - сиволы$bindata = pack("nvc*", 0x1234, 0x5678, 65, 66);

После выполнения приведенного кода в строке $bindata будет содержаться 6 байтов в такой последовательности:

0x12, 0x34, 0x78, 0x56, 0x41, 0x42 (в шестнадцатиричной системе счисления).

unpack

Распаковывает данные из двоичной строки.

Синтаксис :

array unpack(string format, string data);

Распаковывает данные из двоичной строки в массив согласно формату. Возвращает массив, содержащий распакованные элементы.

$array = unpack("c2chars/nint", $binarydata);

Возникающий в результате массив будет содержать "chars1", "chars2" и "int".


Работа с блоками текста


str_replace

Заменяет в исходной строке одни подстроки на другие.

Синтаксис :

string str_replace(string from, string to, string str)

Эта функция заменяет в строке str все вхождения подстроки from (с учетом регистра) на to и возвращает результат. Исходная строка, переданная третьим параметром, при этом не меняется.

также эта функиция может работать с двоичными строками.

substr_replace

Заменяет в исходной строке одни подстроки на другие.

Синтаксис :

string substr_replace(string str, string replacement, int start [, int lemgth])

Эта функция возвращает строку str, в которой часть от символа с позицией start и длиной length (или до конца, если аргумент длины не указан) заменяется строкой replacement.

Если значение start положительно, отсчет производится от начала строки str, иначе - от конца (-1 - последний символ строки).

Если значение length неотрицательно, тогда оно указывает длину заменяемого фрагмента. Если оно отрицательно, то это число символов от конца строки str до последнего символа заменяемого фрагмента (со знаком минус).

wordwrap

Разбивает исходный текст на строки с определенными завершающими символами.

Синтаксис :

string wordwrap(string str [, int width [, string break [, int cut]]])

Эта функция разбивает блок текста str на несколько строк, завершаемых символами break, так, чтобы на одной строке было не более width

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

strtr

Комплексная замена в строке.

Синтаксис :

string strtr(string str, string from, string to)

string strtr(string str, array from)

В первом случае функция strtr() возвращает строку str, у которой каждый символ, присутствующий в строку from, заменяется на корреспондирующий из строки to. В случае, если строки from и to

различной длины, то лишние конечные символы длинной строки игнорируются.

Во втором случае функция strtr() возвращает строку, в которой фрагменты строки str заменяются на соответствующие индексам значения элементов массива from. При этом функция пытается заменить сначало наибольшие фрагменты исходной строки и не выполняет замену в уже модифицированных частях строки. Таким бразом, теперь мы можем выполнить несколько замен сразу:

$Subs = array(  "<name>" => "Larry",  "<time>" => date("d.m.Y"));$st="Привет, <name>! Сейчас <time";echo strtr($st,$Subs);


А вот как можно "отменить" действие функции HtmlSpecialChars():

$Trans=array_flip(get_html_translation_table());$st=strtr($st, $Trans);

В результате мы из строки, в которой все спецсимволы заменены на их HTML-эквиваленты, получим исходную строку.

stripslashes

Удаление обратных слешей.

Синтаксис :

string stripslashes(string str);

Заменяет в строке str некоторые предваренные слешем символы на их однокодовые эквиваленты. Это относится к следующим символам: ", ", \.

stripcslashes

Преобразование специальных символов в их двоичное представление.

Синтаксис :

string stripcslashes(string str);

Возвращает строку, в которой те специальные символы, которые закомментированы (для визуального отображения) обратным слешем, преобразуются в их естественное двоичное представление. Распознаются C-подобные записи, например: \n, \r ..., восьмеричные и шестнадцатеричные последовательности.

addslashes

Добавление слешей перед специальными символами строки.

Синтаксис :

string addslashes(string str);

Вставляет слеши только перед следующими символами:", " и \. Функцию очень удобно использовать при вызове eval().

 

addcslashes

Форматирование строки слешами в С-представление.

Синтаксис :

string addcslashes(string str, string charlist);

Функция addcslashes() возвращает строку str, в которую вставлены символы обратного слеша "\" перед перечисленными в строке-списке charlist

символами. Это позволяет преобразовать непечатные символы в их визуальное С-представление.

quotemeta

Цитирование метасимволов.

Синтаксис :

string quotemeta(string str);

Возвращает строку, в которую добавлены обратные слеши "\" перед каждым из следующих символов:

. \\ + * ? [ ^ ] ( $ )

Может использоваться для подготовки шаблонов в регулярных выражениях.

strrev

Производит реверс строки.

Синтаксис :

string strrev(string str)

функция strrev() возвращает строку str "задом наперед".


Работа с Cookies


Немного теории

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

Самый распространенный прием применения Cookies - логин и пароль пользователя, использующего некотовые защищенные ресурсы вашего сайта. Эти данные, конечно же, между открытиями страниц храняться в Cookies, для того чтобы пользователю не пришлось их каждый раз набирать вручную заново.

У каждого Cookies есть определенное время жизни, по истечении которого он автоматически уничтожается. Существуют также Cookies, которые "живут" только в течение текущего сеанса работы с браузером.

Каждый Cookie устанавливается сценарием на сервере. Для этого он должен послать браузеру специальный заголовок вида:

Set-cookie: данные

Сценарии с других серверов, а также расположенные в другом каталоге, не будут извещены о "чужих" Cookies. Для них их словно и нет. И это правильно с точки зрения безопасности - кто знает, насколько секретна может быть информация, сохраненная в Cookies?

Получение Cookie

Предположим, сценарий отработал и установил какой-то Cookie, например, с именем Cook и значением Val. В следующий раз при запуске этого сценария (на самом деле, и всех других сценариев, расположенных на том же сервере в том же каталоге или ниже по дереву) ему передастся пара типа Cook=Val (через специальную переменную окружения). PHP это событие перехватит и автоматически создаст переменную $Cook со значением Val. То есть интерпретатор действует точно так же, как если бы значение нашего Cookie пришло откуда-то из формы. Та переменная, которую мы установили в прошлый раз, будет доступна и сейчас.


setcookie

Установка Cookie.

Синтаксис :

int setcookie(string $name [,string $value] [,int $expire] [,string $path] [,string $domain] [,book $secure])

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

Вызов setcookie() определяет новый Cookie, который тут же посылается браузеру вместе с остальными заголовками. Все аргументы, кроме имени, необязательны. Если задан только параметр $name (имя Cookie), то Cookie с указанным именем у пользователя удаляется. Вы можете пропускать аргументы, которые не хотите задавать, пустыми строками "". Аргументы $expire и $secure не могут быть представлены строками, а потому вместо пустых строк здесь нужно использовать 0.

Параметр $expire задает timestamp, который, например, может быть сформирован функциями time() или mktime().

Параметр $secure говорит о том, что величина Cookie может передаваться только через безопасное HTTPS-соединение.

Примеры:

// Cookie на одну сессию, т.е. до закрытия браузера

SetCookie("TextCookie","value");

// Эти Cookies уничтожаются браузером через 1 час после установки

SetCookie("TextCookie",$val,time()+3600);

SetCookie("TextCookie",$val,time()+3600,"/~rasmus/",".utoronto.ca",1);

После вызова SetCookie() только что созданный Cookie сразу появляется среди глобальных переменных как переменная с заданным в параметре $name именем. Она появиться и при следующем запуске сценария - даже если SetCookie() в нем и не будет вызвана.


Работа с цветом в формате RGB


imageColorAllocate

Создание нового цвета и занесение его в палитру рисунка.

Синтаксис :

int imageColorAllocate(int im, int red, int green, int blue)

Функция возвращает идентификатор цвета, связанного с соответствующей тройкой RGB. Первым параметром функция требует идентификатор изображения, загруженного в память или созданного до этого.

Параметры red, green и blue задают красный, зеленый и синий компоненты цвета соответственно. Значения этих параметров должны лежать в пределах от 0 до 255, или от 0x00 до 0xFF.

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

Пример:

Пример использования функции imageColorAllocate():

<?php. . .// белый$white = imagecolorallocate($im, 255, 255, 255);$white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);// черный$black = imagecolorallocate($im, 0, 0, 0);$black = imagecolorallocate($im, 0x00, 0x00, 0x00);. . .?>

imageColorDeAllocate

Исключение цвета из палитры рисунка.

Синтаксис :

int imageColorDeAllocate(int im, int color)

Эта функция удаляет из палитры рисунка im цвет color, который был предварительно занесен в рисунок функцией imageColorAllocate().

Пример:

Пример использования функции imageColorDeAllocate():

<?php. . .$white = imageColorAllocate ($im, 255, 255, 255);imageColorDeAllocate ($im, $white);. . .?>

imageColorSet

Замена цвета определенного элемента палитры.

Синтаксис :

bool imageColorSet(int im, int index, int red, int green, int blue)

Данная функция устанавливает для элемента палитры index рисунка im значения компонент цвета: red (красный), green (зеленый), blue

(синий). При этом все части рисунка, закрашенные данным цветом, также изменят свой оттенок.

imageColorClosest

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

Синтаксис :

int imageColorClosest(int im, int red, int green, int blue)

Вместо того, чтобы пытаться выискать свободное место в палитре цветов, эта функция просто возвращает идентификатор цвета, уже существующего в рисунке и находящегося ближе всего к затребованному. Таким образом, нового цвета в палитру не добавляется. Если палитра не велика, то функция может вернуть не совсем тот цвет, который вы ожидаете. Например, в палитре из трех цветов "красный-зеленый-синий" на запрос желтого цвета будет, скорее всего, возвращен идентификатор зеленого - он ближе всего с точки зрения GD соответствует понятию "зеленый".


imageColorTransparent

Определение цвета прозрачности.

Синтаксис :

int imageColorTransparent(int im [,int color])

Эта функция указывает GD, что соответствующий цвет color (заданный своим идентификатором при помощи функции imageColorAllocate()) в изображении im (im - идентификатор изображения, заданный функцией imageCreate()) должен обозначиться как прозрачный. Возвращает идентификатор установленного до этого прозрачного цвета, либо false, если таковой не был определен ранее.

Надо отметить, что не все форматы поддерживают задание прозрачного цвета - например, JPEG не может его содержать.

imageColorsForIndex

Получение RGB-составляющих элемента палитры.

Синтаксис :

array imageColorsForIndex(int im, int index)

Функция возвращает ассоциативный массив с ключами red, green, blue (именно в таком порядке), которым соответствуют значения, равные величинам компонент RGB в идентификаторе цвета index. Но мы можем и не обращать особого внимания на ключи и преобразовать возвращенное значение как список:

<?php. . .$color=imageColorAt($im,0,0);list($r,$g,$b)=array_values(imageColorsForIndex($im,$color));echo "R=$r, g=$g, b=$b";. . .?>

imageColorAt

Возвращает индекс цвета точки.

Синтаксис :

int imageColorAt(int im, int x, int y)

Эта функция возвращает цвет точки, расположенной на координатах (x, y).

Если PHP скомпилирован с GD library 2.0 или выше, а картинка - truecolor, то эта функция возвратит идентификатор цвета, а не его RGB-представление.

<?php$im = imageCreateFromPng("file.png");$rgb = ImageColorAt($im, 100, 100);$r = ($rgb >> 16) & 0xFF;$g = ($rgb >> 8) & 0xFF;$b = $rgb & 0xFF;?>

imageColorsTotal

Получение количества цветов в палитре.

Синтаксис :

int imageColorsTotal(int im)

Функция возвращает число цветов в палитре указанного изображения.

imageColorExact

Получение индекса цвета палитры.

Синтаксис :

int imageColorExact(int im, int red, int green, int blue)

Функция возвращает индекс указанного цвета (red, green, blue) в палитре изображения im.

Функция возвратит -1, если указанного цвета нет в палитре изображения.

imageColorResolve

Нахождение или создание указанного цвета.

Синтаксис :

int imageColorResolve(int im, int red, int green, int blue)

Функция возвращает индекс указанного цвета (red, green, blue) в палитре изображения im.

В случае, если такой цвет в палитре отсутствует, то он создается.

imageGammaCorrect

Применение гамма-коррекции рисунка.

Синтаксис :

int imageGammaCorrect(int im, double inputgamma, double outputgamma)

Эта функция производит исправления гаммы к изображению, заданному дескриптором im.

Параметр inputgamma задает входную гамму, а outputgamma - гамму вывода.


Работа с файлами


ftp_get

Производит загрузку с FTP-сервера.

Синтаксис :

int ftp_get(int ftp_stream, string local_file, string remote_file, int mode)

Функция ftp_get() загружает файл под названием remote_file с FTP-сервера и локально сохраняет его под именем local_file. Параметр mode

устанавливает режим передачи файла и может принимать значения FTP_ASCII(текстовой) или FTP_BINARY(бинарный, двоичный).

Функция возвращает true или false при ошибке.

ftp_fget

Производит загрузку и запись файла.

Синтаксис :

int ftp_fget(int ftp_stream, string fp, string remote_file, int mode)

Функция ftp_fget() загружает файл под названием remote_file с FTP-сервера и сохраняет его в файле, который имеет дескриптор fp. Параметр mode устанавливает режим передачи файла и может принимать значения FTP_ASCII(текстовой) или FTP_BINARY(бинарный, двоичный).

Функция возвращает true или false при ошибке.

ftp_put

Производит загрузку файла на FTP-сервер.

Синтаксис :

int ftp_put(int ftp_stream, string remote_file, string local_file, int mode)

Функция ftp_put() загружает файл на FTP-сервер под именем remote_file. Параметр mode устанавливает режим передачи файла и может принимать значения FTP_ASCII(текстовой) или FTP_BINARY(бинарный, двоичный).

Функция возвращает true или false при ошибке.

$upload = ftp_put($ftp_id, "C:\\file.txt", "/file.txt", FTP_ASCII);

ftp_fput

Производит чтение и загрузку файла на FTP-сервер.

Синтаксис :

int ftp_fput(int ftp_stream, string remote_file, string fp, int mode)

Функция ftp_fput() читает открытый файл с дескриптором fp до конца и загружает этот файл на FTP-сервер под именем remote_file. Параметр mode устанавливает режим передачи файла и может принимать значения FTP_ASCII(текстовой) или FTP_BINARY(бинарный, двоичный).

Функция возвращает true или false при ошибке.

ftp_size

Определяет размер файла.

Синтаксис :

int ftp_size(int ftp_stream, string remote_file)

Функция ftp_size() возвращает размер файла, заданного в параметре remote_file, в байтах или -1 при ошибке.


Не все серверы поддерживают эту возможность.

ftp_mdtm

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

Синтаксис :

int ftp_mdtm(int ftp_stream, string remote_file)

Функция ftp_mdtm() возвращает время, последней модификации, представленное в формате Unix, или -1 при ошибке.

Данная функция не работает с каталогами.

ftp_rename

Производит переименование файла.

Синтаксис :

int ftp_rename(int ftp_stream, string from, string to)

Функция ftp_rename() переименовывает файл from в to.

Функция возвращает true или false в случае ошибки.

ftp_delete

Производит удаление файла с сервера.

Синтаксис :

int ftp_delete(int ftp_stream, string path)

Функция ftp_delete() удаляет файл, имя которого задано в параметре path.

Функция возвращает true или false в случае ошибки.

ftp_site

Производит выполнение команды SITE на сервере.

Синтаксис :

int ftp_site(int ftp_stream, string cmd)

Функция ftp_site() посылает серверу команду cmd.

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

Функция возвращает true или false в случае ошибки.


Работа с фиксированными шрифтами


Библиотека GD имеет некоторые возможности по работе с текстом и шрифтами. Шрифты представляют собой специальные ресурсы, имеющие собственный идентификатор, и чаще всего загружаемые из файла или встроенные в GD. Каждый символ шрифта может быть отображен лишь в моноцветном режиме, т.е. "рисованные" символы не поддерживаются. Встроенных шрифтов всего 5 (идентификаторы от 1 до 5), чаще всего в них входят моноширные символы разных размеров. Остальные шрифты должны быть предварительно загружены.

imageLoadFont

Загрузка шрифта.

Синтаксис :

int imageLoadFont(string file)

Функция загружает файл шрифтов file и возвращает идентификатор шрифта - это будет цифра, большая 5, потому что пять первых номеров зарезервировано как встроенные. Формат файла - бинарный, а потому зависит от архитектуры машины. Это значит, что файл со шрифтами должен быть сгенерирован по крайней мере на машине с процессором такой же архитектуры, как и у той, на котором вы собираетесь использовать PHP.

Формат файла со шрифтом

Смещение

Тип

Описание

Byte 0-3

long

Число символов в шрифте (nchars)

byte 4-7

long

Индекс первого символа шрифта (обычно 32 - пробел)

byte 8-11

long

Ширина (в пикселях) каждого знака (width)

byte 12-15

long

Высота (в пикселях) каждого знака (height)

byte 16-...

array

Массив с информацией о начертании каждого символа, по одному байту на пиксел. На один символ, таким образом, приходится width*height*nchars байтов. 0 означает отсутствие точки в данной позиции, все остальное - ее присутствие.

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

imageFontHeight

Установка высоты шрифта.

Синтаксис :

int imageFontHeight(int font)

Функция возвращает высоту в пикселях символов в заданном шрифте.

imageFontWidth

Установка ширины шрифта.

Синтаксис :

int imageFontWidth(int font)

Функция возвращает ширину в пикселях символов в заданном шрифте.


imageString

Выводит строку в горизонтальном направлении.

Синтаксис :

int imageString( int im, int font, int x, int y, string s, int color)

Функция выводит строку s

в изображение im, используя шрифт font и цвет color.

Координаты (x, y) будут координатами верхнего левого угла прямоугольника, в который вписана строка.

Если параметр font

задан как 1, 2, 3, 4 или 5, то выводится шрифт соответствующего размера.

<?php  // создаем изображение 100x30  $im = imagecreate(100, 30);   // задаем цвет текста  $textcolor = imagecolorallocate($im, 0, 0, 255);    // выводим надпись в верхнем левом углу  imagestring($im, 5, 0, 0, "Hello world!", $textcolor);    // выводим изображение в браузер  header("Content-type: image/jpg");  imagejpeg($im);?>

imageStringUp

Выводит строку в вертикальном направлении.

Синтаксис :

int imageStringUp(int im, int font, int x, int y, string s, int color)

Эта функция также выводит строку текста, но не в горизонтальном, а в вертикальном направлении.

Верхний левый угол задается координатами (x, y).

Если параметр font

задан как 1, 2, 3, 4 или 5, то выводится шрифт соответствующего размера.

imageChar

Вывод символа горизонтально.

Синтаксис :

int imageChar(int im, int font, int x, int y, string c, int color)

Функция выводит символ c

в горизонтальном положении в месте на рисунке, заданном координатами (x, y). Шрифт символа задается параметром font. Если этот параметр принимает значение от 1 до 5, то используются встроенные шрифты. Цвет символа задается параметром color.

<?php// создаем картинку размером 100x100$im = imagecreate(100, 100); $string = "PHP"; // задаем цвет символа$black = imagecolorallocate($im, 0, 0, 0); // Выведем символ "P" в верхнем левом углуimagechar($im, 1, 0, 0, $string, $black); // выведем картинку в браузерheader("Content-type: image/png");imagepng($im);?>

imageCharUp

Вывод символа вертикально.

Синтаксис :

int imageCharUp(int im, int font, int x, int y, string c, int color)

Функция выводит символ c

в вертикальном положении в месте на рисунке, заданном координатами (x, y). Шрифт символа задается параметром font. Если этот параметр принимает значение от 1 до 5, то используются встроенные шрифты. Цвет символа задается параметром color.


Работа с FTP-сервером


ftp_connect

Производит подключение к FTP-серверу.

Синтаксис :

int ftp_connect(string host [, int port])

В функции ftp_connect() аргумент host указывает имя сервера, к которому производится подключение, а необязательный аргумент port

указывает какой порт нужно использовать (по умолчанию это 21).

Функция возвращает дескриптор потока FTP или false в случае ошибки.

ftp_pasv

Производит переключение пассиваного режима.

Синтаксис :

int ftp_pasv(int ftp_stream, int pasv)

Функция ftp_pasv() производит переключение режима подключения в пассивный, в случае, если аргумент pasv равен true. Если false - то режим подключения будет активный.

В пассивном режиме передача данных инициируется клиентом, а в активном - сервером (это бывает необходимо при блокировке портов у клиента).

Функция возварщает true или false при ошибке.

ftp_login

Производит вход на сервер FTP.

Синтаксис :

int ftp_login(int ftp_stream, string username, string password)

Функция ftp_login() производит регистрацию в системе под именем username

с паролем password. Возвращает true или false при ошибке.

ftp_quit

Производит завершение сеанса FTP.

Синтаксис :

int ftp_quit(int ftp_stream)

ftp_pwd

Производит определение текущего каталога.

Синтаксис :

int ftp_pwd(int ftp_stream)

Эта функция возвращает текущий каталог FTP-сервера или false при ошибке.

ftp_cdup

Производит переход в корневой каталог.

Синтаксис :

int ftp_cdup(int ftp_stream)

Функция возвращает true или false при ошибке.

ftp_chdir

Производит переход в каталог.

Синтаксис :

int ftp_chdir(int ftp_stream, string directory)

Функция возвращает true или false при ошибке.

ftp_mkdir

Производит создание каталога.

Синтаксис :

int ftp_mkdir(int ftp_stream, string directory)

Функция возвращает имя созданного каталога или false при ошибке.

ftp_rmdir

Производит удаление каталога.

Синтаксис :

int ftp_rmdir(int ftp_stream, string directory)

Функция true или false при ошибке.


ftp_nlist

Производит получение листинга каталога.

Синтаксис :

int ftp_nlist(int ftp_stream, string directory)

Функция ftp_nlist() возвращает массив файловых имен или false при ошибке.

ftp_rawlist

Получение подробного листинга каталога.

Синтаксис :

int ftp_rawlist(int ftp_stream, string directory)

Функция ftp_rawlist() выполняет FTP-команду LIST, и возвращате его результаты в массиве, где каждый элемент соответствует строке текста "как есть". Идентификатор типа системы, возвращаемый ftp_systype(), может быть использован для определения того, как следует интерпретировать результаты.

ftp_systype

Возвращает системный идентификатор типа FTP-сервера.

Синтаксис :

int ftp_systype(int ftp_stream)

Функция возвращает строковое значение или false в случае ошибки.


Работа с листами:


Доступ к листам в Excel осуществляется через объект Sheets.

Метод Select() позволяет сделать активным тот или иной лист документа:

$rangeSheet=$xls->Sheets("Лист2");$rangeSheet->Select();

где "Лист2" - имя листа, который должен стать активным.

Добавить новый лист можно при помощи метода Add():

$rangeSheet=$xls->Sheets;$rangeSheet->Add();

Если это первое добавление нового листа, то ему присваивается имя "Лист4". Обычно лист добавляется перед активным листом. Т.е. если до вызова метода Add() метод выбора листа Select() не вызывался, то новый лист добавляется в начало списка листов.

Имя листа содержится в свойстве Name() объекта Sheets().

В следующем примере создадим новый документ и переименуюем листы "Лист1", "Лист2" и "Лист3" (которые создаются автоматически) в "Прайсы", "Контактная информация", "Заказ" соответственно:

<?php$xls = new COM("Excel.Application"); // Создаем новый COM-объект$xls->Application->Visible = 1;      // Заставляем его отобразиться$xls->Workbooks->Add();              // Добавляем новый документ$rangeSheet=$xls->Sheets("Лист1");$rangeSheet->Name = "Прайсы";$rangeSheet=$xls->Sheets("Лист2");$rangeSheet->Name = "Контактная информация";$rangeSheet=$xls->Sheets("Лист3");$rangeSheet->Name = "Заказ";?>



Работа с несколькими массивами


array_diff

Определение исключительного пересечения массивов.

Синтаксис :

array array_diff(array arr1, array arr2 [, array ...])

Данная функция возвращает массив, который содержит значения, имеющиеся только в массиве arr1 ( и не имеющиеся в любых других). При этом индексы не сохраняются.

$arr1 = array("a" => "green", "red", "blue");$arr2 = array("b" => "green", "yellow", "red");$result = array_diff($arr1, $arr2);// $result = array("blue")

array_intersect

Определение включительного пересечения массивов.

Синтаксис :

array array_intersect(array arr1, array arr2 [, array ...])

Функция array_intersect() возвращает массив, который содержит значения массива arr1, имеющиеся во всех остальных массивах. При этом индексы не сохраняются.

$arr1 = array("a" => "green", "red", "blue");$arr2 = array("b" => "green", "yellow", "red");$result = array_intersect($arr1, $arr2);// $result = array("a" => "green", "red")

array_merge

Слияние массивов.

Синтаксис :

array array_merge(array arr1, array arr2 [, array ...])

Функция array_merge()

призвана устранить все недостатки, присущие оператору + для слияния массивов. А именно, она сливает массивы, перечисленные в ее аргументах, в оди большой массив и возвращает результат. Если в массивах встречаются одинаковые ключи, в результат помещается пара ключ=>значение из того массива, который расположен правее в списке аргументов. Однако это не затрагивает числовые ключи: элементы с такими ключами помещаются в конец результирующего массива в любом случае.

$L1=array(10,20,30);$L2=array(100,200,300);$L=array_merge($L1, $L2);// теперь $L===array(10,20,30,100,200,300);

array_merge_recursive

Объединение сложных массивов.

Синтаксис :

array array_merge_recursive(array arr1, array arr2 [, array ...])


Функция array_merge_recursive()

сильно напоминает функцию array_merge() с тем дополнением, что она может работать с многомерными и древовидными массивами, а элементы с одинаковыми строковыми индексами превращаются в подмассивы. Для числовых индексов поведение функции аналогично array_merge().

$arr1 = array("color" => array("favorite" =>"red"), 5);$arr2 = array(10, "color" => array("favorite" =>"green"), "blue");$result = array_merge_recursive($arr1, $arr2);// $result = array("color" => array (//                   "favorite" => array("red", "green"),//                   "blue"), 5, 10)

Получение и удаление части массива

array_slice

Получение части массива.

Синтаксис :

array array_slice(array arr, int offset [, int len])

Эта функция возвращает часть ассоциативного массива arr, начиная с элемента со смещением (номером) offset от начала и длиной len

(если последний параметр не задан, до конца массива).

Параметры offset и len задаются по точно таким же правилам, как и аналогичные параметры в функции substr(). А именно, если offset>0, то последовательность будет начинаться с элемента, имеющего позицию offset

от начала массива, а если <0, то отсчет производится от конца массива. Надо отметить, что первый элемент имеет нулевую позицию, а последний (-1).

Если указать length>0, то это число возвращаемых в массиве элементов, а если length<0, то это позиция последнего возвращаемого элемента в массиве arr от его конца.

$input = array("a", "b", "c", "e");$output = array_slice($input, 2);        // "c", "d", "e"$output = array_slice($input, 2, -1);    // "c", "d"$output = array_slice($input, -2, 1);    // "d"$output = array_slice($input, 0, 3);     // "a", "b", "c"



array_splice

Удаляет часть массива или заменяет ее частью другого массива.

Синтаксис :

array array_splice(array arr, int offset [, int len] [, int repl])

Эта функция, также как и array_slice(), возвращает подмассив arr

начиная с индекса offset максимальной длины len, но, вместе с тем, она делает и другое полезное действие. А именно, она заменяет только что указанные элементы на то, что находится в массиве repl (или просто удаляет, если repl не указан). Если offset>0, то последовательность будет начинаться с элемента, имеющего позицию offset

от начала массива, а если <0, то отсчет производится от конца массива. Надо отметить, что первый элемент имеет нулевую позицию, а последний (-1).

Если указать length>0, то это число возвращаемых в массиве элементов, а если length<0, то это позиция последнего возвращаемого элемента в массиве arr от его конца.

$input = array("red", "green", "blue", "yellow");array_splice($input, 2);// Теперь $input===array("red", "green")array_splice($input, 1, -1);// Теперь $input===array("red", "yellow")array_splice($input, -1, 1, array("black", "maroon"));// Теперь $input===array("red", "green", "blue","black",           "maroon")array_splice($input, 1, count($input), "orange");// Теперь $input===array("red", "orange")

Последний пример показывает, что в качестве параметра repl

мы можем указать и обычное, строковое значение, а не массив из одного элемента.


Работа с таблицей:


Все свойства таблицы находятся в объекте Borders(). Вернее не в объекте, а в массиве объектов Borders[]. Каждый элемент этого массива отвечает за определенную часть таблицы (верхняя граница таблицы, нижняя, внутренние линии и т.д.). А уже у каждого элемента массива есть свои свойства, которые определяются только для данного объекта:

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

<?php$xls = new COM("Excel.Application"); // Создаем новый COM-объект$xls->Application->Visible = 1;      // Заставляем его отобразиться$xls->Workbooks->Add();              // Добавляем новый документ// Задаем область таблицы$range=$xls->Range("B2:E10");// Выделяем ее$range->Select();// Присваиваем переменной $range выделенный фрагмент$range=$xls->Selection(); // Задаем свойства левой стенки таблицы$rangeBordersLeft=$range->Borders("7");$rangeBordersLeft->LineStyle = 1;$rangeBordersLeft->Weight = 3;$rangeBordersLeft->ColorIndex = 5;// Задаем свойства верхней стенки таблицы$rangeBordersTop=$range->Borders("8");$rangeBordersTop->LineStyle = 1;$rangeBordersTop->Weight = 3;$rangeBordersTop->ColorIndex = 5;// Задаем свойства нижней стенки таблицы$rangeBordersBottom=$range->Borders("9");$rangeBordersBottom->LineStyle = 1;$rangeBordersBottom->Weight = 3;$rangeBordersBottom->ColorIndex = 5;// Задаем свойства правой стенки таблицы$rangeBordersRight=$range->Borders("10");$rangeBordersRight->LineStyle = 1;$rangeBordersRight->Weight = 3;$rangeBordersRight->ColorIndex = 5;// Задаем свойства внутренних вертикальных линий$rangeBordersVertical=$range->Borders("11");$rangeBordersVertical->LineStyle = 1;$rangeBordersVertical->Weight = 2;$rangeBordersVertical->ColorIndex = 3;// Задаем свойства внутренних горизонтальных линий$rangeBordersHorizontal=$range->Borders("12");$rangeBordersHorizontal->LineStyle = 1;$rangeBordersHorizontal->Weight = 2;$rangeBordersHorizontal->ColorIndex = 3;?>


Т.е. сначало берется левая стенка таблицы

$rangeBordersLeft=$range->Borders("7");

Для нее задются: тип линии (сплошная),

$rangeBordersLeft->LineStyle = 1;

толщина линии (жирная),

$rangeBordersLeft->Weight = 3;

цвет линии (синий)

$rangeBordersLeft->ColorIndex = 5;

Аналогично мы поступаем для правой, верхней, нижней стенок.

Для внутренних вертикальных линий

$rangeBordersVertical=$range->Borders("11");

и внутренних горизонтальных линий

$rangeBordersHorizontal=$range->Borders("12");

задаем тип линий - сплошная, толщина линий - обычная, цвет линий - красный:

$rangeBordersVertical->LineStyle = 1;$rangeBordersVertical->Weight = 2;$rangeBordersVertical->ColorIndex = 3;

и

$rangeBordersHorizontal->LineStyle = 1;$rangeBordersHorizontal->Weight = 2;$rangeBordersHorizontal->ColorIndex = 3;

Свойство LineStyle() (тип линии) может принимать значения от 1 до 13, а свойство Weight (толщина) может принимать значения от 1 до 4.

Как будут выглядеть линии при различных значениях свойств LineStyle и Weight показано в следующей таблице:



LineStyle



Weight = 1



Weight = 2



Weight = 3



Weight = 4



LineStyle = 1



















LineStyle = 2



















LineStyle = 3



















LineStyle = 4



















LineStyle = 5



















LineStyle = 6



















LineStyle = 7



















LineStyle = 8



















LineStyle = 9



















LineStyle = 10



















LineStyle = 11



















LineStyle = 12



















LineStyle = 13

















Пример формирования такой таблички в Excel при помощи PHP:

<?php$xls = new COM("Excel.Application"); // Создаем новый COM-объект$xls->Application->Visible = 1;      // Заставляем его отобразиться$xls->Workbooks->Add();              // Добавляем новый документ // Задаем для всего диапазона: выравнивание по центру//                             размер шрифта: 8//                             ширина колонок: 12$range=$xls->Range("A1:E14");$range->HorizontalAlignment = 3;$range->Font->Size = 8;$range->ColumnWidth = 12; // Формируем "шапку"$range=$xls->Range("A1");$range->Font->Bold = true;$range->Value = "LineStyle"; $range=$xls->Range("B1");$range->Font->Bold = true;$range->Value = "Weight = 1"; $range=$xls->Range("C1");$range->Font->Bold = true;$range->Value = "Weight = 2"; $range=$xls->Range("D1");$range->Font->Bold = true;$range->Value = "Weight = 3"; $range=$xls->Range("E1");$range->Font->Bold = true;$range->Value = "Weight = 4"; // Для каждого столбца выводим нижний бордюр ячейки// с соответствующими значениями свойств LineStyle и Widthfor($i=1;$i<=13;$i++) {  $range=$xls->Range("A".($i+1));  $range->Value = "LineStyle = $i";  $range=$xls->Range("B".($i+1));  $rangeBordersRight=$range->Borders("9");  $rangeBordersRight->LineStyle = $i;  $rangeBordersRight->Weight = 1;}; for($i=1;$i<=13;$i++) {  $range=$xls->Range("C".($i+1));  $rangeBordersRight=$range->Borders("9");  $rangeBordersRight->LineStyle = $i;  $rangeBordersRight->Weight = 2;}; for($i=1;$i<=13;$i++) {  $range=$xls->Range("D".($i+1));  $rangeBordersRight=$range->Borders("9");  $rangeBordersRight->LineStyle = $i;  $rangeBordersRight->Weight = 3;}; for($i=1;$i<=13;$i++) {  $range=$xls->Range("E".($i+1));  $rangeBordersRight=$range->Borders("9");  $rangeBordersRight->LineStyle = $i;  $rangeBordersRight->Weight = 4;}; ?>



Для закрепления материала рассмотрим как осуществить на PHP формирование границ таблицы на примере некоторых стандратных средств Excel.









Принцып действия:

Удаляет в выбранном диапазоне все границы, рамки и т.д.

Как реализовать:

Задаем для всех стенок и внутренних линий стиль отображения: отсутствуют (LineStyle = Null)

Код:

<?php$xls = new COM("Excel.Application"); // Создаем новый COM-объект$xls->Application->Visible = 1;      // Заставляем его отобразиться$xls->Workbooks->Add();              // Добавляем новый документ // Задаем область таблицы$range=$xls->Range("B2:E10");// Выделяем ее$range->Select();// Присваиваем переменной $range выделенный фрагмент$range=$xls->Selection(); // Задаем свойства для всей таблицы$rangeDiagonalDown=$range->Borders("5");$rangeDiagonalDown->LineStyle = Null;$rangeDiagonalUp=$range->Borders("6");$rangeDiagonalUp->LineStyle = Null;$rangeBordersLeft=$range->Borders("7");$rangeBordersLeft->LineStyle = Null;$rangeBordersTop=$range->Borders("8");$rangeBordersTop->LineStyle = Null;$rangeBordersBottom=$range->Borders("9");$rangeBordersBottom->LineStyle = Null;$rangeBordersRight=$range->Borders("10");$rangeBordersRight->LineStyle = Null;$rangeBordersVertical=$range->Borders("11");$rangeBordersVertical->LineStyle = Null;$rangeBordersHorizontal=$range->Borders("12");$rangeBordersHorizontal->LineStyle = Null; // ..... какие-то дальнейшие действия .....?>






Принцып действия:

Рисует нижний бордюр выделенного фрагмента сплошной линией одинарной толщины.

Как реализовать:

Задаем для нижнего бордюра стиль линии: сплошная (LineStyle = 1), толщина: одинарная (Weight = 2)

Код:

<?php$xls = new COM("Excel.Application"); // Создаем новый COM-объект$xls->Application->Visible = 1;      // Заставляем его отобразиться$xls->Workbooks->Add();              // Добавляем новый документ // Задаем область таблицы$range=$xls->Range("B2:E10");// Выделяем ее$range->Select();// Присваиваем переменной $range выделенный фрагмент$range=$xls->Selection(); // Задаем свойства для нижней стенки таблицы$rangeBordersBottom=$range->Borders("9");$rangeBordersBottom->LineStyle = 1;$rangeBordersBottom->Weight = 2; // ..... какие-то дальнейшие действия .....?>






Принцып действия:

Рисует левый бордюр выделенного фрагмента сплошной линией одинарной толщины.

Как реализовать:

Задаем для левого бордюра стиль линии: сплошная (LineStyle = 1), толщина: одинарная (Weight = 2)

Код:

<?php$xls = new COM("Excel.Application"); // Создаем новый COM-объект$xls->Application->Visible = 1;      // Заставляем его отобразиться$xls->Workbooks->Add();              // Добавляем новый документ // Задаем область таблицы$range=$xls->Range("B2:E10");// Выделяем ее$range->Select();// Присваиваем переменной $range выделенный фрагмент$range=$xls->Selection(); // Задаем свойства для левой стенки таблицы$rangeBordersLeft=$range->Borders("7");$rangeBordersLeft->LineStyle = 1;$rangeBordersLeft->Weight = 2; // ..... какие-то дальнейшие действия .....?>






Принцып действия:

Рисует правый бордюр выделенного фрагмента сплошной линией одинарной толщины.

Как реализовать:

Задаем для правого бордюра стиль линии: сплошная (LineStyle = 1), толщина: одинарная (Weight = 2)

Код:

<?php$xls = new COM("Excel.Application"); // Создаем новый COM-объект$xls->Application->Visible = 1;      // Заставляем его отобразиться$xls->Workbooks->Add();              // Добавляем новый документ // Задаем область таблицы$range=$xls->Range("B2:E10");// Выделяем ее$range->Select();// Присваиваем переменной $range выделенный фрагмент$range=$xls->Selection(); // Задаем свойства для правой стенки таблицы$rangeBordersRight=$range->Borders("10");$rangeBordersRight->LineStyle = 1;$rangeBordersRight->Weight = 2; // ..... какие-то дальнейшие действия .....?>






Принцып действия:

Рисует нижний бордюр выделенного фрагмента сплошной двойной линией.

Как реализовать:

Задаем для нижнего бордюра стиль линии: двойная (LineStyle = 9), толщина: Weight = 4

Код:

<?php$xls = new COM("Excel.Application"); // Создаем новый COM-объект$xls->Application->Visible = 1;      // Заставляем его отобразиться$xls->Workbooks->Add();              // Добавляем новый документ // Задаем область таблицы$range=$xls->Range("B2:E10");// Выделяем ее$range->Select();// Присваиваем переменной $range выделенный фрагмент$range=$xls->Selection(); // Задаем свойства для правой стенки таблицы$rangeBordersRight=$range->Borders("10");$rangeBordersRight->LineStyle = 9;$rangeBordersRight->Weight = 4; // ..... какие-то дальнейшие действия .....?>






Принцып действия:

Рисует нижний бордюр выделенного фрагмента сплошной линией двойной толщины.

Как реализовать:

Задаем для нижнего бордюра стиль линии: одинарная (LineStyle = 1), толщина: Weight = 3

Код:

<?php$xls = new COM("Excel.Application"); // Создаем новый COM-объект$xls->Application->Visible = 1;      // Заставляем его отобразиться$xls->Workbooks->Add();              // Добавляем новый документ // Задаем область таблицы$range=$xls->Range("B2:E10");// Выделяем ее$range->Select();// Присваиваем переменной $range выделенный фрагмент$range=$xls->Selection(); // Задаем свойства для правой стенки таблицы$rangeBordersRight=$range->Borders("10");$rangeBordersRight->LineStyle = 1;$rangeBordersRight->Weight = 3; // ..... какие-то дальнейшие действия .....?>

Работа с текстом


pdf_show

Вывод текста в текущую позицию.

Синтаксис :

void pdf_show(int pdf_document, string text)

Для вывода используются текущая позиция и текущий шрифт.

pdf_show_boxed

Вывод текста в прямоугольную область.

Синтаксис :

void pdf_show_boxed(int pdf_document, string text, double x, double y, double width, double height, string mode [, string feature])

Левый нижний угол области вывода задается (x:y); высота и ширина - height,width. Аргумент mode определяет выравнивание текста: если высота и ширина равны нулю, то возможны значения:

  left

  right

  center,

если они не равны нулю, то

  justify

  fulljustify

Если аргумент feature содержит значение "blind", текст не отображается.

Функция возвращает число символов, которые не поместились в указанный прямоугольник.

pdf_show_xy

Вывод текста в указанную позицию.

Синтаксис :

void pdf_show_xy(int pdf_document, string text, double x, double y)

pdf_set_font

Выбор шрифта, его размера и кодировки.

Синтаксис :

void pdf_set_font(int pdf_document, string font_name, double size, string encoding [, int embed])

Аргумент вида кодировки encoding может принимать значения:

  winansi (по умолчанию)

  builtin

  host

  macroman и т.д.

Если для последнего аргумента задано значение 1, шрифт будет внедрен в документ pdf (иначе нет). Если шрифт распространен, внедрять его не следует из-за увеличения размера документа.

Функция должна вызываться после pdf_begin_page().

pdf_set_leading

Установка промежутка между строками текста.

Синтаксис :

void pdf_set_leading(int pdf_document, double distance)

Используется при выводе текста функцией pdf_continue_text().

pdf_set_parameter

Установка строкового значения параметра pdflib.

Синтаксис :

void pdf_set_parameter(int pdf_document, string name, string value)

pdf_get_parameter

Получение строкового значения параметра pdflib.

Синтаксис :

void pdf_get_parameter(int pdf_document, string name [, double modifier])


Аргумент modifier используется при необходимости.

pdf_set_value

Установка численного значения параметра pdflib.

Синтаксис :

void pdf_set_value(int pdf_document, string name, double value)

pdf_get_value

Получение численного значения параметра pdflib.

Синтаксис :

void pdf_get_value(int pdf_document, string name [, double modifier])

Аргумент modifier используется при необходимости.

pdf_set_text_rendering

Установка метода вывода текста.

Синтаксис :

void pdf_set_text_rendering(int pdf_document, string mode)

Устарела, используйте pdf_set_value().

pdf_set_horiz_scaling

Установка масштабирования текста по горизонтали.

Синтаксис :

void pdf_set_horiz_scaling(int pdf_document, double scale)

pdf_set_text_rise

Установка подъема текста.

Синтаксис :

void pdf_set_text_rise(int pdf_document, double rise)

pdf_set_text_matrix

Установка матрицы преобразований шрифта.

Синтаксис :

void pdf_set_text_matrix(int pdf_document, array matrix)

Начиная с версии pdflib 2.3 эта функция недоступна.

pdf_set_text_pos

Установка позиции шрифта.

Синтаксис :

void pdf_set_text_pos(int pdf_document, double x-coor, double y-coor)

Устанавливает позицию вывода текста последующим вызовом pdf_show().

pdf_set_char_spacing

Установка интервала между символами.

Синтаксис :

void pdf_set_char_spacing(int pdf_document, double space)

Устарела, используйте pdf_set_value().

pdf_set_word_spacing

Установка интервала между символами.

Синтаксис :

void pdf_set_word_spacing(int pdf_document, double space)

Устарела, используйте pdf_set_value().

pdf_skew

Поворот системы координат.

Синтаксис :

void pdf_skew(int pdf_document, double alpha, double beta)

Угол поворота в градусах указывается относительно осей alpha (x) и beta (y). Углы не могут принимать значения 90 или 270 градусов.

pdf_continue_text

Вывод текста со следующей строки.

Синтаксис :

void pdf_continue_text(int pdf_document, string text)



Расстояние между строками может быть установлено функцией pdf_set_leading().

pdf_stringwidth

Вычисление ширины текста.

Синтаксис :

void pdf_stringwidth(int pdf_document, string text)

При вычислении длины строки используется текущий шрифт. Предварительно шрифт должен быть установлен с помощью pdf_set_font().

pdf_save

Сохранение текущих установок.

Синтаксис :

void pdf_save(int pdf_document)

Действует подобно команде postscript gsave. Полезна при необходимости масштабировать или развернуть объект, не воздействуя на другие объекты. pdf_save() требует, чтобы затем была вызвана функция pdf_restore().

pdf_restore

Восстановление ранее сохраненных установок.

Синтаксис :

void pdf_restore(int pdf_document)

Восстанавливает установки, сохраненные pdf_save(). Действует подобно команде postscript grestore.

<?phppdf_save($pdf);// всякие вращения и трансформации ...pdf_restore($pdf);?>


Работа с записями


dir

Класс каталога (псевдо-объектно ориентированный механизм).

Синтаксис :

new dir(string directory);

Псевдо-объектно ориентированный механизм для получения списка файлов каталога. Открывает каталог из directory.

После этого становятся доступны два свойства объекта: дескриптор каталога handle и строка path, указывающая, какой каталог в настоящий момент используется. Эти свойства доступны, если только каталог был открыт. Свойство handle может быть использован вместе с другими функциями работы с каталогом типа readdir(), rewinddir()

и closedir().

Для класса доступны три метода: чтение, возврат к началу и закрытие (read, rewind и close соответственно).

Пример

:

$d = dir("/etc");echo "Handle: ".$d->handle."<br>\n";echo "Path: ".$d->path."<br>\n";while($entry=$d->read()) { // Последовательно выводить  echo $entry."<br>\n";    // имя каждого файла,}                          // имеющегося в каталоге$d->close();

closedir

Закрыть дескриптор(handle) каталога.

Синтаксис :

void closedir(int dir_handle);

Закрывает поток каталога, обозначенный как dir_handle. Поток предварительно должен быть открыт финкцией opendir().

opendir

Открыть дескриптор каталога.

Синтаксис :

int opendir(string path);

Возвращает дескриптор открытого каталога path, который в последующем используется в функциях closedir(), readdir(), и rewinddir().

readdir

Получение имени следующего файла в списке каталога.

Синтаксис :

string readdir(int dir_handle);

Возвращает имя следующего файла из каталога. Имена файлов возвращаются в виде неупорядоченной последовательности.

Пример:

<?php  $handle=opendir(".");  echo "Directory handle: $handle\n";  echo "Files:\n";  while ($file = readdir($handle)) {    echo "$file\n";  }  closedir($handle);?>

Следует отметить, что функция также возвращает значения "." и "..". Если эти значения не требуются, то их можно исключить следующим образом:

<?php$handle=opendir(".");while($file=readdir($handle)) {  if($file != "." && $file != "..") {    echo "Имя файла: $file<br>";  };};closedir($handle);?>

rewinddir

Реинициализация дескриптора каталога.

Синтаксис :

void rewinddir(int dir_handle);

После вызова этой функции функция readdir() с аргументом dir_handle

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