Несколько готовых сниппетов для решения конкретных задач в PHP. Эти приемы рассчитаны на пользователей, которые знакомы с PHP. Коды ниже могут стать готовым решением или основной для очередного велосипеда. А также хорошей основой для понимания некоторых моментов, касательно того как решаются разные задачи в PHP. В общем, читайте и выносите для себя что-то новое…
Как наложить водяной знак или текст на картинку в PHP
Накладываем водяной знак
Пример ниже показывает как наложить одну картинку на другую, при этом первой картинке будет задана прозрачность в 60% и размещена она будет в нижний правый угол второй картинки.
/** * Накладывает указанный водяной знак на указанную картинку и выводит результат на экран. * @param string $img_path Путь до картинки JPG формата. Исходная картинка * @param string $watermark_path Путь до картинки JPG формата - картинка - водяной знак * @param string [$save_path = NULL] Путь для сохранения файла. Если равен NULL, изображение будет выведено на экран в бинарном виде. */ function apply_watermark( $img_path, $watermark_path, $save_path = NULL ){ // получаем размеры обоих картинок $size = getimagesize( $img_path ); $size_wm = getimagesize( $watermark_path ); $height = $size[1]; // высота $width = $size[0]; // ширина $height_wm = $size_wm[1]; $width_wm = $size_wm[0]; // определим формат $img_ext = preg_match('~.png$~i', $img_path) ? 'png' : 'jpg'; $wm_ext = preg_match('~.png$~i', $img_path) ? 'png' : 'jpg'; // загружаем изображения $image = $img_ext === 'jpg' ? imagecreatefromjpeg( $img_path ) : imagecreatefrompng( $img_path ); $watermark = $wm_ext === 'jpg' ? imagecreatefromjpeg( $watermark_path ) : imagecreatefrompng( $watermark_path ); $opacity = 60; // прозрачность // высчитываем координаты для наложения водяного знака $x = $width - $width_wm; $y = $height - $height_wm; // объединяем две картинки imagecopymerge( $image, $watermark, $x, $y, 0, 0, $width_wm, $height_wm, $opacity ); if( ! $save_path ){ // задаем заголовок, чтоб вывести результат в браузере header('Content-Type: image/jpeg'); } imagejpeg( $image, $save_path ); // очищаем память imagedestroy( $image ); imagedestroy( $watermark ); }
Пример использования функции
$uploads = wp_get_upload_dir()['basedir']; $img_path = $uploads . '/2017/03/Poisk-nuzhnyh-kvorkov-po-razdelam.png'; $watermark_path = $uploads . '/2013/10/yandex.png'; // записываем результат в файл my_image.jpg в корне сайта apply_watermark( $img_path, $watermark_path, $_SERVER['DOCUMENT_ROOT'] .'/my_image.jpg' ); echo '<img src="'. home_url('my_image.jpg') .'" alt="">';
Накладываем текст
Для нанесения текста в любой кодировке и на любом языке возможно благодаря сторонним шрифтам.
В основе примера используется функция — imagettftext()
. Она может принимать несколько значений: размер текста в пикселях, цвет, начало текста относительно координат по осям X и Y, сам наносимый текст и самое главное, файл шрифта, который позволит наносить текст в нужной кодировке.
$width = 200; // ширина изображения $height = 100; // высота изображения // создаем изображение, на котором будем рисовать $img = imagecreatetrue.
; // выводим результат в браузер header("Content-Type: image/png"); imagepng( $img ); // очищаем память imagedestroy( $img );
Нанесение на изображение текста с обводкой
Для создания обводки специальных функций в PHP нет. Но её можно сделать через функцию — imagettftext(). Нужно вывести текст много раз — девять. Да, девять раз, из них восемь раз вывод текста нужно делать цветом обводки, постоянно смещая текст 1-2 пикселя влево, вправо, вниз, вверх, влево и вверх, вправо и вверх, вправо и вниз, влево и вниз. И девятый раз выводим текст уже тем цветом, которого он должен быть.
$width = 200; // ширина изображения $height = 100; // высота изображения // создаем изображение, на котором будем рисовать $img = imagecreatetruecolor($width, $height); $rgb = 0xFFFFFF; // цвет заливки фона imagefill( $img, 0, 0, $rgb ); // заливаем холст цветом $rgb $fontName = "impact.ttf"; // путь к шрифту $fontSise = 18; // размер шрифта $textColor = 0xFFFFFF;.
$text ); // смещение вниз imagettftext( $img, $fontSise, 0, $x, $y-2, $aroundColor, $fontName, $text ); // смещение вверх imagettftext( $img, $fontSise, 0, $x+1, $y+1, $aroundColor, $fontName, $text ); // смещение вправо и вниз imagettftext( $img, $fontSise, 0, $x+1, $y-1, $aroundColor, $fontName, $text ); // смещение вправо и вверх imagettftext( $img, $fontSise, 0, $x-1, $y-1, $aroundColor, $fontName, $text ); // смещение влево и вверх imagettftext( $img, $fontSise, 0, $x-1, $y+1, $aroundColor, $fontName, $text ); // смещение влево и вниз imagettftext( $img, $fontSise, 0, $x, $y, $textColor, $fontName, $text ); // вывод самого текста // выводим результат в браузер header("Content-Type: image/png"); imagepng( $img ); imagedestroy( $img ); // очищаем память
Нанесение на изображение текста с подчеркиванием
Для этих целей стандартных PHP функций нет. Поэтому нужно вывести текст и нарисовать под ним линию. Сложность в том, что необходимо знать координаты нанесения линии и ее длину. Для определения начала линии можно воспользоваться координатами самого текста, только прибавить к значению по оси Y размер самого текста. А для получения длины, можно воспользоваться функцией imagettfbbox(), которая определяет положение текста. Функция возвращает массив с восемью элементами, координаты углов, обрамляющей текст рамки. Используя полученные, координаты, можно высчитать длину текста.
$width = 200; // ширина изображения $height = 100; // высота изображения // создаем изображение, на котором будем рисовать $img = imagecreatetruecolor( $width, $height ); $rgb = 0xFFFFFF; // цвет заливки фона imagefill( $img, 0, 0, $rgb ); // заливаем холст цветом $rgb $fontName = "impact.ttf"; // путь к шрифту $fontSise = 18; // размер шрифта $textColor = 0x000000; // цвет шрифта $paddingLine = 3; // отступ линии от начала текста $x = 50; // отступ слева $y = 50; // отступ справа // текст, который будем наносить на картинку $text = "Любой текст"; // выводим текст imagettftext( $img, $fontSise, 0, $x, $y, $textColor, $fontName, $text ); // определяем размер текста $textbox = imagettfbbox( $fontSise, 0, $fontName, $text ); // вычисляем ширину текста $text_width = $textbox[2] - $textbox[ 0]; // толщина линии imagesetthickness( $img, 3 ); // рисуем линию imageline( $img, $x, $y + $paddingLine, $x + $text_width, $y + $paddingLine, $textColor ); // выводим результат в браузер header("Content-Type: image/png"); imagepng( $img ); imagedestroy( $img ); // очищаем память
меню
Экранирование строк в регулярных выражениях
Если в «регулярку» передается динамичная строка, то её принято экранировать с помощью preg_quote()
. Однако иногда такой экран может не подойти, когда, например, не нужно экранировать символ : допустим в url. В этом случае может пригодится менее известная функция quotemeta()
— она не экранирует символы: { } = ! < > | : —. Смотрите разницу:
preg_quote('. + * ? [ ^ ] $ ( ) { } = ! < > | : -'); // экранирует: . + * ? [ ^ ] ( $ ) { } = ! < > | : - // получим: . + * ? [ ^ ] $ ( ) { } = ! < > | : - quotemeta('. + * ? [ ^ ] $ ( ) { } = ! < > | : -'); // экранирует: . + * ? [ ^ ] ( $ ) // получим: . + * ? [ ^ ] $ ( ) { } = ! < > | : -
Обратите внимание, что символ / не является служебным и не экранируется нигде.
В preg_quote()
можно указать второй параметр, тогда указанный там символ тоже будет экранироваться:
$str = '(40км/ч)'; preg_quote( $str ); //> (40км/ч) preg_quote( $str, '/' ); //> (40км/ч)
меню
Как разбить предложение на слова в PHP
Чтобы разбить строку на отдельные слова, можно использовать PHP функцией – strtok( $str, $token )
. Она принимает два параметра: строку и символы, по которым строка будет разбиваться на части.
strtok()
разбивает строку $str
на подстроки (токены), используя в качестве разделителей символы из $token
.
Например, строку «Это примерная строка» можно разбить на отдельные слова используя пробел в качестве разделителя.
$string = "Бог наградил в нем слог и ум покорный, Стал Моисей известный господин..."; // В качестве разделителей используем пробел, табуляцию и перевод строки $tok = strtok( $string, " nt"); while ( $tok !== false ) { echo "word = $tokn"; $tok = strtok(" nt"); } /* Word = Бог Word = наградил Word = в Word = нем Word = слог Word = и Word = ум Word = покорный, Word = Стал Word = Моисей Word = известный Word = господин... */
Заметьте, что исходная строка передается только при первом вызове strtok()
. Последующим вызовам передаются только разделители, так как эта функция сохраняет исходную строку и запоминает позицию в этой строке между вызовами. Для работы с новой строкой нужно снова вызвать функцию с двумя аргументами.
Обратите внимание, что в параметре token можно использовать несколько разделителей. Строка будет делиться по любому найденному символу, присутствующему в этом параметре.
меню
Как вывести слова с разной формой окончания в PHP
Часто возникает необходимость вывода числа с текстовой подписью. Например, вывод количества дней: 1 день, 2 дня, 5 дней. Форма слова меняется в зависимости от числа.
Чтобы не писать условия для каждого случая, создадим универсальное условие.
## Функция склонение после числительных function num_form( $number, $forma1, $forma2, $forma3 ){ if( $number == "0" ) $forma = $forma3; elseif( ($number >= 5) && ($number <= 20) ) $forma = $forma3; elseif( preg_match('/[056789]$/', $number) ) $forma = $forma3; elseif( preg_match('/[1]$/', $number) ) $forma = $forma1; elseif( preg_match('/[234]$/', $number) ) $forma = $forma2; return "$number $forma"; } $array = array(1, 2, 5); foreach($array as $num){ echo num_form($num, "день", "дня", "дней") . "<br>"; } /* 1 день 2 дня 5 дней */
Еще одна функция для такого склонения слова после чисел — альтернативный вариант.
И еще один вариант предложен в комментариях, когда нужен текст вида опубликован 21 комментарий. Т.е. в данном случае склоняется слово и перед числом, и после числа.
меню
Как получить список файлов внутри папки (включая подпапки) на PHP
Готовая PHP-функция, которая получает список всех файлов, находящихся в заданной папке. Также по умолчанию включаются файлы находящиеся во вложенных папках: параметр $recursive = true
.
Результатом работы функции является массив со списком всех файлов (и папок если $include_folders = true
).
/** * Получает пути всех файлов и папок в указанной папке.
* @param string $dir Путь до папки (на конце со слэшем или без). * @param bool $recursive Включить вложенные папки или нет? * @param bool $include_folders Включить ли в список пути на папки? * * @return array Вернет массив путей до файлов/папок. */ function get_dir_files( $dir, $recursive = true, $include_folders = false ){ if( ! is_dir($dir) ) return array(); $files = array(); $dir = rtrim( $dir, '/\' ); // удалим слэш на конце foreach( glob( "$dir/{,.}[!.,!..]*", GLOB_BRACE ) as $file ){ if( is_dir( $file ) ){ if( $include_folders ) $files[] = $file; if( $recursive ) $files = array_merge( $files, call_user_func( __FUNCTION__, $file, $recursive, $include_folders ) ); } else $files[] = $file; } return $files; }
Использование:
$files = get_dir_files('/home/site.ru/wp-includes/'); /* Array ( [0] => /home/site.ru/wp-includes/ms-settings.php [1] => /home/site.ru/wp-includes/embed.php [2] => /home/site.ru/wp-includes/rest-api.php [3] => /home/site.ru/wp-includes/registration.php [4] => /home/site.ru/wp-includes/cron.php ... */
Старый вариант
/** * Получает пути всех файлов в указанной папке, включая все вложенные уровни. * * @param $dir Путь до папки со слэшем на конце или без. * @return Вернет массив путей до файлов. */ function get_dir_files( $dir ){ $filenames = array(); $dir = rtrim( $dir, '/' ); // удалим слэш на конце if( is_dir($dir) ){ if( $handle = opendir($dir) ){ chdir( $dir ); while( false !== ($file = readdir($handle)) ){ if( $file != "." && $file != '..' ){ if( is_dir($file) ){ $arr = get_dir_files( $file ); foreach( $arr as $value ) $filenames[] = $dir .'/'. $value; } else { $filenames[] = $dir .'/'. $file; } } } chdir('../'); } closedir( $handle ); } return $filenames; } $files = get_dir_files('/home/site.ru/wp-includes/'); /* Array ( [0] => /home/site.ru/wp-includes/ms-settings.php [1] => /home/site.ru/wp-includes/embed.php [2] => /home/site.ru/wp-includes/rest-api.php [3] => /home/site.ru/wp-includes/registration.php [4] => /home/site.ru/wp-includes/cron.php ... */
меню
Удаление папки (директории)
Этот код полностью удаляет указанную папку, т.е. удаляется папка и все вложенные в нее папки и файлы, включая скрытые файлы (.extension). Для этого добавьте следующую PHP функцию и используйте её где нужно.
/** * Удаляет текущую директорию и все файлы и папки в ней, включая скрытые файлы (.extension)... * @param string $folder_path Путь до папки которую нужно удалить */ function delete_folder( $folder_path, $delete_self = true ){ $folder_path = untrailingslashit( $folder_path ); $glod = glob( "$folder_path/{,.}[!.,!..]*", GLOB_BRACE ); foreach( $glod as $file ){ if( is_dir($file) ) call_user_func( __FUNCTION__, $file ); else unlink( $file ); } if( $delete_self ) rmdir( $folder_path ); }
меню
Поиск файла в папке и подпапках на PHP
Хорошим примером использования рекурсии, может послужить поиск файла в папке и всем вложенным подпапкам.
Для поиска файла, достаточно перебрать все файлы во всех папках и сравнить название файла с искомым. И в случае совпадения добавить путь до файла в массив найденных фалов.
$folderName = ABSPATH; // в какой папке ищем $fileName = "xml"; // что ищем $found = search_file( $folderName, $fileName ); print_r( $found ); /* Вернет: Array ( [0] => /home/site.ru/xmlrpc.php [1] => /home/site.ru/wp-includes/class-wp-xmlrpc-server.php [2] => /home/site.ru/wp-includes/wlwmanifest.xml ) */ /** * Поиск файла по имени во всех папках и подпапках * @param string $folderName - пусть до папки * @param string $fileName - искомый файл * @return array Массив найденных файлов. */ function search_file( $folderName, $fileName ){ $found = array(); $folderName = rtrim( $folderName, '/' ); $dir = opendir( $folderName ); // открываем текущую папку // перебираем папку, пока есть файлы while( ($file = readdir($dir)) !== false ){ $file_path = "$folderName/$file"; if( $file == '.' || $file == '..' ) continue; // это файл проверяем имя if( is_file($file_path) ){ // если имя файла искомое, то вернем путь до него if( false !== strpos($file, $fileName) ) $found[] = $file_path; } // это папка, то рекурсивно вызываем search_file elseif( is_dir($file_path) ){ $res = search_file( $file_path, $fileName ); $found = array_merge( $found, $res ); } } closedir($dir); // закрываем папку return $found; }
меню
Массовая замена текста в файлах с помощью PHP или поиск в них
Этот пример может быть полезен, при работе с большим количеством файлов.
Пример ниже покажет, как можно перебрать все файлы в заданной папке, а также во всех вложенных папках и заменить в них строку на строку.
Вместо замены, этот код можно взять за основу, когда нужно создать поиск по файлам в папке и подпапках.
$oldText = 'old text'; // что меняем $newText = 'new text'; // на что меняем $folderName = "./files"; // в какой папке меняем // запускаем функцию replace_txt( $folderName, $oldText, $newText ); /** * Функция замены текста во всех файлах папки * @param string $folderName - пусть до папки * @param string $oldText - искомый текст * @param string $newText - на что меняем текст */ function replace_txt( $folderName, $oldText, $newText ){ $dir = opendir( $folderName ); // открываем текущую папку // перебираем папку, пока есть файлы while( false !== ($file = readdir($dir)) ){ // если это не папка if( $file != '.' && $file != '..' ){ $file_path = "$folderName/$file"; // это файл if( is_file($file_path) ){ $file_content = file_get_contents( $file_path ); // получаем конетнт файла // для работы с файлами в кодировке windows-1251 //$file_content = iconv( "windows-1251", "utf-8", $file_content ); // делаем замену в тексте $file_content = str_replace( $oldText, $newText, $file_content ); // сохраняем изменения file_put_contents( $file_path, $file_content ); } // это папка, рекурсивно вызываем replace_txt() elseif( is_dir($file_path) ){ replace_txt( $file_path, $oldText, $newText ); } } } closedir( $dir ); // закрываем папку }
меню
Работа с zip архивами в PHP: запаковка и распаковка файлов
Когда необходимо программно запаковать файлы в zip
архив, используйте модуль — ZipArchive
, который установлен практически на всех серверах вместе с PHP.
Для работы с модулем, используется одноименный класс – ZipArchive
.
Запаковка файлов в zip
Пример показывает как запаковать все папки, подпапки и файлы в них с помощью ZipArchive
.
/** * Create zip archive from specified folder. * * @param $source * @param $destination * @param bool $include_sourse * * @return string * * @ver 0.1 (kama) */ function zip_folder( $source, $destination, $include_sourse = true ){ $source = str_replace( '\', '/', rtrim( realpath( $source ), '/' ) ); if( ! file_exists( $source ) ) return 'Error: file not exists'; $zip = new ZipArchive(); if( ! $zip->open( $destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ) ) return 'Error: ZipArchive not installed'; if( $include_sourse ) $zip->addEmptyDir( basename($source) ); if( is_file( $source ) ){ $zip->addFile( $source ); } elseif( is_dir( $source ) ){ foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST ) as $file_path => $file_obj ){ // Ignore . | .. folders if( preg_match('~/[.]{1,2}$~', $file_path) ) continue; $file_rel_path = str_replace( "$source/", '', $file_path ); if( $include_sourse ) $file_rel_path = basename($source) .'/'. $file_rel_path; if( is_dir( $file_path ) ){ $zip->addEmptyDir( $file_rel_path ); } elseif( is_file( $file_path ) ){ $zip->addFile( $file_path, $file_rel_path ); } } } $zip->close(); return 'Done'; }
Использвоание:
$source = __DIR__ . '/wp-content'; $destination = __DIR__ . '/_'. basename($source) .'-'. date( 'd-m-Y' ) . '.zip'; echo zip_folder( $source, $destination );
Распаковка файлов из zip
Теперь, пример распаковки zip архива с помощью ZipArchive
.
function unzip_file( $file_path, $dest ){ $zip = new ZipArchive; if( ! is_dir($dest) ) return 'Нет папки, куда распаковывать...'; // открываем архив if( true === $zip->open($file_path) ) { $zip->extractTo( $dest ); $zip->close(); return true; } else return 'Произошла ошибка при распаковке архива'; } // использование $zipfile = 'test.zip'; // путь до файла архива $pathdir = 'test/'; // путь к папке, в которую будет распакован архив $done = unzip_file( $zipfile, $pathdir ); if( is_string($done) ){ echo 'Ошибка: '. $done; }
меню
Как перевести цвет из HEX в RGB и наоборот в PHP
Перевод цвета из HEX в RGB
## перевод цвета из HEX в RGB function hex_to_rgb( $color ){ // проверяем наличие # в начале, если есть, то отрезаем ее if ( $color[0] == '#' ) { $color = substr( $color, 1 ); } // разбираем строку на массив if ( strlen($color) == 6 ) { // если hex цвет в полной форме - 6 символов list( $red, $green, $blue ) = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5], ); } elseif ( strlen($cvet) == 3 ) { // если hex цвет в сокращенной форме - 3 символа list( $red, $green, $blue ) = array( $color[0]. $color[0], $color[1]. $color[1], $color[2]. $color[2], ); } else { return false; } // переводим шестнадцатеричные числа в десятичные $red = hexdec( $red ); $green = hexdec( $green ); $blue = hexdec( $blue ); return array( 'red' => $red, 'green' => $green, 'blue' => $blue, ); } // пример использования $colorHex = '#FFAA00' ; $result = hex_to_rgb( $colorHex ); print_r( $result ); /* Array ( [red] => 255 [green] => 170 [blue] => 0 ) */
wp-kama.ru
Что такое PHP?
Если вы только начинаете знакомиться с PHP, то вам нужно знать определения. Итак, что же такое PHP?
PHP – это широко используемый язык сценариев общего назначения с открытым исходным кодом.
Говоря проще, PHP это язык программирования, специально разработанный для написания web-приложений (сценариев) , исполняющихся на Web-сервере.
Аббревиатура PHP означает “Hypertext Preprocessor (Препроцессор Гипертекста) «. Синтаксис языка берет начало из C, Java и Perl. PHP достаточно прост для изучения. Преимуществом PHP является предоставление web-разработчикам возможности быстрого создания динамически генерируемых web-страниц. Подробнее о преимуществах PHP можно узнать здесь.
Важным преимуществом языка PHP перед такими языками, как языков Perl и C заключается в возможности создания HTML документов с внедренными командами PHP. Подробнее об этой возможность смотрите здесь.
Значительным отличием PHP от какого-либо кода, выполняющегося на стороне клиента, например, JavaScript, является то, что PHP-скрипты выполняются на стороне сервера. Вы даже можете сконфигурировать свой сервер таким образом, чтобы HTML-файлы обрабатывались процессором PHP, так что клиенты даже не смогут узнать, получают ли они обычный HTML-файл или результат выполнения скрипта.
PHP позволяет создавать качественные Web-приложения за очень короткие сроки, получая продукты, легко модифицируемые и поддерживаемые в будущем.
PHP прост для освоения, и вместе с тем способен удовлетворить запросы профессиональных программистов.
Даже если Вы впервые услышали о PHP, изучить этот язык не составит для Вас большого труда. Мы не сомневаемся, что изучив основы PHP в течение нескольких часов, вы уже сможете создавать простые PHP-скрипты.
Язык PHP постоянно совершенствуется, и ему наверняка обеспечено долгое доминирование в области языков web -программирования, по крайней мере, в ближайшее время.
Хотите более подробно? Источник здесь —
http://www.php.su/php/?php
Удачи!
otvet.mail.ru
Basic Syntax and Statements
PHP syntax will be very familiar to anyone with an understanding of JavaScript, C, C++, C#, Objective-C, Java, Perl, or any other C-derived language. But if these languages are unfamiliar to you, or if you’re new to programming in general, there’s no need to worry about it.
A PHP script consists of a series of commands, or statements. Each statement is an instruction that must be followed by the web server before it can proceed to the next instruction. PHP statements, like those in the aforementioned languages, are always terminated by a semicolon (;
).
This is a typical PHP statement:
echo 'This is a <strong>test</strong>!';
This is an echo
statement, which is used to generate content (usually HTML code) to send to the browser. An echo
statement simply takes the text it’s given and inserts it into the page’s HTML code at the position of the PHP script where it was contained.
In this case, we’ve supplied a string of text to be output: This is a <strong>test</strong>!
. Notice that the string of text contains HTML tags (<strong>
and </strong>
), which is perfectly acceptable.
So, if we take this statement and put it into a complete web page, here’s the resulting code:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Test page</title> </head> <body> <p><?php echo 'This is a <strong>test</strong>!'; ?></p> </body> </html>
If you place this file on your web server and then request it using a web browser, your browser will receive this HTML code:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Test page</title> </head> <body> <p>This is a <strong>test</strong>!</p> </body> </html>
The random.php
example we looked at earlier contained a slightly more complex echo
statement:
echo rand(1, 10);
You’ll notice that, in the first example, PHP is given some text to print directly, and in the second, PHP is given an instruction to follow. PHP tries to read anything that exists outside quotes as an instruction it must follow. Anything inside quotes is treated as a string, which means PHP doesn’t process it at all but just passes it to the command you called. So the following code will pass the string This is a <strong>test</strong>!
directly to the echo
command:
echo 'This is a <strong>test</strong>!';
A string is signified using a start quote and an end quote. PHP will see the first '
as the start of the string and find the next '
and use that as the end of the string.
In contrast, the following code will first run the built-in function rand
to generate a random number and then pass the result to the echo command:
echo rand(1, 10);
You can think of built-in functions as tasks that PHP knows how to do without you needing to spell out the details. PHP has many built-in functions that let you do everything, from sending email to working with information stored in various types of databases.
PHP won’t try to run anything that’s inside a string. The following code won’t have the result you may be expecting:
echo 'rand(1, 10)';
Instead of running the inbuilt function rand
, PHP will see it as a string, and rather than printing out a random number, it will actually send the text rand(1, 10)
to the browser, which probably isn’t what you wanted to do. It’s important to understand the difference between a string and code. PHP will see any text outside quotes as a series of commands it should follow. Anything inside quotes is a string and is data that PHP will work with.
PHP doesn’t try to understand strings. They can contain any characters in any order. But code—which is essentially a series of instructions—must follow a rigid structure for a computer to understand it.
When you invoke a function in PHP—that is, ask it to do its job—you’re said to be calling that function. Most functions return a value when they’re called; PHP then behaves as if you’d actually just typed that returned value in your code instead. In the echo 'rand(1, 10)';
example, our echo
statement contains a call to the rand
function, which returns a random number as a string of text. The echo
statement then outputs the value returned by the function call.
Every function in PHP can have one or more arguments that allow you to make the function behave in a slightly different way. The rand
function takes two arguments: the minimum random number and the maximum. By changing the values that are passed to the function, you’re able to change the way it works. For example, if you wanted a random number between 1 and 50, you could use the code:
echo rand(1, 50);
You may wonder why we need to surround the arguments with parentheses ((1, 50)
). The parentheses serve two purposes. First, they indicate that rand
is a function that you want to call. Second, they mark the beginning and end of a list of arguments—PHP statements that you wish to provide—in order to tell the function what you want it to do. In the case of the rand
function, you need to provide a minimum and a maximum value. Those values are separated by a comma.
Later on, we’ll look at functions that take different kinds of arguments. We’ll also consider functions that take no arguments at all. These functions will still need the parentheses, even though there will be nothing to type between them.
www.sitepoint.com
Строки и числа
Самыми простыми типами данных в PHP являются строки и числа.
Числа обозначают сами себя, например 1, 12, 145, а вот строки требуется брать в кавычки (одинарные или двойные — без разницы):
Числа также могут быть дробями. Разделителем целой и дробной части служит знак «точка». К примеру, число 10.754 — это дробь.
Переменные
Одним из самых главных и распространенных объектов в программировании является переменная.
Переменная — это такой объект, который может хранить внутри себя различные данные, например, строки или числа.
Имя переменной должно состоять из английских букв: больших или маленьких, а также цифр и знака_подчеркивания.
В PHP перед переменной обязательно должен быть написан знак доллара $:
Операция присваивания
Очень важным элементом программирования является операция присваивания.
С помощью присваивания мы можем положить в переменную результат какой-либо операции, например, строку или число, а затем достать эти данные в нужном нам месте и воспользоваться ими.
Пример присваивания:
Комментарии
К коде PHP, так же, как и в HTML и CSS, можно оставлять комментарии, которые будут проигнорированы PHP при выполнении программы.
Их обычно используют для того, чтобы оставлять какие-либо пометки в коде или временно убрать какие-то строки кода, которые вам мешают, а потом иметь возможность быстро их вернуть обратно.
Комментарии могут быть многострочными и однострочными:
Функции
В программировании есть такое понятие, как функции. В отличии от переменных, которые хранят внутри себя некоторые данные, функции выполняют операции над этими данными.
Функция отличается от переменной тем, что перед именем функции не ставится знак доллара (он нужен только для переменных), а также тем, что у нее после названия стоят круглые скобки ( ), внутри которых через запятую можно перечислять параметры.
Параметры — это данные (например, строки или числа), которые мы даем функции, она производит над ними какие-то операции и возвращает нам результат.
Например, в PHP есть стандартная функция sqrt(), которая параметром принимает число, а возвращает квадратный корень этого числа.
То есть, если ей передать число 9, вот так — sqrt(9), то на выходе получим число 3. Полученное число мы можем записать в какую-либо переменную или вывести на экран.
Давайте найдем корень из 25 и запишем в переменную $a:
Функция echo
В PHP существует специальная функция echo, которая позволяет вывести какой-либо текст в окно браузера. В отличие от других функций, после echo не требуются круглые скобки ().
Следующий код выводит на экран заданный текст:
А в следующим коде переменной $text присваивается фраза, а затем содержимое этой переменной выводится на экран:
Математические операции
В PHP между числами и переменными можно совершать различные математические операции: сложение (знак +), вычитание (знак -), умножение (знак *), деление (знак /).
Чтобы понять, как с ними работать, посмотрите на следующий пример:
Можно сначала записать числа в переменные, а потом уже проводить операции с переменными:
А можно также одновременно производить операции и с числами, и с переменными:
Специальные значения
В PHP, как и в других языках программирования, существуют ключевые слова для некоторых специальных значений.
Значения true, false
Значения true и false обозначают истину и ложь соответственно. Они используются для таких вещей, которые предполагают два варианта ответа — да или нет.
К примеру, на вопрос ‘вам уже есть 18 лет?’ в можете ответить да, то есть true, или нет, то есть false.
Эти значения называются логическими.
Значение null
Значение null обозначает ‘ничего’. К примеру, если мы попробуем обратиться к переменной, которой мы еще не задали значение — то ее значение и будет null.
Функция var_dump
Бывают ситуации, когда нам нужно посмотреть содержимое переменной, чтобы понять, почему наш код работает не так, как мы хотели. Обычно на помощь приходит функция echo, однако, бывают ситуации, когда echo не работает.
Например, если переменная является пустой строкой », то выведя ее содержимое на экран с помощью echo, мы ничего не увидим.
Вторая ситуация — когда переменная содержит строку с пробелами по краям, например:
Для решения описанных выше проблем следует использовать функцию var_dump(), которая предназначена для отладки кода и позволяет выводить значения переменных и их тип.
С помощью этой функции мы можем увидеть, что переменная пуста, можем подсчитать количество пробелов по краям строки, можем увидеть, что переменная логическая и имеет значение true или false (об этих значениях чуть позже).
Пример использования var_dump():
PHP внутри HTML
PHP код можно вставлять внутрь HTML кода:
Сложение строк в PHP
В PHP, в отличие от многих других языков, строки складываются с помощью знака «точка»:
Получение определенного символа строки
В PHP можно получить доступ к определенному символу строки по его номеру таким образом: $a[n] – n-ный символ строки (учтите, что нумерация идет с нуля):
Сложности с операцией присваивания
Очень часто новички не понимают, что присваивание отличается от обычного равенства. Посмотрите следующий пример:
С точки зрения математики запись $a = $a + 2 абсурдна, но не с точки зрения программирования.
В данном случае переменная $a имела значение 1, а затем мы переменной $a присвоили новое значение — старое значение переменной $a плюс 2.
Операции инкремента и декремента
Операция $a++ или ++$a – увеличивает переменную $a на единицу. Эта операция называется инкремент.
Операция $a— или —$a – уменьшает переменную $a на единицу. Эта операция называется декремент.
Примеры:
Давайте посмотрим, в каких случаях проявляется разница между ++a и a++.
Пусть у нас есть код echo ++a и код echo a++.
В первом случае переменная сначала увеличится на единицу, а потом выведется, а во втором случае — сначала выведется, а потом увеличится.
Операции +=, -=, *=, /=
Мы уже рассматривали код, который демонстрирует сложности с операцией присваивания:
В данном случае мы присваиваем переменной $a ее текущее значение, увеличенное на 2. Однако PHP позволяет записать этот код еще короче с помощью оператора +=:
Кроме того, существуют операторы -=, *=, /=, которые эквивалентны следующему коду:
Операция .=
Существует также операция .=:
Типизация переменных
Что будет, если попробовать сложить, к примеру, число и строку, вот так: 3+’3′? В результате вы получите число 6. Это значит, что PHP автоматически осуществляет преобразование типов при необходимости, вам не нужно за это переживать.
То же самое случится, если, к примеру, сделать так: 3+true или 3+false. Попробуйте эти примеры сами и узнайте к чему преобразуется true в этом случае, а чему — false.
code.mu
Простейшие примеры скриптов на PHP | ![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||
Указанная секция PHP может использоваться в любом месте файла, неограниченное количество раз, вперемежку с обычным текстом html. Чтобы PHP-код начал интерпретироваться, html-страничку (расширение .htm или html) нужно переименовать в .php. 1. Простой вывод текста Текст можно вводить как в одинарных кавычках, так и в двойных. В функции аргументы можно передавать без скобок. Кроме echo можно использовать ключевое слово print. Отличие echo от print в том, что echo может выводить несколько строк, указанных через запятую: Обе эти строки выведут один и тот же результат. Одинарные кавычки отличаются от двойных тем, что одинарные отключают сканирование строки на наличие в ней переменных, например, в следующем примере только первый оператор echo выведет значение переменной: Одинарные кавычки также отключают действие Esc-кодов (см. ниже). Одинарные кавычки увеличивают производительность кода, поэтому их использование предпочтительнее. Другой способ определения строк – это использование heredoc-синтаксиса. В этом случае строка должна начинаться с символа <<< , после которого идет идентификатор. Заканчивается строка этим же идентификатором. Закрывающий идентификатор должен начинаться в первом столбце строки. Кроме того, идентификатор должен соответствовать тем же правилам именования, что и все остальные метки в PHP: содержать только буквенно-цифровые символы и знак подчеркивания и начинаться не с цифры или знака подчеркивания. Heredoc-текст ведет себя так же, как и строка в двойных кавычках, при этом их не имея. Это означает, что вам нет необходимости экранировать кавычки в heredoc, но вы по-прежнему можете использовать перечисленные выше управляющие последовательности. Переменные внутри heredoc тоже обрабатываются. 2. Простейший пример использования переменной Здесь показано использование переменной. Имена переменных (как и функций) чувствительны к регистру. Переменные начинаются с символа $ (первый символ), второй символ должен обязательно буква. Переменные видны во всем файле, даже если она объявлена и присвоена в одной секции < ?php, а используется в другой секции < ?php. Переменные бывают трех типов — числовой, строковый и логический. Тип определяется неявно в момент присвоения переменной значения. Переменная появляется в момент её назначения. Для проверки факта существования переменной имеется функция IsSet, например (выполните этот код 2 раза, во второй раз раскомментируйте присвоение переменной $index): Если переменная не была задана (присвоена), но её значение используется, то переменная автоматически получает значение по умолчанию. Например, если функция, применяемая над переменной, математическая, то переменной присвоится число 0. Переменные, объявленные вне функций, являются глобальными, т. е. видны во всем файле. Переменные, объявленные в теле функции, видны только в этой функции. Операторы PHP, в отличие от функций, констант и переменных, нечувствительны к регистру. 3. Неявное преобразование типа переменной (в данном примере преобразование строки в число): Будет выведен результат 20. Это означает, что интерпретатор преобразовал строку ’10’ в число. При выводе произошло также преобразование — число 20 было преобразовано в строку ’20’. Автоматические преобразования типов упрощают код, но затрудняют поиск логических ошибок при отладке. 4. Определение констант, использование комментариев. В этом примере задана константа и показано использование комментариев. Имя константы тоже чувствительно к регистру. Существующие предопределенные логические константы TRUE и FALSE нечувствительны к регистру. Константы удобно использовать в отдельном файле и подключать его оператором require_once, например, в таком файле могут храниться строковые константы пунктов меню. При случае легко поменять язык сайта, просто включив другой файл с константами. 5. Другие способы задания комментариев: 6. Использование перевода строки и параграфа при выводе Тут показано использование перевода строки < br > при выводе. Если использовать < P >, то это будет означать конец параграфа, и интервал до новой строки будет увеличен по сравнению с < br >. 7. Использование Ecs-кодов r 8. Пример функции Имена функций чувствительны к регистру. Возврат значения переменной из функции возможно с помощью ключевого слова return $имя_переменной. Вместо тега < ?php можно использовать тег < ?, но лучше этого не делать. По умолчанию параметры в функцию передаются по значению, то есть переданную в функцию переменную можно свободно изменять внутри функции, и на выходе значение переменной, которая передавалась, останется прежним. Чтобы передать переменную не по значению, а по ссылке, в вызове функции к переменной нужно добавить амперсанд &, например: 9. Пример условного оператора, получение переменной окружения. Здесь показан пример условного оператора — проверка на адрес клиента, который зашел на сайт. Если его адрес не равен 192.168.0.14, то будет выведен файл ‘postinfo.html’ (тут еще и продемонстрировано действие оператора include). Бывают следующие операторы сравнения:
Кроме того, есть очень удобный оператор elseif: Тут также продемонстрировано действие оператора include. Бывают еще функции включения include_once, require, require_once. Функции включения с окончанием _once гарантируют, что включение файла будет произведено только один раз, что спасает от логических ошибок в программе — если будет произведена попытка повторного включения, то сгенерируется фатальная ошибка. Функции include и include_once отличаются от require и require_once тем, что первая пара генерирует только предупреждение об ошибке о продолжает выполнение сценария. Вторая пара генерирует фатальную ошибку (дальнейшее выполнение сценария прекращается). Таким образом, include лучше использовать для включения файлов с содержимым (документов), а require для файлов программы PHP. Функции подключения удобны при делении страниц сайта на секции — заголовок, тело документа, подвал. В этом случае заголовок и подвал неизменны и вставляются всегда из одних и тех же файлов — дизайн теперь менять намного проще. 10. Получение других переменных окружения Здесь показан вывод переменных окружения сервера. В одной строке можно использовать несколько операторов, отделенных табуляцией, пробелами и точкой с запятой. Более правильно, конечно, было бы использовать цикл foreach, поскольку перечень переменных для каждого сервера может отличаться (см. пункт 18 Массивы). 11. Логгер пользователей, которые заходят на сайт Файл лога будет называться YYMMDD.txt и писаться в папку logs, которая находится в корневом каталоге сайта (там же, где файл index.html). Что нового: — строки складываются друг с другом не оператором ‘+’, а оператором ‘.’ (кто бы мог подумать). Возможны другие варианты открытия файла: ‘r’ — Открыть только для чтения, помещает указатель на начало файла. Может также использоваться символ ‘b’ в системах, различающих бинарные и текстовые файлы (не используется в Unix). Если данное значение не имеет смысла, оно игнорируется. 12. Как запустить PHP-скрипт? Опишу один из способов. — в тело html-странички (например, page.html), в любом месте раздела < BODY >< /BODY > нужно встроить код PHP: — файл странички переименовываем из page.html в page.php. В NetObjects Fusion 7.5, в частности, это делается через свойства страницы (GoStructure View, щелкаем на желто-черную иконку странички, в окошке Properties выбираем закладку Page, жмем кнопку Custom Names…, в выпадающем списке File extension: меняем расширение файла на .php, просто вбивая вручную, жмем Ok). 13. Как узнать версию PHP, которая установлена на сайте? Функция phpinfo() выводит красивую и подробную информацию об установленном PHP. 14. Функция Error_Reporting() меняет параметры вывода сообщений об ошибке. Если перед функцией поставить символ @, например @print(), то в случае ошибки в этой функции сообщение об ошибке не выведется. 15. Блок кода задается так же, как в C, с помощью {}. 16. Цикл for задается так же, как в C: Отличие в том, что инициализировать можно несколько переменных: Кроме того, можно делать несколько проверок, но это не имеет смысла, поскольку срабатывает только последняя: Например, так получим бесконечный цикл: А так цикл ни разу не выполнится: Кроме того, можно делать несколько изменений переменных, опять же через запятую. 17. exit() прекращает работу сценария — дальнейший HTML-код не загрузится и не отобразится. Оператор die(«сообщение») делает то же самое, но выводит сообщение. 18. Функция для поиска и замены с помощью регулярного выражения pattern регулярное выражение для поиска, чего будем менять 19. Массивы Присвоение элементам значений: Или так: Можно и так: В этом случае последний элемент массива получит индекс 21. Можно создавать массивы с помощью функции array: С помощью функции array можно создавать массивы с символьными индексами: Цикл foreach позволяет вывести все элементы массива: А так с помощью foreach можно получать значение индекса: Функция count позволяет получить количество элементов массива: Пример, который выводит все переменные окружения сервера: Этот код не такой громоздкий, как был приведен ранее (п. 10), и выводит весь список существующих переменных. Коды & nbsp ; выводят пробелы, которые не обрезаются до одного. Другие предопределенные массивы:
20. Строки Функции для работы со строками и символами: mixed str_replace (mixed search, mixed replace, mixed subject[, int &count]) возвращает строку, в subject, в которой все search заменены на replace. В переменной count подсчитывается количество замен. int ord (string string) возвращает ASCII-код первого символа в строке. string chr (int ascii) возвращает строку из одного символа, код которого задан аргументом ascii. 21. Удобные функции для работы с массивами array split (string pattern, string string [, int limit]) позволяет получить массив из строки string, помещая её по частям, границы которых выделяются разделителем pattern. При этом pattern может состоять как из одного символа, так и из нескольких, а также из регулярного выражения (подробнее см. help). В результирующие элементы получаемого массива pattern не попадает. Функцию удобно использовать для разделения текста на отдельные строки, для разбиения html-кода на блоки с помощью тегов, для обработки CSV-таблиц и т. д. Если указан необязательный элемент limit, то массив будет состоять из не более чем limit элементов. В случае ошибки функция возвращает FALSE. Пример (открывается простой текстовый файл, каждая строка которого состоит из ссылки, и этими ссылками по разделителю rn заполняется массив $good_links): bool in_array (mixed needle, array haystack [, bool strict]) ищет в массиве haystack значение needle и возвращает TRUE в случае удачи, FALSE в противном случае. Чрезвычайно удобная функция, одной строкой заменяющая цикл поиска по элементам массива. Если третий параметр strict установлен в TRUE, тогда функция in_array() также проверит соответствие types параметра needle и соответствующего значения массива haystack. Если needle — строка, сравнение будет регистрозависимым. Пример: |
microsin.net