WEB start

Компьютеры. Интернет. Профессиональное обучение. 055-966-10-17

hit 
counter

Обучение

Широкий спектр программ и различных форм обучения

Возможность заочного, дистанционного обучения 055-966-10-17
  • Программирование. Современные языки и технологии.
  • Обслуживание персональных компьютеров.
  • Компьютерные сети. Защита информации.
  • Интернет. Планирование, создание WEB-сайтов. Дизайн, программирование. CEO, продвижение сайтов в интернет.
  • Основы современных IT - технологий.

Наши преимущества

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


Регистрация на сайте

Программирование

  • DOM - обработка событий (Events)

    DOM - обработка событий (Events)

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

    События могут генерироваться как пользователем (например: перемещение мышки) так и системой (например: законцилась анимация )

    События могут быть разных типов, например:

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

    Реакция на события описывается через бработчики событий (events listeners или event handlers).

    Браузер постоянно отслеживает все события, при его возникновении (event firing) он ищет назначенную этому событию фукцию-обработчик события и запускает её (если она найдена).

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

    Типы событий

    События, связанные с мышью (mouse events)

    Событие Описание DOM
    onclick Клик левой кнопкой мыши 2
    oncontextmenu Клик правой кнопкой мышки 3
    ondblclick Два клика подряд левой кнопкой 2
    onmousedown Нажатие левой кнопки мышки 2
    onmouseenter Курсор попал на элемент 2
    onmouseleave Курсор ушёл с элемента 2
    onmousemove Курсор переместился, находясь над элементом 2
    onmouseover Курсор находится над элементом или его дочерними элементами 2
    onmouseout Курсор ушёл с области самого элемента или одного из его дочерних элементов 2
    onmouseup Отпускание левой кнопки мышки 2

    События клавиатуры (keyboard events)

    Событие Описание DOM
    onkeydown Нажатие кнопки клавиатурв 2
    onkeypress Нажатие и отпускание кнопки клавиатуры 2
    onkeyup Отпускание кнопки клавиатуры 2

    События объекта frame (frame/window events)

    Собвтие Описание DOM
    onabort Загрузка документа в фрейм прервана 2
    onbeforeunload Начало загрузки документа в фрейм 2
    onerror Ошибка загрузки файла в фрейм 2
    onhashchange Изменился параметр anchor фрейма 3
    onload Загрузка документа в фрейм 2
    onpageshow Событие происходит, когда пользователь переходит на веб-страницу 3
    onpagehide Событие происходит, когда пользователь уходит с веб-страницы 3
    onresize Событие возникает, когда размер окна документа изменяется 2
    onscroll Событие происходит при прокрутке элемента 2
    onunload Событие происходит после выгрузки страницы (для <body>) 2

    События, связанные с формой (form events)

    Событие Описание DOM
    onblur Событие происходит, когда элемент теряет фокус 2
    onchange Событие происходит, когда изменилось содержимое элемента формы (для <input>, <keygen>, <select> и <textarea>) 2
    onfocus Событие возникает, когда элемент получает фокус 2
    onfocusin Событие возникает, когда элемент собирается получить фокус 2
    onfocusout Событие происходит, когда элемент теряет фокус 2
    oninput Событие возникает, когда элемент получает пользовательский ввод 3
    oninvalid Событие oninvalid происходит, когда элемент <input> недопустим. 3
    onreset Событие происходит, когда форма сбрасывается 2
    onsearch Событие возникает, когда пользователь что-то пишет в поле поиска (для <input = "search">) 3
    onselect Событие происходит после выбора пользователем текста (для <input> и <textarea>) 2
    onsubmit Событие происходит при отправке формы 2

    События drag/drop

    Событие Описание DOM
    ondrag Событие возникает, когда элемент перетаскивается 3
    ondragend Событие происходит, когда пользователь закончил перетаскивание элемента 3
    ondragenter Событие возникает, когда элемент перетаскивания входит в целевую точку  3
    ondragleave Событие происходит, когда элемент перетаскивания оставляет целевую точку 3
    ondragover Событие происходит, когда элемент перетаскивания находится над целевой точкой перетаскивания 3
    ondragstart Событие возникает, когда пользователь начинает перетаскивать элемент 3
    ondrop Событие происходит, когда перетаскиваемый элемент выбрасывается в целевой точке 3

    Clipboard - события

    Событие Описание DOM
    oncopy Событие происходит, когда пользователь копирует содержимое элемента
    oncut Событие происходит, когда пользователь вырезает содержимое элемента
    onpaste Событие возникает, когда пользователь вставляет некоторый контент в элемент

    Print - события

    Событие Описание DOM
    onafterprint Событие происходит, когда страница начала печать, или если диалоговое окно печати закрывается 3
    onbeforeprint Событие происходит, когда страница будет напечатана 3

    Media - события

    Событие Описание DOM
    onabort The event occurs when the loading of a media is aborted 3
    oncanplay The event occurs when the browser can start playing the media (when it has buffered enough to begin) 3
    oncanplaythrough The event occurs when the browser can play through the media without stopping for buffering 3
    ondurationchange The event occurs when the duration of the media is changed 3
    onemptied The event occurs when something bad happens and the media file is suddenly unavailable (like unexpectedly disconnects) 3
    onended The event occurs when the media has reach the end (useful for messages like "thanks for listening") 3
    onerror The event occurs when an error occurred during the loading of a media file 3
    onloadeddata The event occurs when media data is loaded 3
    onloadedmetadata The event occurs when meta data (like dimensions and duration) are loaded 3
    onloadstart The event occurs when the browser starts looking for the specified media 3
    onpause The event occurs when the media is paused either by the user or programmatically 3
    onplay The event occurs when the media has been started or is no longer paused 3
    onplaying The event occurs when the media is playing after having been paused or stopped for buffering 3
    onprogress The event occurs when the browser is in the process of getting the media data (downloading the media) 3
    onratechange The event occurs when the playing speed of the media is changed 3
    onseeked The event occurs when the user is finished moving/skipping to a new position in the media 3
    onseeking The event occurs when the user starts moving/skipping to a new position in the media 3
    onstalled The event occurs when the browser is trying to get media data, but data is not available 3
    onsuspend The event occurs when the browser is intentionally not getting media data 3
    ontimeupdate The event occurs when the playing position has changed (like when the user fast forwards to a different point in the media) 3
    onvolumechange The event occurs when the volume of the media has changed (includes setting the volume to "mute") 3
    onwaiting The event occurs when the media has paused but is expected to resume (like when the media pauses to buffer more data) 3

    Animation - события

    Событие Описание DOM
    animationend The event occurs when a CSS animation has completed 3
    animationiteration The event occurs when a CSS animation is repeated 3
    animationstart The event occurs when a CSS animation has started 3

    Transition - события

    Событие Описание DOM
    transitionend The event occurs when a CSS transition has completed 3

    Server-Sent - события

    Событие Описание DOM
    onerror The event occurs when an error occurs with the event source
    onmessage The event occurs when a message is received through the event source
    onopen The event occurs when a connection with the event source is opened

    Другие события

    Событие Описание DOM
    onmessage The event occurs when a message is received through or from an object (WebSocket, Web Worker, Event Source or a child frame or a parent window) 3
    onmousewheel Deprecated. Use the onwheel event instead
    ononline The event occurs when the browser starts to work online 3
    onoffline The event occurs when the browser starts to work offline 3
    onpopstate The event occurs when the window's history changes 3
    onshow The event occurs when a <menu> element is shown as a context menu 3
    onstorage The event occurs when a Web Storage area is updated 3
    ontoggle The event occurs when the user opens or closes the <details> element 3
    onwheel The event occurs when the mouse wheel rolls up or down over an element 3

    Touch - события

    Событие Описание DOM
    ontouchcancel The event occurs when the touch is interrupted
    ontouchend The event occurs when a finger is removed from a touch screen
    ontouchmove The event occurs when a finger is dragged across the screen
    ontouchstart The event occurs when a finger is placed on a touch screen

    Объект event

    Когда происходит событие, браузер создает объект 'event', помещает в него детали события и передает его в качестве аргумента обработчику.

    пример ниже выводит на консоль все свойства текущего объека event, созданного баузеом при клике мышкой по элементу ELEMENT .

    function myFunc2(evnt){ console.log('Event: ', evnt); }

    ELEMENT.addEventListener('click', myFunc2);


    Константы

    Константа Описание DOM
    CAPTURING_PHASE The current event phase is the capture phase (1) 1
    AT_TARGET The current event is in the target phase, i.e. it is being evaluated at the event target (2) 2
    BUBBLING_PHASE The current event phase is the bubbling phase (3) 3

    Свойства

    Свойство Описание DOM
    bubbles Returns whether or not a specific event is a bubbling event 2
    cancelable Returns whether or not an event can have its default action prevented 2
    currentTarget Returns the element whose event listeners triggered the event 2
    defaultPrevented Returns whether or not the preventDefault() method was called for the event 3
    eventPhase Returns which phase of the event flow is currently being evaluated 2
    isTrusted Returns whether or not an event is trusted 3
    target Returns the element that triggered the event 2
    timeStamp Returns the time (in milliseconds relative to the epoch) at which the event was created 2
    type Returns the name of the event 2
    view Returns a reference to the Window object where the event occured 2

    Методы

    Метод Описание DOM
    preventDefault() Cancels the event if it is cancelable, meaning that the default action that belongs to the event will not occur 2
    stopImmediatePropagation() Prevents other listeners of the same event from being called 3
    stopPropagation() Prevents further propagation of an event during event flow 2

    Объект - MouseEvent

    Свойство Описание DOM
    altKey Возвращает, была ли нажата клавиша «ALT» при запуске события мыши 2
    button Возвращает, какая кнопка мыши была нажата при запуске события мыши 2
    buttons Возвращает, какие кнопки мыши были нажаты при запуске события мыши 3
    clientX Возвращает горизонтальную координату указателя мыши относительно текущего окна, когда событие мыши было запущено 2
    clientY Возвращает вертикальную координату указателя мыши относительно текущего окна, когда событие мыши было запущено 2
    ctrlKey Возвращает, была ли нажата клавиша CTRL при запуске события мыши 2
    detail Возвращает число, указывающее, сколько раз щелкнули мышь 2
    metaKey Возвращает, была ли нажата клавиша «META» при срабатывании события 2
    pageX Возвращает горизонтальную координату указателя мыши относительно документа, когда событие мыши было запущено
    pageY Возвращает вертикальную координату указателя мыши относительно документа, когда событие мыши было запущено
    relatedTarget Возвращает элемент, связанный с элементом, вызвавшим событие мыши 2
    screenX Возвращает горизонтальную координату указателя мыши относительно экрана, когда событие было вызвано 2
    screenY Возвращает вертикальную координату указателя мыши относительно экрана, когда событие было инициировано 2
    shiftKey Возвращает, была ли нажата клавиша «SHIFT» при срабатывании события 2
    which Возвращает, какая кнопка мыши была нажата при запуске события мыши 2

    Объект - KeyboardEvent

    Свойство Описание DOM
    altKey Возвращает, была ли нажата клавиша «ALT» при срабатывании  события 2
    ctrlKey Возвращает, была ли нажата клавиша CTRL при срабатывании события клавиатуры 2
    charCode Возвращает код символа Юникода клавиши, которая вызвала событие onkeypress 2
    key Возвращает для нажатой клавиши её значение  3
    location Возвращает местоположение ключа на клавиатуре или устройстве 3
    metaKey Возвращает, была ли нажата клавиша «meta» при запуске  события 2
    shiftKey Возвращает, была ли нажата клавиша «SHIFT» при срабатывании  события 2
    which Возвращает код символа Юникода ключа, вызвавшего событие onkeypress, или код ключа Unicode ключа, вызвавшего событие onkeydown или onkeyup 2

    HashChangeEvent - объект

    Property Описание DOM
    newURL Returns the URL of the document, after the hash has been changed
    oldURL Returns the URL of the document, before the hash was changed

    PageTransitionEvent - объект

    Property Описание DOM
    persisted Returns whether the webpage was cached by the browser

    FocusEvent - объект

    Property Описание DOM
    relatedTarget Returns the element related to the element that triggered the event 3

    AnimationEvent - объект

    Property Описание DOM
    animationName Returns the name of the animation
    elapsedTime Returns the number of seconds an animation has been running

    TransitionEvent - объект

    Property Описание DOM
    propertyName Returns the name of the CSS property associated with the transition
    elapsedTime Returns the number of seconds a transition has been running

    WheelEvent - объект

    Property Описание DOM
    deltaX Returns the horizontal scroll amount of a mouse wheel (x-axis) 3
    deltaY Returns the vertical scroll amount of a mouse wheel (y-axis) 3
    deltaZ Returns the scroll amount of a mouse wheel for the z-axis 3
    deltaMode Returns a number that represents the unit of measurements for delta values (pixels, lines or pages) 3

     

    Регистрация обработчика событий

    Зарегистриовать обработчик событий можно разными способами.

    Присвоить значение специальному атрибуту (onclick, onkeypress, onmouseenter,...) при описании HTMl тега. Например:

    <button id='myButton1' onclick="alert('My event!');">Press me</button>

    Можно его изменить с помощью соответствующего свойства объекта element:

    document.getElementById('myButton1').onclick = 'alert("New action")'

    Можно использовать метод объекта element - addEventListener(event, listener). Например:

    document.getElementById('myButton1').addEventListener('click', click2); function click2(){ alert('Listener 1 - click2()'); }

    или

    document.getElementById('myButton1').addEventListener('click', () => { alert ('Listener 1!!'); });

    Если в этом примере  ипользовать оба способа, то к элементу id=myButton1 , к событию click будут привязаны сразу 2 обработчика.


    Удаление обработчика событий

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

    Привязать обработчик к элементу 

    <button id="myButton1" onclick='alert("Event listener connected")'>Click me</button>

    или

    document.getElementById('myButton1').onclick='alert("Event listener connected")';

    Удалить его

    document.getElementById('myButton1').onclick='';

    Можно использовать метод элемента removeEventListener(событие, имя_обработчика)

    Привязать

    function myFunc2(){ alert("Listener myFunc2() response"); } document.getElementById('myButton1').addEventListener('click', myFunc2);

    Удалить

    document.getElementById('myButton1').removeEventListener('click', myFunc2);


    Удалить все обработчики событий у элемента можно, например, клонировав элемент (метод cloneNode()) , при этом обработчики событий не клонируются. 

    function removeAllEventListeners(elmntID){ var oldElement = document.getElementById(elmntID); var newElement = oldElement.cloneNode(true); oldElement.parentNode.replaceChild(newElement, oldElement); // cleanup out1 out1.innerHTML = ''; }



    Events bubbling, capturing

    event.target - элемент, который инициировал событие.

    event.currentTarget - текущий элемент, обрабатывающий событие.

    event bubbling (event propagation) - обработка события, котоое инициировал элемент, всеми его родительскими элементами (снизу вверх или от дочернего элемента).

    event capturing - 

    event.eventPhase - фаза обработки события (capturing=1, bubbling=3)

    Стандартные события DOM проходят фазы обработки событий (event.eventPhase):

    Константа Значение Описание
    Event.NONE 0 Ни одно событие не обрабатывается
    Event.CAPTURING_PHASE 1 Событие передаётся через объекты-предки целевого элемента (event.target). Этот процесс начинается с объекта Window, затем - Document, затем HTMLHtmlElement и т. д. через элементы до тех пор, пока не будет достигнут непоседственно родительский элемент. Обработчики событий, зарегистрированные для Capturing (при вызове EventTarget.addEventListener (EVENT, HANDLER, useCapture)), запускаются на этом этапе.
    Event.AT_TARGET 2 Событие достигло целевого элемента. В это время вызываются обработчики событий, зарегистрированные для этой фазы. Если Event.bubbles принимает значение false, обработка события завершается после завершения этой фазы.
    Event.BUBBLING_PHASE 3 Событие распространяется к предкам целевого элемента, в обратном порядке, начиная с его непосредственного родителя, и в конечном итоге достигает объекта Window. Этот процесс называется bubbling происходит только в том случае, если Event.bubbles принимает значение true. Обработчики событий, зарегистрированные для этой фазы, запускаются в это время.
    • Capturing phase - событие переходит к элементу
    • Target phase - событие достигло целевого элемента
    • Bubbling phase - событие "поднимается" от элемента




     

  • JavaScript

    Программирование - JavaScript

  • Joomla 3.x создание модулей

    Как написать расширение типа "модуль" для Joomla 3.x

    CMS Joomla! 3.x построена с использованием трех разных приложений:

    installation (используется для установки Joomla)

    administrator (используется для управления контентом)

    public (используется для отображения содержимого).

    Программа installation используется один раз. Программы administrator и public через концепцию компонентов с модулями. Каждый модуль имеет одну точку входа, расположенную в папке modules. Модули именуются как:

     mod_ИМЯ_МОДУЛЯ / ИМЯ_МОДУЛЯ.php

    Разработку модуля можно разделить на несколько этапов:

    • создать файловую структуру модуля
    • внести в неё рабочие файлы<</li>
    • заархивировать в ZIP
    • установить в Joomla

    Простой модуль

    Далее - создаём простой модуль с именем webstart, который выводит на экран строку: "Ученье - свет!"

    Файловая структура модуля

    Первое, что нужно сделать - создать стандартную

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

    • mod_webstart.php - файл, который является основной точкой входа для модуля, он выполнит амнеобходимые процедуры инициализации, вызовет программу - helper для сбора любых необходимых данных и подключит шаблон, который будет отображать вывод модуля
    • mod_webstart.xml - файл, который содержит информацию о модуле, он определяет файлы, которые необходимо установить с помощью установщика Joomla, задает параметры конфигурации модуля
    • helper.php - файл, который содержит класс helper, который используется для фактической работы модуля,  для чтения информации из баз данных
    • tmpl / default.php - это шаблон модуля - файл который принимает данные, собранные mod_webstart.php, и генерирует HTML-код для вывода в окно браузера
    • index.html - из соображений безопасности во все папки стоит вставлять такой пустой файл-заглушку

    Создаём файловую структуру

    Создаём на диске папку webstart и в ней - необходимые файлы.


    Joomla 3 modules


    Вносим в них конфигурацию нашего модуля.

    Файл mod_webstart.xml

    <?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1.0" client="site" method="upgrade"> <name>Web start module</name> <author>WebStart.top project</author> <version>1.0.0</version> <description>My first test module.</description> <files> <filename>mod_webstart.xml</filename> <filename module="mod_webstart">mod_webstart.php</filename> <filename>index.html</filename> <filename>helper.php</filename> <filename>tmpl/default.php</filename> <filename>tmpl/index.html</filename> </files> <config> </config> </extension>

    Файл mod_webstart.php

    Этот файл выполнит три задачи:

    1. включит файл helper.php, который содержит класс, который будет использоваться для сбора необходимых данных
    2. вызовет соответствующий метод класса для получения данных
    3. подключит шаблон для  вывода.

    Класс - helper определяется в файле helper.php. Этот файл включен в инструкцию require_once:


    <?php // Check Joomla framework defined('_JEXEC') or die; // Include helper require_once dirname(__FILE__) . '/helper.php'; $hello = modWebStartHelper::sayWodr($params); require JModuleHelper::getLayoutPath('mod_webstart');


    В строке

    $hello = modWebStartHelper::sayWodr($params);

    modWebStartHelper - имя класса, которое задано в файле helper.php

    modWebStartHelper::getHello($params) - вызов единственного метода (функции) этого класса - sayWodr()

    Директива 

    JModuleHelper::getLayoutPath('mod_webstart');

    подключает шаблон.

    Файл helper.php


    <?php class modWebStartHelper { public static function sayWord($params) { return 'Ученье - свет!'; } }


    Файл index.html

    <!DOCTYPE html> <HTML> <HEAD></HEAD> <BODY> No access! </BODY> </HTML>


    Сохраняем созданный шаблон в файле webstart.zip

    Устанавливаем расширение в Joomla

    Joomla 3 modules


    Переходим в управление модулями

    Joomla 3 modules

    Публикуем его

    Joomla 3 modules

    Видим результат

    Joomla 3 modules


    Подключение к базе данных

    Часто возникает необходимость при установке модуля создать и использовать свою базу данных.

    Создадим новый модуль - mod_webstart_db

    Для этого необходимо:

    в xml - файле описания модуля (mod_webstart_db.xml) добавить теги, которые описывают SQL - запросы, которые будут выполняться при установке модуля (тег install), удалении модуля (тег uninstall), обновлении модуля (тег update). И таг <folder>sql</folder>

    Файл mod_webstart_db.xml

    <?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1.0" client="site" method="upgrade"> <name>Web start team</name> <author>WebStart.top project</author> <authorEmail>Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.</authorEmail> <authorUrl>http://WebStart.top</authorUrl> <version>1.0.0</version> <description>Test module with database</description> <creationDate>January 2018</creationDate> <files> <filename>mod_webstart_db.xml</filename> <filename module="mod_webstart_db">mod_webstart_db.php</filename> <filename>index.html</filename> <filename>helper.php</filename> <filename>tmpl/default.php</filename> <filename>tmpl/index.html</filename> <folder>MySQL</folder> </files> <install> <sql> <file driver="mysql" charset="utf8">MySQL/install.mysql.1.0.0.utf8.sql</file> </sql> </install> <uninstall> <sql> <file driver="mysql" charset="utf8">MySQL/uninstall.mysql.utf8.sql</file> </sql> </uninstall> <update> <schemas> <schemapath type="mysql">MySQL/updates</schemapath> </schemas> </update> <config> </config> </extension>




    Добавляем к проекту папку sql

    В ней создаём файлы с именами

    install.mysql.utf8.sql

    uninstall.mysql.utf8.sql

    и папку

    updates


    Joomla 3 modules


    Файл install.mysql.utf8.sql (в папке MySQL)

    CREATE TABLE IF NOT EXISTS #__web_st_db ( id int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY, myMsg text NOT NULL, lang varchar(5) NOT NULL ); INSERT INTO #__web_st_db (myMsg, lang) VALUES ('Be sure to visit the web-start.top website!', 'en-GB'); INSERT INTO #__web_st_db (myMsg, lang) VALUES ('הקפד לבקר באתר web-start.top!', 'he-IL'); INSERT INTO #__web_st_db (myMsg, lang) VALUES ('Обязательно посетите WEB-сайт web-start.top!', 'ru-RU');


    Файл uninstall.mysql.utf8.sql (в папке MySQL)

    DROP TABLE IF EXISTS #__web_st_db;


    Файл  (в папке MySQL\updates)

    # Placeholder file for database changes for version 1.0.0

    Файл default.php

    <?php defined('_JEXEC') or die; echo $hello;


    Файл helper.php

    <?php class modWebStartDbHelper { public static function sayWord($params) { // Obtain a database connection $db = JFactory::getDbo(); $lang = JFactory::getLanguage(); // Retrieve the message $query = $db->getQuery(true) -> select($db->quoteName('myMsg'))->from($db->quoteName('#__web_st_db'))->where('lang = ' . $db->Quote($lang->getTag())); // Prepare the query $db->setQuery($query); // Load the row. $result = $db->loadResult(); // Return the message return $result; } }


    Файл mod_webstat_db.php

    <?php // Check Joomla framework defined('_JEXEC') or die; // Include helper require_once dirname(__FILE__) . '/helper.php'; $hello = modWebStartDbHelper::sayWord($params); require JModuleHelper::getLayoutPath('mod_webstart_db');


    Устанавливаем модуль в адинистративной панели Joomla, ставим его в позицию, например 7

    Joomla 3 modules


    Наш модуль использует свою таблицу в базе данных Joomla, называется она:  #__web_st_db ,  префикс #__  заменяется на префикс всех таблиц в БД Joomla.

    Мы также используем информацию о текущем языке, выбранном на сайте. Её мы получаем из Joomla framework:

    $lang = JFactory::getLanguage();

    $lang->getTag()

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

    $db->Quote($lang->getTag())

    Поэтому при переходе сайта на другой язык наш модуль автоматически получает другое сообщение


    Joomla 3 modules

       


  • Joomla, компонент Sourcerer

    Joomla. Компонент Sourcerer

    Компонент sourcerer позволяет удобно размещать коды программ на PHP, JavaScript, стили CSS внутри статей, модулей сайта Joomla.

    Синтаксис тмрлдбзования довольно прост. Нужно разместить теги {source} и {/ source} в текстовой области, в которой должен появиться код (например, статья или пользовательский HTML-модуль), код программы размещается между тегами.

    Пример вставки HTML кода

    {source}<span style="color:red">This text should be red!</span>{/source}

    HTML-теги (с двойными квадратными скобками)

    С некоторыми редакторами Joomla могут возникнуть проблемы с сохранением тегов, введенных в представлении WYSIWYG (редактор удаляет их при сохранении). В этом случае можно использовать синтаксис с двойной квадратной скобкой для тегов.

    Нужно использовать [[tag]] вместо <tag>

    Пример:

    {source}[[span style="color:red"]]This text should be red![[/span]]{/source}

    Вставка программы на JavaScript

     {source} <script > alert('This text is placed through <strong>JavaScript</strong>!'); </script> {/source}

    Вставка программы на PHP

    {source} <?php echo ('This text is placed through <strong>PHP</strong>!'); ?> {/source}

    Комбинированный код (HTML, JavaScript и PHP)

    {source} <span style="color:red">This text should be red!</span> <br /> <script> document.write('This text is placed through <strong>JavaScript</strong>!'); </script> <?php echo ('<p>'); echo ('This text is placed through <strong>PHP</strong>!'); echo ('</p>'); ?> {/source}

    Вставка php из отдельного файла

    Пример файла PHP:
    www.yourdomain.com/myfiles/file.php

    {source file=myfiles/file.php}{/source}

    Или:

    {source file=myfiles/file.php}<?php echo '<div class="mydiv">' . $var_from_file . '</div>'; ?>{/source}


    Или:

    {source}<?php require_once JPATH_SITE.'/myfiles/file.php'; ?>{/source}


    Вставка текстового или HTML файла 

    {source}<?php echo file_get_contents( JPATH_SITE.'/myfiles/file.txt' ); ?>{/source}


    Использование Joomla framework

    Программа PHP, вставленная через sourcerer, может использовать объекты Joomla framework.

    Например:

    подключиться к базе данных

    {source}<?php $query = "SELECT something from #__mydatabasetable WHERE this = 'that'"; $database->setQuery($query); $result = $database->loadResult(); ?>{/source}

    подключиться к внешней базе данных

    {source}<?php $option = array( 'driver' => 'mysql', // Database driver name 'host' => 'db.myhost.com', // Database host name 'user' => 'fredbloggs', // User for database authentication 'password' => 's9(39s£h[%dkFd', // Password for database authentication 'database' => 'bigdatabase', // Database name 'prefix' => 'abc_', // Database prefix (may be empty) ); $db = JDatabase::getInstance( $option ); ?>{/source}

    добавить Javascript в начало страницы html

    {source}<?php $script = " alert('this is javasript'); "; $doc->addScriptDeclaration( $script ); ?>{/source}

    Чтобы добавить файл js в HEAD, используется:

    {source}<?php $doc->addScript( JURI::root( true ).'/path/to/your/file.js' ); ?>{/source}

    Чтобы добавить несколько таблиц стилей и javascript программ, можно использовать php-код:

    {source}<?php $css = " body { color: red; } "; $doc->addStyleDeclaration( $css ); $doc->addStyleSheet( JURI::root( true ).'/path/to/your/file.css' ); $doc->addStyleSheet( JURI::root( true ).'/path/to/your/file2.css' ); $script = " alert('this is javasript'); "; $doc->addScriptDeclaration( $script ); $doc->addScript( JURI::root( true ).'/path/to/your/file.js' ); $doc->addScript( JURI::root( true ).'/path/to/your/file2.js' ); ?>{/source}




    Глобальные переменные sourcerer

    Компонент sourcerer создаёт и позволяет использовать свои переменные:

    $mainframe или $app

    $document или $doc (не может использоваться в коде Sourcerer в модулях)

    $database или $db

    $user - объект user, содержащий сведения о пользователе guest или текущем пользователе

    $Itemid Идентификатор меню страницы

    $article Объект article (доступен только при использовании кода внутри статей)






  • NodeJS

    NodeJS

    https://github.com/nodejs/node - NodeJs проект на github 

    https://nodejs.org/en/ - установочные пакеты

    https://nodejs.org/api/synopsis.html - Документация Node.js v9.4.0


    NodeJS ( Node.js® - это среда выполнения для языка JavaScript, построенная на платформе JavaScript V8 для Chrome. )

    Node.js позволяет запускать JavaScript-код вне браузера.

    Чтобы JavaScript код выполнился вне браузера (на backend), он должен быть интерпретирован и выполнен. Именно это и делает Node.js. Для этого он использует движок V8 VM от Google — ту же самую среду исполнения для JavaScript, которую использует браузер Google Chrome.

    Введение


    Установка

    https://nodejs.org/en/ - установочные пакеты

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

    Так, например, для 32 bit Windows - файл: node-v8.9.4-x86.msi .



    Начать работу

    node

    > console.log("Начать");


    Простой WEB server


    Сохраняем в файте test1.js

    const http = require('http'); 

    const hostname = '127.0.0.1'; 

    const port = 3000;

    const server = http.createServer((req, res) => {

    res.statusCode = 200;

    res.setHeader('Content-Type', 'text/plain');

    res.end('Hello World\n');
    });

    server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
    });


    Запустить с консоли:

    node test1.js


    Или:

    var http = require("http");

    http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
    }).listen(8888);



    Справочные материалы


    Учебник

    https://www.nodebeginner.org/

    Материалы к нему

    https://github.com/manuelkiessling/nodebeginner.org

    Перевод на Русский

    http://nodebeginner.ru/



    документация по nodejs api

    https://nodejs.org/api/all.html






  • PHP формы

    Работа с формами в PHP

    При передаче данных форма может использовать методы: post или get.

    Соответственно, в теге fom атрибут method может принимать значение post или get. При переддаче по методу post значения переменных формы передаются через массив: $_POST, при методе get - через $_GET.

    Переменные HTTP-запроса

    Глобальные переменные - $_GET,  $_POST,  $_REQUEST.

    • $_REQUEST -ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE
    • $_POST - ассоциативный массив переменных, переданных скрипту через HTTP метод POST в (случае использования в запросе метода post)
    • $_GET - ассоциативный массив переменных, переданных скрипту через HTTP метод GET в (случае использования в запросе метода get)


    Вызов программы из отдельного файла

    Пример HTML - странички, котораяй рисует форму:

    <html> <head> <meta charset="utf-8"> </head> <body> <h1>Введите данные</h1> <form action="PHP_16-1Form.php" method="post" target="out"> Имя: <input type="text" name="name" value="Введите Ваше имя"><br> E-mail: <input type="text" name="email"><br> <input type="submit" value="Ввод"> <input type="reset" value="Очистить форму"> </form> <iframe name="out" style="border:none"></iframe> </body> </html>


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


    <?php var_dump($_POST); ?>


    Размещение программы в том же файле, что и сама форма

    Пример:

    <!DOCTYPE HTML> <html> <meta charset="utf-8"> <head> </style> </head> <body> <h1>Форма ввода</h1> <table> <form method="get" action="<?php echo $_SERVER["PHP_SELF"];?>"> <tr><td>Имя: </td><td><input type="text" name="name"></td></tr> <tr><td>Возраст:</td><td> <input type="age" name="name"></td></tr> <tr><td colspan=2><input type="submit" value="Ввод"> </td></tr> </form> </table> <?php echo "<h1>Введено:</h1>"; var_dump ($_REQUEST); ?> </body> </html>




    Проверка введённых данных

    Важно предварительно проверять данные,  которые форма передаёт в PHP - программу. Заполняемые поля ввода могут содержать некорректные, недопустимые данные. Такая проверка может подсказать и исправить возможные ошибки при вводе данных, предотвратить насанкционированный доступ к сайту и тд..

      Для этих целей используются разные методы, например:

    • задание типа поля ввода
    • использование проверки данных до отправки на сервер (JavaScript)
    • использование PHP - фильтров (filter_var() )
    • использование шаблонов ввода - регулярных выражений (RegularExpressions )





  • PHP Cookies

    PHP cookies

    PHP поддерживает HTTP cookies. Это механизм хранения небольших объёмов данных браузером на компьютере клиента.

    Для записи cookies используются функции setcookie() или setrawcookie(). 

    Cookies являются частью HTTP-заголовка, поэтому setcookie() должна вызываться до любого вывода данных в браузер. 

    Любые cookies, отправленные серверу браузером клиента, автоматически включаются в суперглобальный массив $_COOKIE.

    Параметры браузера клиента управляют режимом работы клиента с cookies. Можно разрешить cookie, удалить или  запретить в параметрах браузера. Например, в браузере chrome: chrome://settings/cookies

    Синтаксис setcookie()

    setcookie(name, value, expire, path, domain, secure, httponly);

    Функция setcookie() записывает в cookie переменную с именем "name", значение которой: "value". Эта переменная передаётся клиенту вместе с другими HTTP заголовками. Как и любой другой заголовок, cookie должны передаваться до того, как будут выведены какие-либо другие данные скрипта (это ограничение протокола). Это значит, что в скрипте вызовы этой функции должны располагаться до любого другого вывода, включая вывод HTML тэгов.

    После передачи клиенту переменные cookie  доступны через глобальный массив $_COOKIE. Эти данные будут доступны при следующей загрузке страницы, пока не закончится срок годности (expire). Значения cookie также доступно через  $_REQUEST.

    name - единственный необходимый параметр: имя переменной, которая запишется в cookie

    value - значение переменной, это значение будет сохранено на клиентском компьютере значение переменной cookie c именем , будет доступно через $_COOKIE['cookiename'].

    expire - срок годности cookie, по истечении срока годности cookie автоматически удаляются, если задать 0 или пропустить этот параметр, срок действия cookie истечет с окончанием сессии (при закрытии броузера)

    path - путь к директории на сервере, из которой будут доступны cookie, если установлено значение «/», файл cookie будет доступен во всем домене

    domain - домен, которому доступны cookie, задание домена делает cookie доступными в нем и во всех его поддоменах

    secure - cookie должны передаваться от клиента по защищенному HTTPS соединению

    httponly - если задано TRUE, cookie будут доступны только через HTTP протокол, то есть cookie в этом случае не будут доступны скриптовым языкам, вроде JavaScript

    Функция setcookie() возвращает значение true или false в зависимости от того, удалось или нет  установить cookie. Это можно использовать для того, чтобы проверить, разрешены ли cookie в браузере клиента.

    Пример:

    Записать cookie

    <?php setcookie("name", "John", time()+3600, "/","", 0); setcookie("age", "36", time()+3600, "/", "", 0); ?>


    Прочесть cookie

    <?php var_dump ($_COOKIE); ?>


    Удалить cookie


    <?php setcookie( "name", "", time()- 60, "/","", 0); setcookie( "age", "", time()- 60, "/","", 0); ?>





  • PHP MySQL

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

    Что такое база данных MySQL

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

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

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

    В настоящее время для хранения и управления большими массивами информации используются:

    реляционные системы управления базами данных (RDBMS Relational Database Management System). Все данные в такой системе хранятся в разных таблицах и отношения между ними устанавливаются с использованием различного типа ключей. Иногда называют SQL - базы данных.


    MySQL - популярная система управления базами данных. Практически все языки программирования поддерживают API для работы с MySQL.

    Самое популярное сочетание для современных WEB разработок - это язык программирования PHP и MySQL в качестве системы управления базами данных.

    MySQL использует стандартные запросы языка SQL (Structured Query Languagequeries) для манипуляций с данными.

    Терминология

    • Database: реляционная база данных, которая представляет собой набор таблиц с данными.
    • Table: таблица, еоторая представляет собой матрицу с данными, состоит из рядов и колонок.
    • Column: один столбец (data element) содержит данные одного и того же типа, например: столбец - почтовый индекс.
    • Row: строка таблицы в базе данных представляет собой группу связанных данных, например данные одного клиента.
    • Primary Key: первичный ключ, коорый является уникальным. С помощью ключа можно быстро найти нужную строку.
    • Foreign Key: внешний ключ связывает данные из разных таблиц.
    • Compound Key: комбинированный ключ (composite key) является ключом , который состоит из нескольких колонок.

    Работа с MySQL через WEB интерфейс - phpMyAdmin

    PhpMyAdmin - это самый популярный сегодня, бесплатный программный инструмент - графический WEB интерфейс, написанный на PHP, предназначенный для управления бзами данных MySQL через интернет.

    PhpMyAdmin поддерживает широкий спектр операций с базами данных MySQL. Часто используемые операции (управление базами данных, таблицы, столбцы, отношения, индексы, пользователи, разрешения и т. Д.) могут выполняться как через пользовательский интерфейс так и через SQL - запросы.

    PHP - MySQL драйверы и плагины

    Язык PHP предоставляетрасширения для работы с различными базами данных. В том числе - MySQL.

    API предоставляет на выбор три набора инструментов для подключения к серверу баз данных MySQL:

    • Расширение PHP MySQL
    • Расширение PHP MySQLi
    • Объекты данных PHP (PDO)

    Наиболее часто сегодня используется MySQLi.

    Расширение MySQLi, или как его еще называют улучшенное (improved) MySQL расширение, было разработано, чтобы дать возможность программистам в полной мере воспользоваться функционалом MySQL сервера версий 4.1.3 и выше. Расширение mysqli включается в поставку PHP версий 5 и выше.

    Объекты данных PHP, или PDO, представляют из себя абстракцию коннектора баз данных для PHP приложений. PDO предоставляет API интерфейс взаимодействия с базой данных, не зависящий от конкретной СУБД. Теоретически, при использовании PDO можно поменять сервер баз данных, например с Firebird на MySQL, и это приведет лишь к незначительным изменениям в PHP коде.

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

    База данных в MySQL - это набор таблиц и связей между ними.

    Для управления этой базой данных создаётся пользователь с определённым набором прав на неё. Когда на сервер ставится MySQL, он создаёт единственного пользователя root с максимальными правами. Далее можно управлять пользователями, создавать новых, удалять, менять права. Обычная практика: дл каждой базы данных создаётся свой пользователь.

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

    Каждое действие с данными проводит SQL запрос (SQL query), который даёт команду серверу.

    Основные команды

    • SELECT - извлекает данные из базы данных
    • UPDATE - обновляет данные в базе данных
    • DELETE - удаляет данные из базы данных
    • INSERT INTO - вставляет новые данные в базу данных
    • CREATE DATABASE - создает новую базу данных
    • ALTER DATABASE - изменяет базу данных
    • CREATE TABLE - создает новую таблицу
    • ALTER TABLE - изменяет таблицу
    • DROP TABLE - удаляет таблицу
    • CREATE INDEX - создает индекс (ключ поиска)
    • DROP INDEX - удаляет индекс


    Примеры стандартных SQL запросов

    Предположим, что наш MySQL server установлен на localhost (тот же компьютер, на котором запускается PHP программа, обращающаяся к этому серверу).

    Пользователь, имеющий полные права на управление сервером - root, с паролем Test12345.

    Создадим базу данных Students вот такой структуры:

    ID Имя Дата регистрации Курс












    Для этого:

    1. подключаемся с серверу MySQL
    2. создаём пользователя и базу данных, даём пользователю полные права на эту БД
    3. создаём в БД таблицу.

    Используем методы MySQLi. Для создания баз подключаемся к серверу с данными пользователя, имеющего право создавать базы данных (сейчас - root nr как никаких других мы не создавали).

    Подключаемся к MySQL серверу из PHP программы, 

    $servername = "localhost"; $username = "root"; $password = "Test12345"; $dbname = "Students"; // Create connection $conn = mysqli_connect($servername, $username, $password); // Check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); }


    созданём базу данных Students

    // Create database $sql="CREATE DATABASE $dbname CHARACTER SET utf8 COLLATE utf8_general_ci"; if (mysqli_query($conn, $sql)) { echo "Database <b>$dbname</b> created successfully"; } else { echo "Error creating database: " . mysqli_error($conn); }

    Созданём пользователя и даём ему права на базу данных


    Создаём таблицу



    PDO




    Основные типы даннх

    Числовые типы данных

    Тип данных Объем памяти
    байт
    Диапазон Описание
    TINYINT (M) от -128 до 127
    или
    от 0 до 255
    Целое. Может быть объявлено UNSIGNED. Необязательный параметр М - количество отводимых под число символов. Необязательный атрибут ZEROFILL позволяет свободные позиции по умолчанию заполнить нулями.

    TINYINT - число в диапазоне от -128 до 127.

    TINYINT UNSIGNED - число в диапазоне от 0 до 255.

    TINYINT (3) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 002.

    SMALLINT (M) от -32768 до 32767 или
    от 0 до 65535

    SMALLINT - целое число в диапазоне от -32768 до 32767.

    SMALLINT UNSIGNED - целое число в диапазоне от 0 до 65535.

    SMALLINT (4) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 0002.

    MEDIUMINT (M) от -8388608 до 8388608
    или
    от 0 до 16777215

    MEDIUMINT - целое число в диапазоне от -8388608 до 8388608.

    MEDIUMINT UNSIGNED - целое число в диапазоне от 0 до 16777215.

    MEDIUMINT (5) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 00002.

    INT (M)
    или
    INTEGER (M)
    от -2147683648 до 2147683648 или от 0 до 4294967295

    INT - хранит целое число в диапазоне от -2147683648 до 2147683648.

    INT UNSIGNED - целое число в диапазоне от 0 до 4294967295.

    INT (5) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 00002.

    BIGINT (M) от -263 до 263-1 или от 0 до 264

    BIGINT - целое число в диапазоне от -263до 263-1.

    BIGINT UNSIGNED - целое число в диапазоне от 0 до 264.

    BIGINT (7) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 0000002.

    BOOL или BOOLEAN 1 либо 0, либо 1 Булево значение. 0 - ложь (false), 1 - истина (true).
    DECIMAL (M,D) или DEC (M,D) или NUMERIC (M,D) M + 2  зависят от параметров M и D Используются для величин повышенной точности, например, для денежных данных.
    M - количество отводимых под число символов (максимальное значение - 64).
    D - количество знаков после запятой (максимальное значение - 30).

    DECIMAL (5,2) - будет хранить числа от -99,99 до 99,99.

    FLOAT (M,D) мин. значение +(-) 1.175494351 * 10-39

    макс. значение +(-) 3. 402823466 * 1038

    Вещественное число (с плавающей точкой). Может иметь параметр UNSIGNED, запрещающий отрицательные числа, но диапазон значений от этого не изменится. M - количество отводимых под число символов. D - количество символов дробной части. 

    FLOAT (5,2) - будет хранить числа из 5 символов, 2 из которых будут идти после запятой (например: 46,58).

    DOUBLE (M,D) мин. значение +(-) 2.2250738585072015 * 10-308

    макс. значение +(-) 1.797693134862315 * 10308

    DOUBLE - большие дробные числа.


    Строковые типы данных

    Тип данных Объем памяти
    символов
    Максимальный размер
    символов
    Описание
    CHAR (M) M М  Позволяет хранить строку фиксированной длины М. Значение М - от 0 до 65535.

    CHAR (8) - хранит строки из 8 символов и занимает 8 байтов. Например, любое из следующих значений: '', 'Иван','Ирина', 'Сергей' будет занимать по 8 байтов памяти. А при попытке ввести значение 'Александра', оно будет усечено до 'Александ', т.е. до 8 символов.

    VARCHAR (M) L+1  М  Позволяет хранить переменные строки длиной L. Значение М - от 0 до 65535.

    VARCHAR (3) - хранит строки максимум из 3 символов, но пустая строка '' занимает 1 байт памяти, строка 'a' - 2 байта, строк 'aa' - 3 байта, строка 'aaa' - 4 байта. Значение более 3 символов будет усечено до 3.

    BLOB, TEXT L+2  216-1  Позволяют хранить большие объемы текста. Причем тип TEXT используется для хранения именно текста, а BLOB - для хранения изображений, звука, электронных документов и т.д.
    MEDIUMBLOB, MEDIUMTEXT L+3  224-1  Аналогично предыдущему, но с большим размером.
    LONGBLOB, LONGTEXT L+4  232-1  Аналогично предыдущему, но с большим размером.
    ENUM ('value1', 'value2',...,'valueN') 1 или 2 байта 65535 элементов Строки этого типа могут принимать только одно из значений указанного множества.

    ENUM ('да', 'нет') - в столбце с таким типом может храниться только одно из имеющихся значений. Удобно использовать, если предусмотрено, что в столбце должен храниться ответ на вопрос.

    SET ('value1', 'value2',...,'valueN') до 8 байт 64 элемента Строки этого типа могут принимать любой или все элементы из значений указанного множества.

    SET ('первый', 'второй') - в столбце с таким типом может храниться одно из перечисленных значений, оба сразу или значение может отсутствовать вовсе.

    Календарные типы данных

    Тип данных Объем памяти
    байт
    Диапазон Описание
    DATE от '1000-01-01' до '9999-12-31' Предназначен для хранения даты. В качестве первого значения указывается год в формате "YYYY", через дефис - месяц в формате "ММ", а затем день в формате "DD". В качестве разделителя может выступать не только дефис, а любой символ отличный от цифры.
    TIME от '-838:59:59' до '838:59:59' Предназначен для хранения времени суток. Значение вводится и хранится в привычном формате - hh:mm:ss, где hh - часы, mm - минуты, ss - секунды. В качестве разделителя может выступать любой символ отличный от цифры.
    DATATIME от '1000-01-01 00:00:00' до '9999-12-31 23:59:59' Предназначен для хранения и даты и времени суток. Значение вводится и хранится в формате - YYYY-MM-DD hh:mm:ss. В качестве разделителей могут выступать любые символы отличные от цифры.
    TIMESTAMP от '1970-01-01 00:00:00' до '2037-12-31 23:59:59' Предназначен для хранения даты и времени суток в виде количества секунд, прошедших с полуночи 1 января 1970 года (начало эпохи UNIX).
    YEAR (M) 1 от 1970 до 2069 для М=2 и от 1901 до 2155 для М=4 Предназначен для хранения года. М - задает формат года. Например, YEAR (2) - 70, а YEAR (4) - 1970. Если параметр М не указан, то по умолчанию считается, что он равен 4.


    Тип данных NULL


    NOT NULL (значение не может отсутствовать) для полей логин и пароль,

    NULL (значение может отсутствовать) для полей дата рождения и пол.

    По умолчанию всем столбцам присваивается тип NOT NULL, поэтому его можно явно не указывать.

    Пример:

    create table users (login varchar(20), password varchar(15), sex enum('man', 'woman') NULL, date_birth date NULL); 

    Таким образом создаем таблицу с 4 столбцами: 

    логин (не более 20 символов) обязательное, 

    пароль (не более 15 символов) обязательное, 

    пол (мужской или женский) не обязательное, 

    дата рождения (тип дата) необязательное.





  • PHP sessions

    PHP sessions

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

    Расположение временного файла определяется настройкой в файле php.ini, называемой session.save_path. 

    Когда сессия инициируется, происходит ряд событий

    • Сначала PHP создает уникальный идентификатор для этого конкретного сеанса, который представляет собой строку из 32 случайных шестнадцатеричных чисел
    • Cookie с именем: PHPSESSID автоматически отправляется на компьютер пользователя для хранения уникальной строки идентификации сеанса
    • на сервере в указанном временном каталоге автоматически создаётся файл, который содержит имя уникального идентификатора с префиксом sess_ ie

    Когда PHP-скрипт хочет получить значение переменной сеанса, PHP автоматически получает  идентификатор сеанса из cookie PHPSESSID,  затем ищет временную директорию для файла с этим именем, проверка производится путем сравнения обоих значений.

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

    Открытие сеанса

    Функция session_start() стартует сеанс связи (session). Эта функция сначала проверяет, запущен ли сеанс, и если ни один не запущен, она запускает его. Рекомендуется размещать вызов session_start () в начале страницы.

    Переменные сеанса хранятся в ассоциативном массиве с именем $ _SESSION []. Эти переменные могут быть доступны во время жизни сеанса.

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

    Функция isset() используется для проверки, установлена уже переменная сессии или нет.


    <?php session_start(); if( isset( $_SESSION['counter'] ) ) { $_SESSION['counter'] += 1; }else { $_SESSION['counter'] = 1; } $msg = "You have visited this page ". $_SESSION['counter']; $msg .= "in this session."; ?> <html> <head> <title>Setting up a PHP session</title> </head> <body> <?php echo ( $msg ); ?> </body> </html>

    Результат:

    You have visited this page 1in this session.

    Закрытие сеанса

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

    Пример:

    <?php session_destroy(); ?>
    Или

    <?php unset($_SESSION['counter']); ?>


    Автоматический старт sessions

    Можно не вызывать функцию start_session (), чтобы начать сеанс, когда пользователь посещает сайт, если в файле php.ini переменная session.auto_start установлена равной 1.




  • PHP введение

    Что такое PHP-файл?

    • PHP-файлы могут содержать текст, HTML, CSS, JavaScript и PHP-код
    • PHP-код выполняется на сервере, и результат возвращается браузеру в виде простого HTML-кода
    • Файлы PHP имеют расширение «.php»

    Что может сделать PHP?

    • PHP может генерировать динамическое содержимое страницы
    • PHP может создавать, открывать, читать, записывать, удалять и закрывать файлы на сервере
    • PHP может собирать данные формы
    • PHP может отправлять и получать файлы cookie
    • PHP может добавлять, удалять и изменять данные в вашей базе данных
    • PHP может использоваться для управления доступом пользователей
    • PHP может шифровать данные
    • С PHP вы не ограничены выводом HTML. Вы можете выводить изображения, PDF-файлы и даже флеш-ролики.
    • Вы также можете выводить любой текст, такой как XHTML и XML.

    Почему PHP?

    • PHP работает на различных платформах (Windows, Linux, Unix, Mac OS X и т. Д.).
    • PHP совместим практически со всеми используемыми сегодня серверами (Apache, IIS и т. Д.)
    • PHP поддерживает широкий спектр баз данных
    • PHP является бесплатным.
    • PHP легко изучается и эффективно работает на сервере

     

     

  • PHP константы

    Константы в языке PHP

    Константы (constants) в PHP похожи, по сути, на переменные (variables). Это - идентификатор, который может содержать некоторое значение. Константа, в отличие от переменной, не допускает изменения своего значения в процессе выполнения программы.

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

    В РНР константы определяются функцией define(), которая имеет следующий формат:

    define($name, $value, $case_sen)

    $name - имя константы;

    $value - значение константы;

    $case_sen - необязательный параметр логического типа, указывающий, следует ли учитывать регистр букв (true) или нет (false) - зтот параметр отменен с версии 7.3.

    Пример определения и использования констант в PHP:

    <?php define("pi",3.14); echo pi; // Выводит 3.14
    ?>

    Фунция define() возвращает значение true или false в зависимости от того, прошло ли успешно определение константы.

    Если параметр $case_sen равен true, то интерпретатор будет учитывать регистр символов при работе с константой. Обратите внимание, что константы используются без предваряющего знака $.

    Различия между константами и переменными:

    • У констант нет приставки в виде знака доллара ($)
    • Константы можно определить только с помощью функции define(), а не присваиванием значения
    • Константы могут быть определены и доступны в любом месте без учета области видимости. Константы автоматически становятся глобальными.
    • Константы не могут быть определены или аннулированы после первоначального объявления
    • Константы в PHP версиях до 7.0 могут иметь только скалярные значения. С версии 7 - также массив (array)
    • Константы с версии 7.3 не могут быть case-sensitive

    Для проверки существования константы можно использовать функцию defined($name). Она возвращает значение true, если константа определена.

    <?php // Проверяем , существует ли в нашей программе константа Pi if (defined("Pi") == true ){ echo "В программе уже есть константа Pi "; } else { define("Pi",3.14159,true); echo "Определили константу Pi = 3.14159 !"; } ?>

    PHP - расширение runkit предоставляет возможности переопределить константы (runkit_constant_redefine(), runkit_constant_remove()).

    Стандартные константы PHP

    В языке PHP, наряду с задаваемые пользователем,  существуют предопределенные константы.

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

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

    Например:

    Имя
    Описание
    __LINE__
    Текущая строка в файле.
    __FILE__
    Полный путь и имя текущего файла.
    __DIR__
    Папка, в которой расположен файл. Эквивалент - dirname(__FILE__).
    __FUNCTION__
    Имя функции. 
    __CLASS__
    Имя класса. 
    __TRAIT__
    Имя трейта 
    __METHOD__
    Имя метода класса. 
    __NAMESPACE__
    Текущее пространство имён




  • PHP массивы

    PHP - массивы

    Инициализация массива

    Массив может быть инициализирован до его использования в программе.

    Например, используя ключевое слово - array

    $myFirstArray = array (1,2,3,4,5);

    Используя разделители - []

    $ar2 = [1,"test",33];

    Используя функцию list()

    list($a, $b) = array('Alice', 'Bob');

    Или динамически, во время выполнения программы. При этом назначение индексов элементов может производиться автоматически (в примере ниже индексы присвоятся от 0 до 3):

    $paperType[] = "Copier"; $paperTyper[] = "Inkjet"; $paperType[] = "Laser"; $paperType[] = "Photo";

    или - явно, вручную:

    $paperType[1] = "Copier"; $paperTyper[2] = "Inkjet"; $paperType[3] = "Laser"; $paperType[4] = "Photo";

    Для распечатки массива удобно использовать PHP - функции:

    var_dump(); print_r()

    Например:

    var_dump($paperType);

    Массивы с цифровыми индексами (Numerically Indexed Arrays)

    В таком массиве индекс каждого элемента - цифровой. По-умолчанию PHP нумерует элементы массивов, начиная с 0. То есть: индексы масива, состоящего из элементов - 0,1,2 .

    $year = ["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь",12];

    Распечатать значение третьего элементв массива можно, например, используя синтаксис:

    echo $year [2];

    Результат - Март.

     

    Ассоциативные массивы (Associative Arrays)

    В ассоциативном массиве - индексами являются имена.

    $students = [["Piter,22"],["Sandy",24]]; $ages = ["Peter"=>"35","Ben"=>"37","Joe"=>"43","Harry1"=>"50","Harry2"=>"50"];

    Команда:

    echo $ages ['Joe'];

    выводит на печать - 43

    Многомерные массивы (Multidimensional Arrays)

    Это массив, каждый эдемент которого является также массивом.

    Например - массив:

    $students = array ( array ("Ivan",25, "Software development", 300), ["Steve",35, "WEB", 200], ["Nikolay",28, "PC Support", 150], ["Lisa",25, "Photoshop", 100] , ["Bobby",25, "Photoshop", 100] );

    Команда:

    echo $students[0][0];

    выводит на печать - Ivan

     

    Цикл foreach...as

    Для обработки элементов массива часто используюися циклы (loops ).

    Например:

    <?php $paper = array("Copier", "Inkjet", "Laser", "Photo"); $j = 0; foreach ($paper as $item) { echo "$j: $item<br>"; ++$j; } ?>

     

    <?php $cars = array("Volvo", "BMW", "Toyota"); $arrlength = count($cars); for($x = 0; $x < $arrlength;="" $x++)="" {="" echo="" $cars[$x];="" echo="">
    "; } ?>

     

     

    PHP функции для работы с массивами

    Функция Описание
    array() Создать массив$cars = array("Volvo", "BMW", "Toyota");
    array_change_key_case() Изменить регистр ключей массива
    $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
    print_r(array_change_key_case($age,CASE_UPPER));
    array_chunk() Делит массив на куски
    $cars=array("Volvo","BMW","Toyota","Honda","Mercedes","Opel");
    print_r(array_chunk($cars,2));
    array_column() Создаёт массив - колонку исходного массива
    // An array that represents a possible record set returned from a database
    $a = array(
    array(
    'id' => 5698,
    'first_name' => 'Peter',
    'last_name' => 'Griffin',
    ),
    array(
    'id' => 4767,
    'first_name' => 'Ben',
    'last_name' => 'Smith',
    ),
    array(
    'id' => 3809,
    'first_name' => 'Joe',
    'last_name' => 'Doe',
    )
    );

    $last_names = array_column($a, 'last_name');
    print_r($last_names);
    ?>
    Результат:

    Array
    (
    [0] => Griffin
    [1] => Smith
    [2] => Doe
    )

    array_combine() Создаёт новый массив, используя элементы первого массива в качестве индексов, второго - в качестве значений
    $fname=array("Peter","Ben","Joe");
    $age=array("35","37","43");

    $c=array_combine($fname,$age);
    print_r($c);
    ?>
    Результат:
    Array ( [Peter] => 35 [Ben] => 37 [Joe] => 43 )
    array_count_values() Считает количество элементов массива
    array_diff() Сравнивает значения элементов массивов, возвращает результат сравнения - разницу между ними
    $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
    $a2=array("e"=>"red","f"=>"green","g"=>"blue");

    $result=array_diff($a1,$a2);
    print_r($result);
    ?>
    Результат:
    Array ( [d] => yellow )
    array_diff_assoc() Сравнивает значения и элементов и индексов массивов, возвращает результат сравнения - разницу между ними
    array_diff_key() Compare arrays, and returns the differences (compare keys only)
    array_diff_uassoc() Compare arrays, and returns the differences (compare keys and values, using a user-defined key comparison function)
    array_diff_ukey() Compare arrays, and returns the differences (compare keys only, using a user-defined key comparison function)
    array_fill() В примере: создаёт массив (4 элемента, первый индекс - 3) и всем элементам присваивает значение blue
    $a1=array_fill(3,4,"blue");
    array_fill_keys() Fills an array with values, specifying keys
    array_filter() Фильтр массива с использованием call_back функции. Перебираются все элементы массива, каждый последовательно передаётся в call_llback-функцию. Если функция возвращает true, то данное значение из array возвращается в результирующий массив. Ключи массива сохраняются.
    function test_num($var)
    {
    return (gettype($var) == "integer");
    }

    $a1=array("a","b",2,3,4);
    var_dump(array_filter($a1,"test_num"));
    ?>
    Результат:
    array (size=3)
    2 => int 2
    3 => int 3
    4 => int 4
    array_flip() Flips/Exchanges all keys with their associated values in an array
    array_intersect() Сравнивает массивы, возвращает их пересечение (те элементы, значения которых одинаковы)
    array_intersect_assoc() Сравнивает массивы, возвращает их пересечение (те элементы, значения и индексы которых одинаковы)
    array_intersect_key() Сравнивает массивы, возвращает их пересечение (те элементы, индексы которых одинаковы)
    array_intersect_uassoc() Сравнивает ключи и значения двух массивов и возвратите совпадения (для спавнения используется callback-функция)
    function myfunction($a,$b)
    {
    if ($a===$b)
    {
    return 0;
    }
    return ($a>$b)?1:-1;
    }

    $a1=array("a"=>"red","b"=>"green","c"=>"blue");
    $a2=array("d"=>"red","b"=>"green","e"=>"blue");

    $result=array_intersect_uassoc($a1,$a2,"myfunction");
    print_r($result);
    ?>
    Результат:
    Array ( [b] => green )
    array_intersect_ukey() Compare arrays, and returns the matches (compare keys only, using a user-defined key comparison function)
    array_key_exists() Проверяет, есть ли в массиве такой индекс
    $a=array("Volvo"=>"XC90","BMW"=>"X5");
    if (array_key_exists("Volvo",$a))
    {
    echo "Key exists!";
    }
    else
    {
    echo "Key does not exist!";
    }
    ?>
    array_keys() Возвращает массив, состоящий из индексов массива - аргумента функции
    array_map() Посылает каждое значение массива в callback-функцию, которая возвращает новые значения
    function func($num)
    {
    return("Элемент" . (string)$num);
    }
    $a=array(1,2,3,4,5);
    print_r(array_map("func",$a));
    ?>

    Результат:
    Array
    (
    [0] => Элемент1
    [1] => Элемент2
    [2] => Элемент3
    [3] => Элемент4
    [4] => Элемент5
    )

    array_merge() Сливает несколько массивов в один
    array_merge_recursive() Merges one or more arrays into one array recursively
    array_multisort() Сортировка нескольких массивов мли многомерного массива

    array_multisort(array1,sorting order,sorting type,array2,array3...)
    Параметр Описание
    array1 Обязательный параметр. Имя массива
    направление сортировки Необязательный параметр. Возможные значения:
    • SORT_ASC - по умолчанию. По возрастанию (A-Z)
    • SORT_DESC - по убыванию (Z-A)
    тип сортировки Необязательный параметр. Тип переменных, используемый при сортировке. Возможные значения:
    • SORT_REGULAR - по умолчанию. ( ASCII - коды)
    • SORT_NUMERIC - как цифры
    • SORT_STRING - как строки
    • SORT_LOCALE_STRING - как строки, с учётом локализации
    • SORT_NATURAL - как строки с использованием алгоритма "natural order"
    • SORT_FLAG_CASE - может быть объединен (бинарное OR) с SORT_STRING или SORT_NATURAL для сортировки без учета регистра
    array2 Необязательный параметр. Второй массив.
    array3 Необязательный параметр. Третий массив.
    Пример:

    <?php
    $a1=array("Dog","Cat");
    $a2=array("Fido","Missy");
    array_multisort($a1,$a2);
    print_r($a1);
    print_r($a2);
    ?>

        Результат: 
    Array ( [0] => Cat [1] => Dog ) Array ( [0] => Missy [1] => Fido )
    array_pad() Вставляет указанное количество элементов с заданным значением в массив
    $a=array("red","green");
    print_r(array_pad($a,5,"blue"));
    Возвращает массив из 5 элементов, значения новых -  "blue"
    array_pop() Удаляет последний элемент массива
    $a=array("red","green","blue");
    array_pop($a);
    print_r($a);
    array_product() Вычисляет произведение значений в массиве
    array_push() Вставляет один или несколько элементов в конец массива
    array_rand() Возвращает один или несколько случайных ключей из массива
    array_reduce() Возвращает массив как строку, используя пользовательскую функцию
    array_replace() Заменяет значения первого массива значениями из следующих массивов
    array_replace_recursive() Заменяет значения первого массива рекурсивными значениями из следующих массивов
    array_reverse() Возвращает массив в обратном порядке
    array_search() Ищет в массиве заданное значение и возвращает ключ
    array_shift() Удаляет первый элемент из массива и возвращает значение удаляемого элемента
    array_slice() Возвращает выбранные части массива
    array_splice() Удаляет и заменяет указанные элементы массива
    array_sum() Возвращает сумму значений в массиве
    array_udiff() Сравните массивы и возвращает различия (сравнивает только  значения , с помощью пользовательской функции сравнения )
    array_udiff_assoc() Сравнивает массивы и возвращает различия (сравнивает и  ключи и значения, используя встроенную функцию для сравнения ключей и пользовательскую функции для сравнения значений)
    array_udiff_uassoc() Сравнивает массивы и возвращает различия ( ключи и значения, используя две пользовательские функции сравнения ключей)
    array_uintersect() Сравнивает массивы и возвращает совпадения (сравнивает только значения, используя пользовательскую функцию сравнения ключей)
    array_uintersect_assoc() Сравнивает массивы и возвращает совпадения ( ключи и значения, используя встроенную функцию для сравнения ключей и пользовательской функции для сравнения значений)
    array_uintersect_uassoc() Сравнивает массивы и возвращает совпадения (ключи и значения, используя две пользовательские функции сравнения ключей)
    array_unique() Удаляет повторяющиеся значения из массива
    array_unshift() Добавляет один или несколько элементов в начало массива
    array_values() Возвращает все значения массива
    array_walk() Применяет пользовательскую функцию к каждому элементу массива
    array_walk_recursive() Рекурсивно применяет функцию пользователя к каждому элементу массива
    arsort() Сортирует ассоциативный массив в порядке убывания, согласно значению
    asort() Сортирует ассоциативный массив в порядке возрастания, согласно значению
    compact() Создать массив, содержащий переменные и их значения
    count() Возвращает количество элементов в массиве
    current() Возвращает текущий элемент в массиве
    each() Возвращает текущую пару ключ-значение из массива
    end() Устанавливает внутренний указатель массива на последний элемент
    extract() Импортирует переменные в текущую таблицу символов из массива
    in_array() Проверяет, существует ли указанное значение в массиве
    key() Выбирает ключ из массива
    krsort() Сортирует ассоциативный массив в порядке убывания, в соответствии с ключом
    ksort() Сортирует ассоциативный массив в порядке возрастания, в соответствии с ключом
    list() Присваивает переменные, как если бы они были массивом
    natcasesort() Сортирует массив с использованием не зависящего от регистра алгоритма «естественного порядка»
    natsort() Сортирует массив с использованием алгоритма «естественного порядка»
    next() Увеличивает на единицу внутренний счётчик
    pos() Аналог функции count() 
    prev() Перемещает внутренний указатель массива  на предыдущий элемент  и возвращает предыдущий элемент 
    range() Создает массив, содержащий ряд элементов
    reset() Устанавливает внутренний указатель массива на его первый элемент
    rsort() Сортирует индексированный массив в порядке убывания
    shuffle() Перемешивает массив
    sizeof() Алиас count ()
    sort() Сортирует индексированный массив в порядке возрастания
    uasort() Сортирует массив по значениям, используя пользовательскую функцию сравнения
    uksort() Сортирует массив по ключам с помощью пользовательской функции сравнения
    usort() Сортирует массив с использованием пользовательской функции сравнения

     

     

     

  • PHP область видимости переменных

    Область действия переменных

    При использвании переменных в программе на PHP необходимо принимать во внимание область их действия (видимости). Это - тот контекст (блок кода), где их можно использовать.

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

    К этому же контексту отосятся блоки кода, вставленные из других файлов при помощи операторов include и requre.

    Константы (и пользовательские и стандартные PHP) видны во всех контекстах.





    В примере: те переменные, которые определены в области видимости "контекст1", доступны и в коде, нходящемся в файле file1.php и  в фукциях f1(), f2(). 

    Те переменные, которые пределены в областях видимости "контекст2" и "конткст3"  доступны тлько в этих контекстах.






    Суперглобальные переменные

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

    Суперглобальными переменными являются:

    • $GLOBALS — Ссылки на все переменные глобальной области видимости. Ассоциативный массив (array), содержащий ссылки на все переменные глобальной области видимости скрипта, определенные в данный момент. Имена переменных являются ключами массива.
    • $_SERVER — Информация о сервере и среде исполнения. Переменная $_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером.
    • $_GET — GET-переменные HTTP. Ассоциативный массив параметров, переданных скрипту через URL.
    • $_POST  —  POST-переменные HTTP. Ассоциативный массив данных, переданных скрипту через HTTP метод POST.
    • $_FILES  — Переменные файлов, загруженных по HTTP. Ассоциативный массив (array) элементов, загруженных в текущий скрипт через метод HTTP POST.
    • $_REQUEST — Переменные HTTP-запроса. Ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE.
    • $_SESSION -- Переменные сессии. Ассоциативный массив, содержащий переменные сессии, которые доступны для текущего скрипта. 
    • $_ENV  — Переменные окружения. Ассоциативный массив (array) значений, переданных скрипту через переменные окружения. Эти значения импортируются в глобальное пространство имен PHP из системных переменных окружения, в котором запущен парсер PHP.
    • $_COOKIE — HTTP Куки. Ассоциативный массив (array) значений, переданных скрипту через HTTP Куки.


    $_SERVER

    Описание

    Переменная $_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером. Нет гарантии, что каждый веб-сервер предоставит любую из них; сервер может опустить некоторые из них или предоставить другие, не указанные здесь. Тем не менее, многие эти переменные присутствуют в » спецификации CGI/1.1, так что вы можете ожидать их реализации и в конкретном веб-сервере.

    Замечание: До версии PHP 5.4.0, $HTTP_SERVER_VARS содержит ту же начальную информацию, но она не суперглобальная. (Заметьте, что $HTTP_SERVER_VARS и $_SERVER являются разными переменными, так что PHP обрабатывает их соответственно).

    Индексы

    Вы можете найти (а можете и не найти) любой из следующих элементов в массиве $_SERVER. Заметьте, что немногие элементы, если вобще такие найдутся, будут доступны (или действительно будут иметь значение), если PHP запущен в командной строке.

    'PHP_SELF'
    Имя файла скрипта, который сейчас выполняется, относительно корня документов. Например,$_SERVER['PHP_SELF'] в скрипте по адресу http://example.com/foo/bar.php будет /foo/bar.php. Константа __FILE__ содержит полный путь и имя файла текущего (то есть подключенного) файла. Если PHP запущен в командной строке, эта переменная содержит имя скрипта, начиная с PHP 4.3.0. Раньше она была недоступна.
    'argv'
    Массив агрументов, переданных скрипту. Когда скрипт запущен в командой строке, это дает C-подобный доступ к параметрам командной строки. Когда вызывается через метод GET, этот массив будет содержать строку запроса.
    'argc'
    Содержит количество параметров, переданных скрипту (если запуск произведен в командной строке).
    'GATEWAY_INTERFACE'
    Содержит используемую сервером версию спецификации CGI; к примеру'CGI/1.1'.
    'SERVER_ADDR'
    IP адрес сервера, на котором выполняется текущий скрипт.
    'SERVER_NAME'
    Имя хоста, на котором выполняется текущий скрипт. Если скрипт выполняется на виртуальном хосте, здесь будет содержатся имя, определенное для этого виртуального хоста.

    Замечание: Под Apache 2, вы должны выставить UseCanonicalName = On и ServerName. Иначе, это значение отразит имя хоста клиента и может быть подделано. Не безопасно полагаться на это значение в контексте требующем безопасности.

    'SERVER_SOFTWARE'
    Строка идентификации сервера, указанная в заголовках, когда происходит ответ на запрос.
    'SERVER_PROTOCOL'
    Имя и версия информационного протокола, через который была запрошена страница; к примеру 'HTTP/1.0';
    'REQUEST_METHOD'
    Какой метод был использован для запроса страницы; к примеру 'GET', 'HEAD', 'POST', 'PUT'.

    Замечание:

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

    'REQUEST_TIME'
    Временная метка начала запроса. Доступна, начиная с PHP 5.1.0.
    'REQUEST_TIME_FLOAT'
    Временная метка начала запроса с точностью до микросекунд. Доступна, начиная с PHP 5.4.0.
    'QUERY_STRING'
    Строка запросов, если есть, с помощью которой была получена страница.
    'DOCUMENT_ROOT'
    Директория корня документов, в которой выполняется текущий скрипт, в точности та, которая указана в конфигурационном файле сервера.
    'HTTP_ACCEPT'
    Содержимое заголовка Accept: из текущего запроса, если он есть.
    'HTTP_ACCEPT_CHARSET'
    Содержимое заголовка Accept-Charset: из текущего запроса, если он есть. Например: 'iso-8859-1,*,utf-8'.
    'HTTP_ACCEPT_ENCODING'
    Содержимое заголовка Accept-Encoding: из текущего запроса, если он есть. Например: 'gzip'.
    'HTTP_ACCEPT_LANGUAGE'
    Содержимое заголовка Accept-Language: из текущего запроса, если он есть. Например: 'en'.
    'HTTP_CONNECTION'
    Содержимое заголовка Connection: из текущего запроса, если он есть. Например: 'Keep-Alive'.
    'HTTP_HOST'
    Содержимое заголовка Host: из текущего запроса, если он есть.
    'HTTP_REFERER'
    Адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять.
    'HTTP_USER_AGENT'
    Содержимое заголовка User-Agent: из текущего запроса, если он есть. Эта строка содержит обозначение браузера, которым пользователь запросил данную страницу. Типичным примером является строка: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Среди прочего, вы можете использовать это значение с функцией get_browser() чтобы адаптировать вывод вашей страницы к возможностям браузера пользователя
    'HTTPS'
    Принимает непустое значение, если запрос был произведен через протокол HTTPS.

    Замечание: Обратите внимание, что при использовании ISAPI с IIS значение будет off, если запрос не был произведен через протокол HTTPS.

    'REMOTE_ADDR'
    IP-адрес, с которого пользователь просматривает текущую страницу.
    'REMOTE_HOST'
    Удаленный хост, с которого пользователь просматривает текущую страницу. Обратный просмотр DNS базируется на значении переменной REMOTE_ADDR.

    Замечание: Ваш веб-сервер должен быть настроен, чтобы создавать эту переменную. Для примера, в Apache вам необходимо присутствие директивы HostnameLookups On в файле httpd.conf, чтобы эта переменная создавалась. См. также gethostbyaddr().

    'REMOTE_PORT'
    Порт на удаленной машине, который используется для связи с веб-сервером.
    'REMOTE_USER'
    Аутентифицированный пользователь.
    'REDIRECT_REMOTE_USER'
    Аутентифицированный пользователь, если запрос был перенаправлен изнутри.
    'SCRIPT_FILENAME'

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

    Замечание:

    Если скрипт запускается в коммандной строке (CLI), используя относительный путь, такой как file.php или ../file.php, переменная $_SERVER['SCRIPT_FILENAME'] будет содержать относительный путь, указанный пользователем.

    'SERVER_ADMIN'
    Эта переменная получает свое значение (для Apache) из директивы конфигурационного файла сервера. Если скрипт запущен на виртуальном хосте, это будет значение, определенное для данного виртуального хоста.
    'SERVER_PORT'
    Порт на компьютере сервера, используемый веб-сервером для соединения. Для установок по умолчанию, значение будет '80'; используя SLL, например, это значение будет таким, какое сконфигурировано для соединений безопасного HTTP.

    Замечание: Чтобы получить физический (реальный) порт в Apache 2, необходимо установить UseCanonicalName = On иUseCanonicalPhysicalPort = On, иначе это значение может быть подменено и не вернуть реальной значение физического порта. Полагаться на это значение небезопасно в контексте приложений, требующих усиленной безопасности.

    'SERVER_SIGNATURE'
    Строка, содержащая версию сервера и имя виртуального хоста, которые добавляются к генерируемым сервером страницам, если включено.
    'PATH_TRANSLATED'
    Filesystem- (not document root-) based path to the current script, after the server has done any virtual-to-real mapping.

    Замечание: Начиная с PHP 4.3.2, переменная PATH_TRANSLATED больше не устанавливается неявно в Apache 2 SAPI, по сравнению с Apache версии 1, где она устанавливается в то же самое значение, что и переменная SCRIPT_FILENAME, когда она не используется Apache. Это изменение было сделано для соответствия спецификации CGI, где переменная PATH_TRANSLATEDдолжна существовать только тогда, когда PATH_INFO определена. Пользователи Apache 2 могут использовать директивуAcceptPathInfo = On в конфигурационном файле httpd.conf для задания переменной PATH_INFO.

    'SCRIPT_NAME'
    Содержит путь, к текущему исполняемому скрипту. Это полезно для страниц, которые должны указывать на самих себя. Константа __FILE__ содержит полный путь и имя текущего (т.е. включаемого) файла.
    'REQUEST_URI'
    URI, который был передан для того, чтобы получить доступ к этой странице. Например, '/index.html'.
    'PHP_AUTH_DIGEST'
    При выполнении HTTP Digest аутентификации, этой переменной присваивается заголовок 'Authorization', который присылается клиентом (его необходимо потом использовать для соответствующей валидации).
    'PHP_AUTH_USER'
    Когда выполняется HTTP-аутентификация, этой переменной присваивается имя пользователя, предоставленное пользователем.
    'PHP_AUTH_PW'
    Когда выполняется HTTP-аутентификация, этой переменной присваивается пароль, предоставленный пользователем.
    'AUTH_TYPE'
    Когда выполняется HTTP-аутентификация, этой переменной присваивается тип аутентификации, который используется.
    'PATH_INFO'
    Содержит любой предоставленный пользователем путь, содержащийся после имени скрипта, но до строки запроса, если доступно. Например, если текущий скрипт запрошен по URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, то переменная $_SERVER['PATH_INFO'] будет содержать /some/stuff.
    'ORIG_PATH_INFO'
    Исходное значение переменной 'PATH_INFO' до начала обработки PHP.





  • PHP ООП

    PHP объектно-ориентированое рограммирование

    Основные понятия

    Классы

    Класс - это шаблон для объектов. Класс объединяет данные и функции, которые работают с данными, в одной структуре. Это блок кода, который описывает:

    • типы данных, которые будут храниться в объектах, созданных из класса,
    • функции, которые будут содержать эти объекты.

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

    Когда создаётся объектно-ориентированное приложение, обычно создаете один или несколько классов, представляющих различные типы объектов в приложении. Например, если вы пишете приложение для форума, вы можете создавать классы под названием «Форум», «Тема», «Почта» и «Участник».

    Объекты

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

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

    Объект же подобен реальному автомобилю, созданному из чертежа. Он имеет реальные свойства (например: красный цвет), и реальные методы использования (например: «ускорить» и «тормозить»).

    Объект реальная реализация класса (class instance).

    Свойства

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


    Методы

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

    Однако методы объекта обычно работают в основном со свойствами объекта. Например, метод login () для регистрации участника на форумах может установить для свойства loggedIn элемента значение true.

    Основы работы с классами и объектами в PHP

    Описание класса

    Описание класса начинается с ключевого слова class, затем следует имя класса, и блок операторов, заключённый в фигурные скобки. Он включает в себе определение свойств и методов этого класса.

    Пример:

    // Defining PHP Classes class Books { /* Member variables */ var $price; var $title; /* Member functions */ function setPrice($par){ $this->price = $par; } function getPrice(){ echo $this->price ."
    "; } function setTitle($par){ $this->title = $par; } function getTitle(){ echo $this->title ."
    "; } } // Creating Objects in PHP $physics = new Books; $maths = new Books; $chemistry = new Books;

    Псевдопеременная $this используется для ссылки на сам класс.

    Запись $this->price - это обращение к переменной $price, описанной в этом классе.


    Создание объекта

    Пример создания трёх разных объектов из этого класса.

    $physics = new Books; $maths = new Books; $chemistry = new Books;

    Вызов объекта

    Задание свойства price объекта $maths

    $maths->price = 44;

    Такой же эффект будет от вызова метода setPrice объекта $maths

    $maths->setPrice( 44 );

    Вызов метода setTitle объекта $physics

    $physics->setTitle( "Physics for High School" );


    Конструкторы и деструкторы классов

    PHP позволяет использовать специальные типы методов: конструктор класса и деструктор класса.

    Конструктор класса (метод __construct()) выполняется при инициализации объекта. Этот метод может выделить объекту некоторые ресурсы.

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

    Например:

    <?php class Session { protected $data = array(); public function __construct() { // загрузка данных из базы данных } // get and set functions public function __destruct() { // запись данных в базу данных } };


    Область видимости

    Для свойств и методов класса PHP позволяет определять область видимости (public, protected или private).

    Например:

    private $private = 'Private';

    или

    public function MyPublic() { }

    public

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

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

    protected

    Эти свойства и методы доступны только внутри класса или дочерних классов.

    private

    Эти свойства и методы доступны исключительно в этом классе.

    Наследование

    Наследование классов - это возможность создавать новые (дочерние) классы на основании существующих. Дочерний класс при этом получает все свойства и методы родителя.

    Дочерний класс может также описать новые свойства и методы в дополнение к полученнм от родителя.

    Пример:

    <?php class Foo { public function printItem($string) { echo 'Foo: ' . $string . PHP_EOL; } public function printPHP() { echo 'PHP is great.' . PHP_EOL; } } class Bar extends Foo { public function printItem($string) { echo 'Bar: ' . $string . PHP_EOL; } } $foo = new Foo(); $bar = new Bar(); $foo->printItem('baz'); // Output: 'Foo: baz' $foo->printPHP(); // Output: 'PHP is great' $bar->printItem('baz'); // Output: 'Bar: baz' $bar->printPHP(); // Output: 'PHP is great' ?>







  • PHP операторы

    Операторы языка PHP

    • Арифметические операторы (Arithmetic Operators)
    • Операторы сравнения (Comparison Operators)
    • Логические операторы (Logical Operators
    • Операторы присваивания (Assignment Operators)
    • Условные операторы (Conditional Operators)


    Арифметические операторы

    (Переменная A имеет значение 10, а B - 20)

    Оператор Описание Пример
    + сложение A + B , результат: 30
    - вычитание A - B , результат: 10
    * умножение A * B , результат: 200
    / деление B / A , результат: 2
    % деление по модулю (остаток) B % A , результат: 0
    ++ инкремент (увеличение операнда значения на 1) A++ , результат: 11
    -- декремент (уменьшение  на 1) A-- , результат: 9


    Операторы сравнения

    (Переменная A имеет значение 10, а B - 20)

    Оператор Описание Пример
    == true, если значения одинаковы (A == B) , результат: false
    ===true, если и значения и типы операндов одинаковы

    !=false , если значения одинаковы. (A != B) , результат: true.
    > true, если первое значение больше второго (A > B) , результат: false
    < true, если первое значение мньше второго (A < B) , результат: true.
    >= true, если первое значение больше или равно второму (A >= B) , результат: false
    <= true, если первое значение меньше или равно второму (A <= B) , результат: true.


    Логические операторы

    Для понимания логических операторов нужно иметь представление о логических (boolean) переменных и выражениях. Логическая переменная может иметь только 2 значения: истина (1, true ) или ложь (0, false). Логические выражения составляются из логических операторов и лоических переменных.

    Логические операторы имеют дело с логическими выражениями. Логические выражения (boolean expressions) могут принимать значения true, истина (логическая 1) или false, ложь (логический 0).

    В таблице ниже -  переменная A имеет значение true , а B - false.

    Оператор Описание Пример
    and Логическое И (and, или логическое умножение). Значение true , если оба операнда true  (A and B) , результат: false.
    or Логическое ИЛИ  (or, или логическое сложение). Значение true , если хотя бы один из операндов -  true (A or B) , результат: true.
    xor 
    Исключающее ИЛИ. Принимает значение true, если один из операндов true, но - не оба одновременно(A or B) , результат: true.
    && Логическое И (and, или логическое умножение). Значение true , если оба операнда true (A && B) , результат: true.
    || Логическое ИЛИ (or, или логическое сложение). Значение true , если хотя бы один из операндов - true (A || B) , результат: true.
    ! Логическое НЕ (not или логическое отрицание). Значение true, если оперант - false и значение false, если операнд - true  !(A && B) , результат: false.

    Обычно логические операторы, логические выражения описываются посредством таблицы истинности (truth table). В такой таблице приводятся значения выражения при всех возможных вариантах, сочитаниях значений аргументов.

    Примеры таблиц истинности (где T - truth, F - false):

    Логическое умножение - AND

    A B A & B
    T T T
    T F F
    F T F
    F F F

    Логическое сложение - OR

    A B A | B
    T T T
    T F T
    F T T
    F F F


    Операторы присваивания

    (Переменная A имеет значение 10, а B - 20)

    Оператор Описание Пример
    = Присваивание: значение правого операнда присваивается левому операнду. C = A + B присваивает переменной С значение выражения A + B
    += Сложение с присваиванием. Складывает значения левого и правого операнда, затем результат присваивается левому. C += A эквивалент операции: C = C + A
    -= Вычитание с присваиванием. Вычитает значение правого операнда из значения левого, затем результат присваивается левому. C -= A эквивалент операции: C = C - A
    *= Умножение с присваиванием. Перемножает значения левого и правого операнда, затем результат присваивается левому. C *= A эквивалент операции: C = C * A
    /= Деление с присваиванием. Делит значение левого операнда на значение правого, затем результат присваивается левому. C /= A эквивалент операции: C = C / A
    %= Деление по модулю с присваиванием. Делит значение левого операнда на значение правого, затем остаток от деления присваивается левому. C %= A эквивалент операции: C = C % A


    Условные операторы

    Условные операторы оценивают (evaluate) значение некоторого логического выражения, результат: истина (true) или ложь (false). В зависимости от этого выполняется та или иная ветвь программы.


    Оператор Описание Синтаксис
    ? : Условный оператор ЛогическоеВыражение ? Выполнить в случае true : Выполнить в случае false


    Приоритеты операторов PHP

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

    Например в выражении x = 7 + 3 * 2; Сперва переменной x присваивается значение 13, так как оператор * имеет больший приоритет, чем +, поэтому сначала выполняется умножение

    Далее - операторы упорядочены по приоритетам, причём операторы с большим приоритетом расположены вверху таблицы. Внутри выражения сперва оцениваются результаты операторов с высшим приоритетом

    Оператор Последовательнось выполнения
    ! ++ -- Справа налево
    * / % Слева направо
    + - Слева направо
    < <= > >= Слева направо
    == != Слева направо
    && Слева направо
    || Слева направо
    ?: Справа налево
    = += -= *= /= %= Справа налево


     

    Записаться на курс

     

    * По материалам сайтов:
    www.w3schools.com
    www.tutorialspoint.com

     

     

     

  • PHP печать

    Вывод из программы на PHP*

    Чаще всего результат работы программы на PHP выводится при помощи команды: echo() или функции: print().

    Пример:

    <?php $var1 = "Строковая переменная"; $var2 = 99.65; $var3 = -76.98; echo "var1: $var1 <br>","var2: $var2 <br>", "var3: $var3 <br>"; ?>

    Результат:

    var1: Строковая переменная
    var2: 99.65
    var3: -76.98

    При отладке программы часто используются функции: var_dump() и print_r().

    Пример:

    <?php $var1 = "Строковая переменная"; $ar1 = [1,2,3,4,5,6]; $ar2 = [1,[11,12,13,14],3,4,5,6]; print_r ($var1); echo "<br>"; print_r ($ar1); echo "<br>"; print_r ($ar2); echo "<br>"; var_dump ($ar1); echo "<br>"; var_dump ($ar2); echo "<br>"; ?>


    Результат:

    Строковая переменная Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) Array ( [0] => 1 [1] => Array ( [0] => 11 [1] => 12 [2] => 13 [3] => 14 ) [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) F:\Lessons\Tests\PHP\PHP_05-2output.php:11: array (size=6) 0 => int 1 1 => int 2 2 => int 3 3 => int 4 4 => int 5 5 => int 6 F:\Lessons\Tests\PHP\PHP_05-2output.php:13: array (size=6) 0 => int 1 1 => array (size=4) 0 => int 11 1 => int 12 2 => int 13 3 => int 14 2 => int 3 3 => int 4 4 => int 5 5 => int 6

    Форматируемый вывод

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

    Это, например, функции:  printf(), vprintf(), vsprintf(), fprintf(), vfprintf().

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

    Например: sprintf(format,arg1,arg2,arg++).


    Спецификаторы формата

    Строка формата состоит из:

    • обычных символов (за исключением %), которые копируются напрямую в результирующую строку, и
    • спецификаторов формата.

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

    sprintf(), printf()

    Каждый спецификатор формата (описатель преобразования, форматирования) начинается со знака процент (%), за которым следует один или более дополнительных элементов . Структура строки - спецификатора формата:

    %[num][sign][padding][alignment][width][.precision]type

    где:

    1. num - необязательный номер аргумента, который должен форматироваться этим спецификатором формата. Если номер не указан, то аргументы форматируются спецификаторами формата в порядке их следования
    2. sign - необязательный описатель знака, указывающий как использовать знак (- или +) в префиксе числа. По умолчанию, используется только знак минус, если число отрицательное. Использование знака "+" приводит к печати знака плюс перед положительными числами
    3. padding - необязательный символ-заполнитель, который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0. По умолчанию используется пробел. Альтернативный символ может быть указан с помощью одиночной кавычки (')
    4. alignment - необязательный описатель выравнивания, определяющий выравнивание по левой или правой границе. По умолчанию выравнивается вправо, - используется для выравнивания влево
    5. width - необязательное число, описатель ширины, определяющий минимальное число символов, которое будет содержать результат преобразования
    6. precision - необязательный описатель точности, указанный в виде точки (.), после которой следует необязательная строка из десятичных чисел, определяющая, сколько десятичных разрядов отображать для чисел с плавающей точкой. При использовании со строками этот описатель выступает в роли обрезающей точки, устанавливающей максимальный лимит символов. Также между точкой и цифрой можно указать символ, используемый при дополнении числа
    7. type - Описатель типа, определяющий, как интерпретировать тип данных форматируемой переменной.

      Допустимые типы:

      • % - символ процента. Аргумент не используется.
      • b - аргумент трактуется как целое и выводится в виде двоичного числа.
      • c - аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
      • d - аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
      • e - аргумент трактуется как число в в научной нотации (например, 1.2e+2). Описатель точности указывает на количество знаков после запятой, начиная с версии PHP 5.2.1. В более ранних версиях он обозначал количество значащих цифр (на один знак меньше).
      • E - аналогично %e, но использует заглавную букву (например, 1.2E+2).
      • f - аргумент трактуется как число с плавающей точкой и также выводится в зависимости от локали.
      • F - аргумент трактуется как число с плавающей точкой и также выводится, но без зависимости от локали. Доступно, начиная с версии PHP 5.0.3.
      • g - выбирает самую краткую запись из %e и %f.
      • G - выбирает самую краткую запись из %E и %f.
      • o - аргумент трактуется как целое и выводится в виде восьмеричного числа.
      • s - аргумент трактуется как строка.
      • u - аргумент трактуется как целое и выводится в виде десятичного числа без знака.
      • x - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в нижнем регистре).
      • X - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в верхнем регистре).

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

      Преобразование типов
      Тип Спецификатор
      string s
      integer ducoxXb
      double gGeEfF

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

      Пример:

      <?php $var1 = "Строковая переменная"; $var2 = 99.65; $var3 = -76.98; var_dump ($var1); var_dump ($var2); var_dump ($var3); echo ("Примеры использования функции printf()<br>"); printf("var1: %s <br>",$var1); printf("var2: %f <br>",$var2); printf("var2: %.0f <br>var3: %.5f <br><br> ",$var2,$var3); printf("%%b = %08b <br>",$var2); // Binary number - 8 symbols, emty fields filled with 0 printf("%%d = %d <br>",$var2); // Signed decimal number printf("%%d = %d <br>",$var2); // Signed decimal number printf("%%e = %e <br>",$var2); // Scientific notation (lowercase) printf("%%E = %E <br>",$var2); // Scientific notation (uppercase) printf("%%u = %u <br>",$var2); // Unsigned decimal number (positive) printf("%%u = %u <br>",$var2); // Unsigned decimal number (negative) printf("%%f = %f <br>",$var2); // Floating-point number (local settings aware) printf("%%F = %F <br>",$var2); // Floating-point number (not local settings aware) printf("%%g = %g <br>",$var2); // Shorter of %e and %f printf("%%G = %G <br>",$var2); // Shorter of %E and %f printf("%%o = %o <br>",$var2); // Octal number printf("%%s = %s <br>",$var2); // String printf("%%x = %x <br>","10"); // Hexadecimal number (lowercase) printf("%%X = %X <br>","15"); // Hexadecimal number (uppercase) printf("%%+d = %+d <br>",$var2); // Sign specifier (positive) ?>

      Результат:

      F:\Lessons\Tests\PHP\PHP_05-3output.php:5:string 'Строковая переменная' (length=39) F:\Lessons\Tests\PHP\PHP_05-3output.php:6:float 99.65 F:\Lessons\Tests\PHP\PHP_05-3output.php:7:float -76.98 Примеры использования функции printf() var1: Строковая переменная var2: 99.650000 var2: 100 var3: -76.98000 %b = 01100011 %d = 99 %d = 99 %e = 9.965000e+1 %E = 9.965000E+1 %u = 99 %u = 99 %f = 99.650000 %F = 99.650000 %g = 99.65 %G = 99.65 %o = 143 %s = 99.65 %x = a %X = F %+d = +99


      Пример:

      <?php echo "Символ-заполнитель для строки - * <br>"; $card = '4025888888881881'; printf("Номер Вашей кредитной карты: %'*16s", substr($card, -4)); echo "<br><br>Изменение порядка параметров"; $var1 = -11.98; $var2 = -22.98; $format = '<br> var1 %d, var2 %f'; echo "<br><br>Строка format:". $format ; echo sprintf($format, $var1, $var2); $format = '<br> var2 %2$d, var1 %1$f'; echo "<br><br>Строка format:". $format ; echo sprintf($format, $var1, $var2); ?>


      Результат:

      Символ-заполнитель для строки - * Номер Вашей кредитной карты: ************1881 Изменение порядка параметров Строка format: var1 %d, var2 %f var1 -11, var2 -22.980000 Строка format: var2 %2$d, var1 %1$f var2 -22, var1 -11.980000



    8. PHP почта (E-Mail)

      Электронная почта (E-Mail) в PHP

      Функция mail()

      Самый простой способ посылать почту из программы на PHP - функция mail().

      Аргументы функции:

      mail ( $to , $subject , $message [, $additional_headers [, $additional_parameters ]] )

      Пример:

      <?php $to = Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.'; $subject = 'the subject'; $message = 'hello'; $headers = 'From: Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.' . "\r\n" . 'Reply-To: Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); ?>

      Но использование этой функции не всегда удобно и надёжно. Часто удобнее использовать другие билиотеки или классы для работы с электронной почтой из PHP.

      Есть целый ряд готовых популярных, проверенных решений, которые упрощают задачу работы с электронной почтой из PHP и дают программисту дополнительные возможности. Например: PHPMailer, SwiftMailer, Zend_Mail, eZcomponents и др..

      PHPMailer

      PHPMailer - полнофункциональный PHP - класс, который выполняет все необходимые задачи по подготовке и рассылке сообщений по электронной почте. В том числе и с использованием SMTP и кодирования сообщений.

      Основные зарактеристики:

      • самый популярный способ для отправки электронной почты в PHP
      • используется многими проектами с открытым исходным кодом: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomlaи др.
      • интегрированная поддержка SMTP - отправка без локального почтового сервера
      • возможность отправлять электронные письма с несколькими TO, CC, BCC и REPLY-TO
      • многостраничные / альтернативные электронные письма для почтовых клиентов, которые не читают HTML-адрес электронной почты
      • поддержка разных кодировок: UTF-8, 8-битных, base64, двоичных и др
      • аутентификация SMTP с помощью механизмов LOGIN, PLAIN, NTLM, CRAM-MD5 и Google XOAUTH2 через SSL и TLS-транспорт
      • сообщения об ошибках на 47 языках (в том числе Русский, Иврит)
      • поддержка подписей DKIM и S / MIME
      • совместимость с PHP 5.0 и более поздними версиями

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

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

      Функция PHP mail() обычно использует локальный почтовый сервер, как правило, с помощью бинарного файла sendmail на платформах Linux, BSD и OS X, однако Windows обычно не включает локальный почтовый сервер. Встроенная в PHPMailer SMTP-поддержка  позволяет отправлять электронную почту на любых платформах ( в том числе: Windows) без локального почтового сервера.

      Пример:
      <?php header('Content-Type: text/html; charset=utf-8'); require 'PHPMailer-master/PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->CharSet = 'UTF-8'; // Кодировка сообщения $mail->isSMTP(); // Использовать SMTP $mail->Host = 'smtp.test.com'; // SMTP сервер $mail->SMTPAuth = true; // Использовать SMTP регистрацию $mail->Username = Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.'; // SMTP пользователь $mail->Password = 'password'; // SMTP пароль $mail->SMTPSecure = 'ssl'; // Разрешить кодировку: ssl или tls $mail->Port = 465; // TCP порт $mail->setFrom(Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.', 'Тестировщик почты'); $mail->addReplyTo(Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.', 'Тестировщик почты'); $mail->addAddress(Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.', 'User'); // Получатель $mail->isHTML(true); // Посылать в формате HTML $mail->Body = 'Текст сообщения'; if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; } ?>



    9. PHP программирование

      Программирование на языке PHP

      Введение

      PHP - язык программирования, разработанный специально для Web. Это так называемый интерпретируемый (скриптовый язык). Интерпретатор языка PHP, который выполняется на сервере, последовательно читает и выполняет инструкции PHP, найденные в файле.

      Язык PHP был задуман в 1994 году и первоначально был работой одного человека - Расмуса Лердорфа. Он был принят другими разработчиками и постоянно совершенствуется, предоставляя нам многофункциональный язык программирования, который мы видим сегодня.

      Количество установок PHP постоянно растёт. Это наглядно демонстрируется на сайте http://php.net/usage.php

      PHP - проект с открытым исходным кодом (open source), это означает, что у вас есть доступ к исходному коду и легально можно использовать, изменять и распространять его бесплатно.

      Первоначально акроним PHP означал: Personal Home Page, но был изменен позднее, в соответствии с GNU - соглашением об именах (GNU = Gnu's Not Unix) и теперь означает: Hypertext Preprocessor. 

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

      Когда браузер пользователя (например - Chrome, IE, Opera,...) запрашивает по определённому адресу (URL = Universe Resource Locator) нужную WEB-страничку, этот запрос (HTTP request) получает WEB-сервер, на котором эта страничка физически находится (например - WEB-сервер Apache, IIS,... ).

      Протокол HTTP Сервер (WEB server) берёт эту страничку со своего жёсткого диска и, в соответствиями с найденными в ней директивами, формирует ответ (HTTP response ) и посылает этот ответ запросившему клиенту (WEB client).


      WEB страничка в своём тексте может содержать различную информацию (HTML код, программы на языке PHP и тд). До отправки странички клиенту (браузеру) WEB сервер выполняет найденный в ней PHP код (оставляя без изменения весь текст, который находится вне PHP - тегов (HTML, JavaScript, ), модифицирует страничку по результатам работы этого кода и уже модифицированную версию отправляет браузеру.

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

      Что такое PHP-файл

      • PHP - файл - это текстовый файл (предпочтительно - в кодировке utf-8)
      • PHP-файлы могут содержать текст, HTML, CSS, JavaScript и PHP-код
      • PHP-код, найденный в исходном файле, выполняется на сервере
      • Файлы PHP имеют расширение «.php»

      Что может делать PHP

      • PHP может генерировать динамическое содержимое страницы
      • PHP может создавать, открывать, читать, записывать, удалять и закрывать файлы на сервере
      • PHP может собирать данные формы
      • PHP может отправлять и получать файлы cookie
      • PHP может добавлять, удалять и изменять данные в вашей базе данных
      • PHP может использоваться для управления доступом пользователей
      • PHP может шифровать данные
      • С PHP вы не ограничены выводом HTML. Вы можете выводить изображения, PDF-файлы и даже флеш-ролики.
      • Вы также можете выводить любой текст, такой как XHTML и XML.

      Почему часто разработчики выбирают именно PHP

      • PHP работает на различных платформах (Windows, Linux, Unix, Mac OS X и т. Д.).
      • PHP совместим практически со всеми используемыми сегодня серверами (Apache, IIS и т. Д.)
      • PHP поддерживает широкий спектр баз данных
      • PHP является бесплатным.
      • PHP легко изучается и эффективно работает на сервере

      Установка, конфигурация сервера

      Для начала работы над проектами на языке PHP необходим определённый набор программного обеспечения. Нужен WEB сервер (например: для компьютеров под управление Windows - IIS или Apache, для Linux - компьютеров - сервер Apache). На сервере необходим язык PHP. Для большинства проектов нуже сервер управления базами данных (например: MySQL). Для написания и отладки PHP-программ часто используется программы - IDE (Integrated Developer Environment ;- интегрированная среда разработчика)

      Для начинающих разработчиков, не имеющих опыта в адимистрировании WEB серверов, часто удобнее использовать готовые решения в виде сборки (bundle), которые устанавливаются на локальный компьютер с минимальными требованиями к ресурсам самого компьютера и к административным навыкам пользователя.

      Популярные сборки, например: AMPPS - server, WAMP server .

      Эти сборки есть для всех версий ОС на локальном компьютере (Windows, Mac, Linux, 32-bit, 64-bit,...). Они включают в себя не только собственно язык PHP, но и WEB server, другие необходимые разработчику сервисы, как например сервер баз данных MySQL.

      Для отладки, разработки программ можно использовать, например, Microsoft Visual Studio Code, NotePad++ с различными плагинами, расширениями для программирования на HTML, CSS, JavaScript, PHP.

      Можно скачать на свой компьютер только интерпретатор языка PHP Current Stable PHP version, тогда простой сервер для отладки, тестирования PHP - скриптов можно запустить командой:

      php -S localhost:4000


      Установка VS Code - Windows



      Установка WAMP - Windows




      Программа на PHP

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

      WEB сервер, открыв этот файл, запускает для его анализа интерпретатор языка PHP. Интерпретатор языка игнорирует всё, кроме директив языка PHP. После этого он формирует новую WEB страничку. Все блоки PHP кода заменяются на результат работы PHP, а остальные части исходной странички остаются неизменными.

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

      В исходном текстовом файле программа PHP выделяется тегами PHP -

      текст, HTML, CSS, JavaScript

      <?php

      программа1 на языке PHP

      ?>

      текст, HTML, CSS, JavaScript

      <?php программа2 на языке PHP ?> текст, HTML, CSS, JavaScript


      Может вставляться внутрь HTML тега

      <h1 style="color:#0000<?php echo 'FF' ?>"> Текст синего цвета </h1>


      Может вставляться в код страницы в зависимости от результата работы операторов if, for. Пример ниже проверяет значение переменной $var1  и по результату проверки вставляет разные блоки кода.

      <?php if ($var1 == true): ?> Код, который выполнится в том случае, если значение переменной $var1 - истина. <?php else: ?> Код, который выполнится в противном случае <?php endif; ?>
      <?php for ($i=0; $i<5; $i++): ?> <h2>HTML text to repeat</h2> <?php echo $i; ?> <?php endfor; ?>



      Запуск, тестирование PHP скрипта

      С командной строки

      (cmd - Windows,  Terminal - linux). Далее - для Windows.

      • cкачать PHP по ссылке https://www.php.net/downloads.php
      • разархивировать (например - в папку c:\php)
      • добавить папку c:\php в пути поиска Windows
      • создать папку для PHP сервера - например: c:\PHPServer1 
      • запустить Windows command prompt - cmd
      • перейти в папку сервера: cd c:\PHPServer1
      • запустить WEB сервер, используя текущую папку как document root: php -S localhost:4000
      • создать в папке c:\PHPServer1 текстовый файл index.php с текстом: <?php echo "My first PHP project"; ?>
      • открыть страничку сервера в браузере (http://localhost:4000/)



      WAMP server bundle

      Скачать, установить, запустить WAMP.

      Создать виртуальный хост

      Создать в корневом каталоге этого хоста index.php

      Открыть страничку этого сервера в браузере.


      VS code

      Установить Microsoft VS Code

      Установить PHP server extension

      Создать index.php и запустить с помощью PHP server




      Основные понятия. Cинтаксис языка PHP

      Программа на языке PHP состоит из набора допустимых предложений языка(statements), разделённых символом: ";".

      • Statement, Instruction
      • Expression, Evaluation
      • Operator
      • Variable, Constant, Literal
      • Token

      Подробнее


      Использование текстовых комментариев в языке PHP

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

      // комментарий - одна строка /* Комментарии : несколько строк */ echo "My script" ; // комментарий - в конце оператора языка
      <?php
      /*echo "Это тест"; /* Этот комментарий вызовет проблему */
      */
      ?>


      Массивы

      Массив (Array) можно представить как целый набор переменных разного типа, объединённых под одним идентификатором. PHP поддерживает массивы разного типа.

      • Массивы с цифровыми индексам
      • Ассоциативные массивы
      • Многомерные массивы

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

      Подробнее


      Вывод (печать) из программы на PHP

      Подробнее


      Условные операторы

      Условные операторы. Ветвления. if, else, elseif, switch.

      Подробнее


      Циклы (loops)

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

      • Циклы while, do... while
      • Циклы for, foreach
      • Операторы break, continue

      Подробнее


      Функции в языке PHP (function)

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

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

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

      Функция может возвращать в вызываемую программу некоторое значение через своё имя.

      Работа с функциями состоит из 2-х этапов:

      • создать, определить функцию (define function)
      • вызвать функцию (call function)

      Подробнее


      Строковые переменные

      Декларация текстовых (строковых переменных). Разделители строк. Интерпретация строк. Функции PHP для работы со строковыми переменными.

      Подробнее


      Область видимости переменных

      Пространство имён (namespace)

      Область видимости переменных. Пространство имён.

      Подробнее


      Работа с датами

      Функции PHP для работы с датами, временем.

      Подробнее


      Запросы HTTP

      Запросы HTTP, параметры URL, формы HTML. Методы: get, post. $_POST, $_GET

      Подробнее


      Регулярные выражения (Regular expressions)

      Подробнее


      Фильтры

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

      Существует два основных типа фильтрации: проверка и очистка.

      Проверка используется для определения соответствия данных определённым критериям. Например, применение FILTER_VALIDATE_EMAIL позволяет проверить, являются ли введённые данные адресом email,, сами данные при этом останутся нетронутыми.

      Подробнее


      Работа с формами в PHP

      Большую роль в WEB - программировании играет передача данных через сайт на сервер и обработка этих данных.

      Эту роль выполняют формы (forms). Форма собирает введённые посетителем сайта данные (они ввдятся при помощи специальных полей ввода) и передаёт их программе-обработчику на сервер.

      Работу с формами можно разделить на два этапа:

      1. создать HTML-форму
      2. написать PHP-программу для обработки данных формы.

      Например:

      <form action="prog.php" method="post"> Введите имя: <input type="text" name="nam"> <input type="submit"> </form>

      В этом примере в окне браузера нарисуется форма с одним полем ввода и кнопкой "SUBMIT"

      При нажатии на эту кнопку, форма возьмёт данные, введённые в поле ввода (input type="text"), создаст в глобальной PHP-переменной $_POST (так как атрибут method тега form имеет значение "post") элемент массива с индексом nam (так как атрибут name тега input имеет значение "nam") и присвоит этому элементу введённое в поле значение. После этого форма вызовет PHP-программу из файла с именем prog.php (так как action="prog.php").

      Вызванной программе доступны все глобальные переменные, в том числе - массив $_POST и его элемент $_POST['nam'] , в котором и находится переданное формой значение.

      Подробнее


      Работа с файлами

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

      Из программы на PHP можно работать с файлами и папками на диске сервера.

      Подробнее


      Куки (Cookies)

      HTTP Cookies - это механизм хранения данных браузером компьютера клиента.

      PHP содержит ряд функций для работы с cookies.

      Подробнее


      Контроль сеанса связи (Sessions)

      Sessions в PHP предназначены для созранения на сервере информации о сеансе связи с браузером клиента. Похоже на cookie, но информация зранится не на компьютере клиента, а на сервере.

      Подробнее


      Работа с электронной почтой (E-Mail)

      Самый простой способ посылать почту из программы на PHP - функцмя mail().

      Пример:

      <?php $to = Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.'; $subject = 'the subject'; $message = 'hello'; $headers = 'From: Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.' . "\r\n" . 'Reply-To: Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); ?>

      Но использование этой функции не всегда удобно и надёжно. Часто удобнее использовать другие билиотеки или классы для работы с электронной почтой из PHP.

      Подробнее

      OOП на PHP

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

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

      Второй подход - объектно-ориентированное (Object Oriented) программирование. В этом случае внимание разработчика в первую очередь сосредоточено на функциональных блоках программы- объектах и их взаимодействии. 

      При использовании ООП сначала создаётся класс (шаблон для объекта). Класс отражает необходимый функционал для будущих объектов: 

      описывает данные, которые объект сможет использовать - свойства  (properties), 

      возможные способы манипулирования будущим объектом - методы (methods). 

      Далее по этому шаблону (class) в программе создаются объекты. Каждый из этих объектов может использовать те свойства и методы, которые класс описал.

      Например, если программа должна использовать электронную почту, то логично создать класс, имеющий свойства: ИМЯ_ПОЛУЧАТЕЛЯ, ИМЯ_ОТПРАВИТЕЛЯ, ТЕКСТ_СООБЩЕНИЯ и методы ПОСЛАТЬ_ПОЧТУ.

      Объектно-ориентированное программирование во многих случаях упрощает создание программ со сложными логическими структурами. Такой подход позволяет больше абстагироваться от техники программирования и сосредоточиться на логика программы.

      Подробнее


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

      База данных представляет собой структурированную систему храниения и управления данными. Каждая база данных поддерживает один или несколько интерфейсов (API) для разных языков программирования, в том числе - для PHP. Эти библиотеки API предназначены для создания баз данных, доступа к ним, управления, поиска и репликации данных.

      Для хранения данных могут быть использованы и другие способы. Например: файлы в файловой системе, таблицы в памяти.  Но база данных предоставляет несравнимо больше возможностей для надёжной, быстрой и эффективной выборки и обработки больших массивов данных.

      В настоящее время наиболее часто для хранения и управления больщими массивами информации используются реляционные системы управления базами данных (RDBMS Relational Database Management System). Все данные хранятся в разных таблицах и отношения между ними устанавливаются с использованием различного типа ключей.

      MySQL - популярная система управления базами данных. Практически все языки программирования поддерживают API для работы с MySQL. 

      Самое популярное сочетание для WEB разработок - это язык программирования PHP и MySQL в качестве системы управления базами данных.

      MySQL использует стандартные запросы языка SQL (Structured Query Language  queries) для манипуляций с данными.


      Подробнее



      PHP и AJAX

      Основы.

      Client Side HTML file

      Server Side PHP file

      Подробнее




    10. PHP работа с файлами

      Работа с файлами PHP

      Включение внешних файлов

      В каждый PHP-документ можно включить дополнительный файл с помощью инструкций:

      • include (имя файла);
      • include_once (имя файла) 
      • require (имя файла);
      • require_once (имя файла);

      Инструкции include выдают сообщение типа warning, если не находят файл, инструкции require - фатальную ошибку.

      Инструкции include_once и require_once не позволяют включать файл дважды (перед включением файла инструкция проверяет, включался ли он ранее.

      Содержимое включаемого файла обрабатывается как простой HTML-текст. Для того, чтобы содержимое этого файла обрабатывалось как PHP-программа, нужно обрамлять его открывающим и закрывающим тегами PHP.

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

      Пример:

      Файл1

      <?php echo ("<br>"); echo ("Php code from file: " . __FILE__); echo ("<br>"); echo ('<br>include ("prog2.php") - PHP code'); echo ("<br>"); include ("prog2.php"); echo ("<br>"); echo ('<br>include ("prog3.php") - TEXT'); echo ("<br>"); include ("prog3.php"); ?>

      Файл2

      <?php echo ("<br>"); echo ("Php code from file: " . __FILE__); echo ("<br>"); ?>

      Файл3

      echo ("<br>"); echo ("Php code from file: " . __FILE__); echo ("<br>");


      Выполняем PHP программу из первого файла. Она включает содержимое 2-х дополнительных файлов. Причём при включении файла 2 выполняется PHP программа, которая в нём находмися. А при включении файла 3 его содержимое будет вставлено как обычный текст.

      Результат в окне браузера:

      <br>Php code from file: F:\Lessons\myTutorials\PHP\PHP_18-1Files\prog1.php<br><br>include ("prog2.php") - PHP code<br><br>Php code from file: F:\Lessons\myTutorials\PHP\PHP_18-1Files\prog2.php<br><br><br>include ("prog3.php") - TEXT<br>echo ("<br>"); echo ("Php code from file: " . __FILE__); echo ("<br>");


      Файловый ввод-вывод

      При работе с файлами нужно выделить несколько этапов:

      • открыть файл
      • прочесть данные из файла
      • обработать данные
      • записать данные в файл
      • закрыть файл.

      Открыть файл

      Для работы с файлом его нужно открыть. Команда fopen открывает файл (или url ) и возвращает в программу указатель на файл (file handle).

      Если открыть файл не удалось, будет сгенерирована ошибка уровня E_WARNING.

      fopen использует два аргумента: имя файла и режим его использования (mode).

      Список возможных режимов (mode) для fopen()

      mode Описание
      'r' Открывает файл только для чтения; помещает указатель в начало файла.
      'r+' Открывает файл для чтения и записи; помещает указатель в начало файла.
      'w' Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пробует его создать.
      'w+' Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пытается его создать.
      'a' Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. В данном режиме функция fseek() не применима, записи всегда добавляются.
      'a+' Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. В данном режиме функция fseek() влияет только на место чтения, записи всегда добавляются.
      'x' Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст ошибку уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2).
      'x+' Создаёт и открывает для чтения и записи; в остальном имеет то же поведение что и'x'.
      'c' Открывает файл только для записи. Если файл не существует, то он создается. Если же файл существует, то он не обрезается (в отличие от 'w'), и вызов к этой функции не вызывает ошибку (также как и в случае с 'x'). Указатель на файл будет установлен на начало файла. Это может быть полезно при желании заблокировать файл (см. flock()) перед изменением, так как использование 'w' может обрезать файл еще до того как была получена блокировка (если вы желаете обрезать файл, можно использовать функцию ftruncate() после запроса на блокировку).
      'c+' Открывает файл для чтения и записи; в остальном имеет то же поведение, что и 'c'.
      'e' Установить флаг close-on-exec (закрыть при запуске) на открытый файловый дескриптор. Доступно только в PHP скомпилированном на системах поддерживающихз POSIX.1-2008.


      fclose(file_handle) - закрывает открытый файл.

      flock(file_handle, параматр) - позволяет заблокировать или разблокировать файл (параметр принимает значение LOCK_EX или LOCK_UN).

      Проверка на наличие файла

      Функция file_exists(filename) проверяет наличие указанного файла или каталога.

      Возвращает TRUE, если файл или каталог, указанный параметром filename, существует, иначе возвращает FALSE.

      Например:

      <?php echo ("Php code from file: " . __FILE__); echo ("<br>"); $myFileName1 = "file1.txt"; $myFileName2 = "file2.txt"; if (file_exists($myFileName1)) { echo ("The file $myFileName1 exists"); $fHandle1 = fopen($myFileName1,"r"); var_dump($fHandle1); } else { echo ("The file $myFileName1 does not exist"); } if (file_exists($myFileName2)) { echo ("The file $myFileName2 exists"); $fHandle2 = fopen($myFileName2,"r"); var_dump($fHandle2); } else { echo ("The file $myFileName2 does not exist"); } ?>

      Функция is_readable() определяет существование файла и доступен ли он для чтения.

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

      Функция is_writable() определяет существование файла и доступен ли он для записи.

      Возвращает TRUE, если файл существует и доступен для записи.

      Например, если у file1.txt стоит атрибут READONLY , то результат работы этой программы:

      <?php $filename1 = 'file1.txt'; $filename2 = 'file2.txt'; if (is_writable($filename1)) { echo ("<br>Файл <strong>$filename1</strong> доступен для записи"); } else { echo ("<br>Файл <strong>$filename1</strong> недоступен для записи");} if (is_writable($filename2)) { echo ("<br>Файл <strong>$filename2</strong> доступен для записи"); } else { echo ("<br>Файл <strong>$filename2 </strong>недоступен для записи");} ?>

      Будет:

      Файл file1.txt доступен для записи

      Файл file2.txt недоступен для записи

      Чтение из файла

      функции, которые получают информацию о файле.

      Путь к файлу

      На разных платформах есть разные способы обработки пути к файлу. Например, системы UNIX и Linux используют слэши  (/) в качестве разделителей в пути к файлу следующим образом:

      /www/tmp/test.txt

      Windows используют обратные наклонные линии (\) как разделители:

      \www\tmp\test.txt

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

      Получить имя файла из пути

      Чтобы получить имя файла из пути к файлу, можно использовать функцию basename (). Она принимает полный путь к файлу в качестве параметра и возвращает имя файла.

      $path = '/wwww/include/index.php'; $filename = basename($path); echo $filename;
      Получить расширение файла
      $fn = './test.txt'; $ext = pathinfo($fn, PATHINFO_EXTENSION); echo $ext; // txt

      Функция pathinfo принимает параметры: PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME .

      Получить размер файла

      <?php $filename = 'files/file1.txt'; var_dump (filesize($filename)); var_dump (filesize("test22")); ?>

      Для этого примера: первый файл есть на диске, второго нет.

      Возвращает размер файла в байтах для первого файла и FALSE (и генерирует ошибку уровня E_WARNING) для вторго файла (такого файла на диске нет) - в случае возникновения ошибки.

      Атрибуты времени файла

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

      fileatime() возвращает время последнего обращения к файлу

      filectime() возвращает  время последнего изменения ( last changed) файлаа

      filemtime() возвращает время последнего изменения свойств файла (last modified) файла.

      Все вышеприведенные функции возвращают временную метку (timestamp) UNIX, которая представляет собой целочисленное значение, которое указывает число секунд между эпохой UNIX (полночь, январь-01-1970) и заданным временем и датой. Чтобы получить информацию о дате и времени из временной метки UNIX, используется функция getdate ().

      Например:

      <?php $fn = 'files/file1.txt'; // get last modified time var_dump (filemtime($fn)); // get date var_dump (date('d-M-Y',filemtime($fn))); ?>
      Получить информацию о файле

      stat()— Возвращает подробную информацию о файле

      Результаты функций stat() и fstat()

      Числовой Ассоциативный Описание
      0 dev номер устройства
      1 ino номер inode 
      2 mode режим защиты inode
      3 nlink количество ссылок
      4 uid userid владельца 
      5 gid groupid владельца 
      6 rdev тип устройства, если устройство inode
      7 size размер в байтах
      8 atime время последнего доступа (временная метка Unix)
      9 mtime время последней модификации (временная метка Unix)
      10 ctime время последнего изменения inode (временная метка Unix)
      11 blksize размер блока ввода-вывода файловой системы 
      12 blocks количество используемых 512-байтных блоков 

      Пример:

      <?php $fPath = "files/file1.txt"; echo("File name: <h1>$fPath</h1>"); $fh = fopen($fPath,"r"); echo("<h1>fPath( File handle = $fh ) </h1> Argument - File handle"); var_dump (fstat($fh)); echo("<h1>stat( $fPath)</h1> Argument - filename"); var_dump (stat($fPath)); ?>


      Файловая система - работа с файлами

      Переименование файлов

      rename()

      <?php // File rename $oldFName = "oldFile.txt"; $newFName = "newFile.txt"; echo ("<h1>Rename $oldFName to $newFName</h1>"); if (file_exists($oldFName)){ echo ("<p>File $oldFName exists </p>"); if(!file_exists($newFName)){ if (rename($oldFName,$newFName)){ echo ("<p>File $oldFName , rename to $newFName --> Success! </p>"); } else{ echo ("<p style='color:red;'>File $oldFName , rename to $newFName --> Error!</p>"); } } else { echo ("<p style='color:red;'>File $newFName exists already </p>"); } } else { echo ("<p style='color:red;'>Original file - $oldFName does not exists</p> "); } ?>

      Копирование файлов

      copy()

      $sourceFName = "srcFile1.txt"; $targetFName1 = "?copy1.txt"; // Incorrect file name $targetFName2 = "copy2.txt"; if (copy($sourceFName,$targetFName1)){ echo ("<br>File $sourceFName copy to $targetFName1 --> Success! "); } else{ echo ("<br><span style='color:red;'>File $sourceFName copy to $targetFName1 --> ERROR</span>"); } if (copy($sourceFName,$targetFName2)){ echo ("<br>File $sourceFName copy to $targetFName2 --> Success! "); } else{ echo ("<br><span style='color:red;'>File $sourceFName copy to $targetFName2 --> ERROR</span>"); }

      Удаление файлов

      unlink()

      <?php // File delete $f1Name = "oldFile.txt"; $f2Name = "newFile.txt"; echo("<h1>Remove files</h1> $f1Name and $f2Name "); if (unlink($f1Name)){ echo ("<p>File $f1Name deleted --> Success! </p>"); } else{ echo ("<p style='color:red;'>File $f1Name not deleted --> Error! </p>"); } if (unlink($f2Name)){ echo ("<p>File $f2Name deleted --> Success! </p>"); } else{ echo ("<p style='color:red;'>File $f2Name not deleted --> Error! </p>"); } ?>

      Создание файлов

      <?php // Create files $f1Name = "oldFile.txt"; $f2Name = "newFile.txt"; echo("<h1>Creating files</h1> $f1Name and $f2Name <br>"); if (!file_exists($f1Name)){ $fHandle1 = fopen($f1Name,"w"); } else { echo ("<p style='color:red;'>File $f1Name already existed --> Error! </p>"); } if (!file_exists($f2Name)){ $fHandle1 = fopen($f2Name,"w"); } else { echo ("<p style='color:red;'>File $f2Name already existed --> Error! </p>"); } ?>

      Файловая система - работа с папками

      Функции для работы с папками (folders):

      mkdir() - создание папки. Аргументы: имя папки и режим доступа. UNIX - права доступа, восьмеричное число из трех цифр с нулем впереди. Первая цифра - право доступа для владельца, вторая - для группы, третья - для всех остальных. В системе Windows режим доступа игнорируется. В системе UNIX определены следующие права доступа:

      0Нет доступа
      1Доступ для запуска
      2Доступ для записи
      3Доступ для записи и запуска
      4Доступ для чтения
      5Доступ для чтения и запуска
      6Доступ для чтения и записи
      7Полный доступ

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

      mkdir( "testdir", 0751 );

      rmdir() - удаление папки. Аргумент: имя. Удалить можно лишь пустую папку при наличии права на это. При успешном выполнении функция возвращает true.

      opendir() - открытие папки. Аргумент: имя папки. Возврвщает ссылку на папку. В случае возникновения ошибки функция возвращает false. Ошибка при открытии может быть вызвана тем, что папка не существует или программа не имеет права его читать.

      readdir() - чтение папки. Аргумент: дескриптор каталога (resource), ранее открытый функцией opendir(). Если дескриптор каталога не указан, используется последний дескриптор открытый функцией opendir().. Возвращает строку, содержащую  имя следующего по порядку элемента каталога. Элементы возвращаются в том порядке, в котором они хранятся в файловой системе. По достижении конца каталога функция возвращает false.

      scandir()  - выдаёт список папок и файлов внутри данной

      is_dir() - проветить, существут ли папка с таким именем. Аргумент - путь к папке.

      Примеры

      создать паку

      <?php // Directory create $dirName = "newTestFolder"; $accessCode = 0751; echo("<h1>Creating folder</h1> with name $dirName if it does not exist already<br>"); if (!is_dir($dirName)){ mkdir( $dirName, $accessCode ); echo ("<p>Folder $dirName created ! </p>"); } else { echo ("<p style='color:red;'>Folder $dirName already existed --> Error! </p>"); } ?>

      прочесть содержимое папки - readdir()

      <?php // Directory read $dirName = "newTestFolder"; echo("<h1>Read folder</h1>Folder <b>$dirName</b> contains:<br>"); if ($handle = opendir($dirName)) { while ($entry = readdir($handle)) { echo ("$entry<br>"); } closedir($handle); } ?>

      прочесть содержимое папки - scandir()

      <?php // Directory read $dirName = "newTestFolder"; echo("<h1>Read folder</h1>Folder <b>$dirName</b> contains:<br>"); // Sort in ascending order - this is default $a = scandir($dirName); // Sort in descending order $b = scandir($dirName,1); var_dump($a); var_dump($b); ?>



      Чтение из файла:

      fread() - считывает содержимое файла в 

      fgetc() - считывает одиночный символ из файла

      fgets() - считывает одну строку из файла

      file() - считывает содержимое всего файла в массив

      fgetcsv() - считывает строку значений, разделенных запятыми

      file_get_contents() - считывает весь файл в строку

      readfile() - отображает содержимое всего файла без необходимости вызова функции fopen ().

      fread - чтение файла в двоичном формате, в виде последовательности байт (binary safe mode). использует два параметра: указатель на файл (полученный от fopen ) и количество байт для считывания.

      Например:

      <?php $num = 100; $fName = "files/myfile.txt"; echo ("<h1>Read $num bytes from file $fName</h1>"); $f1 = fopen($fName,"r"); echo (fread ($f1, $num)); ?>

      читает 100 байт из файла "myfile.txt" .

      Функции для записи в файл:

      fwrite()— запись в файл

      fputcsv() — форматирует строку в виде CSV и записывает её в файл

      file_put_contents() – пишет строку в файл без вызова фуекции fopen().

      Например:

      <?php $fName = "files/outFile1.txt"; $outTxt = "текст для записи в файл"; echo ("<h1>Write to file: $fName</h1>"); $myFile = fopen($fName, "w") or die("Невозможно открыть файл!"); $myFile.fwrite($myFile, $outTxt); fclose($myFile); ?>

      Форматирование ввода-вывода

      При операциях чтении-записи можно использовать спецификаторы формата (как и при работе со строками).

      fprintf() — записывает отформатированную строку в файл (на file handle)

      fscanf() — обрабатывает данные из файла в соответствии с форматом

      Примеры

      Читать полностью файл

      <?php $fName = "files/myfile.txt"; $fEnd = filesize($fName); echo ("<h1>Read all from file $fName</h1>"); $f1 = fopen($fName,"r"); echo (fread ($f1, $fEnd)); ?>

      Дозапись в файл

      <?php // Дозапись в файл $fName = "files/outFile2.txt"; echo ("<h1>Append to file file $fName</h1>"); $f1 = fopen($fName,"a") or die ("Невозможно открыть файл!");; $f1.fwrite($f1,"Test to append\tTest to append\n"); fclose($f1); ?>

      Читать файл построчно - 2 строки 

      <?php // Прочесть 2 строки из фвйла - fgets()<br> $fName = "files/myfile2.txt"; echo ("<h1>Read line from file</h1> $fName"); $f1 = fopen($fName,"r") or die ("Невозможно открыть файл!");; echo ("<p>Первая строка, прочитанная из файла:</p>"); echo fgets($f1); echo ("<p>Вторая строка, прочитанная из файла:</p>"); echo fgets($f1); echo ("<hr>"); fclose($f1); ?>

      Читать весь файл построчно

      <?php // Прочесть весь файл построчно - fgets() $fName = "files/myfile2.txt"; $i = 0; echo ("<h1>Read all lines from file</h1> $fName <hr>"); $f1 = fopen($fName,"r") or die ("Невозможно открыть файл!");; while(!feof($f1)){ echo ($i++ . " - " . fgets($f1) . "<br>"); } echo ("<hr>"); fclose($f1); ?>

      Читать файл посимвольно 

      <?php // Читать файл посимвольно - fgetc() $fName = "files/outFile2.txt"; $num = $_POST['num']; echo ("<h1>Read all lines from file</h1> $fName <hr>"); $f1 = fopen($fName,"r") or die ("Невозможно открыть файл!");; for($i=0; $i<=$num; $i++){ echo ($i++ . " - " . var_dump(fgetc($f1)) . "<br>"); } echo ("<hr>"); fclose($f1); ?>

      fprintf() — писать отформатированную строку в файл

      <?php $fName = "files/formatted1.txt"; $f1 = fopen($fName,"w") or die ("Невозможно открыть файл!");; fprintf($f1,"%.02lf\n", 1.035); fclose($f1); ?>



      Загрузка содержимого файла в массив

      file()

      file — Читает содержимое файла и помещает его в массив (каждая строка - элемент массива)

      file_get_contents()

      Данная функция похожа на функцию file() с той лишь разницей, что file_get_contents() возвращает содержимое файла в строке, начиная с указанного смещения offset и до maxlen байт. В случае неудачи, file_get_contents() вернёт FALSE. Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком.

      Таким образом можно прочесть и WEB страничку:

      $myWEB = $_POST['siteUrl']; echo ("<h1>Читаем сайт:</h1>" . $myWEB . "<hr>"); $homepage = file_get_contents($myWEB); print_r ($homepage);




    11. PHP строковые переменные

      Работа с текстовыми строками в PHP

      Язык PHP поддержимает специальный тип переменных для работы с текстовыми строками - string. Строка - это набор символов. 

      Строка может быть определена различными способами:

      • одинарными кавычками
      • двойными кавычками
      • heredoc-синтаксисом
      • nowdoc-синтаксисом

       

      Примеры описания строк:

      // echo 'это простая строка'; // echo "это строка - 2"; // heredoc-синтаксис $st2 = <<<MYSTRING Пример строки, охватывающей несколько строчек, с использованием heredoc-синтаксиса. MYSTRING; // nowdoc-синтаксис $st3 = <<<'MYSTRING' Пример текста, занимающего несколько строк, с помощью синтаксиса nowdoc. MYSTRING;

       

      Если строка  выделяется двойными кавычками или при помощи heredoc, то интерпретатор языка производит с ней некоторые дейтвия до того, как использовать далее в программе:

      1. все имена переменных (начинающиеся с символа $), встреченные в строке заменяэтся на их значения
      2. определённые последовательности символов, начинающиеся с символа: \ (backslash) заменяются на специальные символы:
      echo '<pre>Hi\tthere!</pre>'; // Выводит на экран: "Hi\tthere!" echo "<pre>Hi\tthere!</pre>"; // Выводит на экран: "Hi there!"

       

      При использовании одинарных кавычек (или  nowdoc ) последовательность: \t так и выводится на экран. В случае использования двойных кавычек (или heredoc) \t интерпретируется как управляющий символ (ESC - sequense) и вставляет в строку табуляцию.

       

      Управляющие последовательности (escaped characters)

       

      Последовательность Значение
      \n новая строка (LF или 0x0A (10) в ASCII)
      \r возврат каретки (CR или 0x0D (13) в ASCII)
      \t горизонтальная табуляция (HT или 0x09 (9) в ASCII)
      \v вертикальная табуляция (VT или 0x0B (11) в ASCII) (с версии PHP 5.2.5)
      \e escape-знак (ESC или 0x1B (27) в ASCII) (с версии PHP 5.4.4)
      \f подача страницы (FF или 0x0C (12) в ASCII) (с версии PHP 5.2.5)
      \\ обратная косая черта
      \$ знак доллара
      \" двойная кавычка
      [0-7]{1,3} последовательность символов, соответствующая регулярному выражению символа в восьмеричной системе счисления, который молча переполняется, чтобы поместиться в байт (т.е. "\400" === "\000")
      \x[0-9A-Fa-f]{1,2} последовательность символов, соответствующая регулярному выражению символа в шестнадцатеричной системе счисления
      \u{[0-9A-Fa-f]+} последовательность символов, соответствующая регулярному выражению символа Unicode, которая отображается в строка в представлении UTF-8 (добавлено в PHP 7.0.0)

       

       

      Форматирование строк

       

      В PHP есть функции, позволяющие форматировать текстовую строку до использования в программе. Форматирование строки производится сопоставлением самой строки со строкой спецификаций форматирования (format).

      format

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

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

      1. Необязательный описатель знака, указывающий как знак (- или +) будет применен к числу. По умолчанию, используется только знак минус, если число отрицательное. Этот описатель заставляет положительные числа также отображать знак плюс.
      2. Необязательный описатель заполнения, который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0. По умолчанию используется пробел. Альтернативный символ может быть указан с помощью одиночной кавычки ('). См. примеры ниже.
      3. Необязательный описатель выравнивания, определяющий выравнивание влево или вправо. По умолчанию выравнивается вправо, - используется для выравнивания влево.
      4. Необязательное число, описатель ширины, определяющий минимальное число символов, которое будет содержать результат этого преобразования.
      5. Необязательный описатель точности, указанный в виде точки (.), после которой следует необязательная строка из десятичных чисел, определяющая, сколько десятичных разрядов отображать для чисел с плавающей точкой. При использовании со строками этот описатель выступает в роли обрезающей точки, устанавливающей максимальный лимит символов. Также между точкой и цифрой можно указать символ, используемый при дополнении числа.
      6. Описатель типа, определяющий, как трактовать тип данных аргумента. Допустимые типы:

        • % - символ процента. Аргумент не используется.
        • b - аргумент трактуется как целое и выводится в виде двоичного числа.
        • c - аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
        • d - аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
        • e - аргумент трактуется как число в в научной нотации (например, 1.2e+2). Описатель точности указывает на количество знаков после запятой, начиная с версии PHP 5.2.1. В более ранних версиях он обозначал количество значащих цифр (на один знак меньше).
        • E - аналогично %e, но использует заглавную букву (например, 1.2E+2).
        • f - аргумент трактуется как число с плавающей точкой и также выводится в зависимости от локали.
        • F - аргумент трактуется как число с плавающей точкой и также выводится, но без зависимости от локали. Доступно, начиная с версии PHP 5.0.3.
        • g - выбирает самую краткую запись из %e и %f.
        • G - выбирает самую краткую запись из %E и %f.
        • o - аргумент трактуется как целое и выводится в виде восьмеричного числа.
        • s - аргумент трактуется как строка.
        • u - аргумент трактуется как целое и выводится в виде десятичного числа без знака.
        • x - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в нижнем регистре).
        • X - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в верхнем регистре).

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

      Обработка типов
      Тип Спецификатор
      string s
      integer d, u, c, o, x, X, b
      double g, G, e, E, f, F

      Пример:

      <html> <head> <title>Форматирование вывода </title> </head> <body> <?php $goods = array ("помидоры" => 15, "огурцы" => 12, "картофель" => 10); echo "<pre>"; printf ("%-25s%25s\n%'=50s\n", "Наименование", "Цена", ""); foreach ($goods as $nam => $prc) printf ("%'.-25s%'.22.2f\n", $nam, $prc); echo "</pre>"; ?> </body> </html>
      Результат:
      Наименование Цена =========================== помидоры..............15.00 огурцы................12.00 картофель.............10.00

       

       

       

      Информация о строке, манипуляция строками

      • strlen() - возвращает длину строки
      • strstr() - ищет подстроку в строке
      • stristr() - работает так же, как и strstr(), но не различает регистры
      • strpos() - определяет позицию подстроки в строке
      • substr() - возвращает подстроку

      Управление строками

      • ltrim(), chop(), trim() - удаляют все разделители соответственно в начале строки, в конце строки, в начале и конце строки. К разделителям относятся следующие символы: "\n" (новая строка), "\r"(возврат каретки), "\t" (табуляция), простой пробел.
      • str_replace() - заменяет все экземпляры указанной подстроки в строке на новую подстроку.
      • substr_replace() - заменяет часть строки, ограниченную параметрами.
      • strtoupper() - переводит символы строки в верхний регистр.
      • strtolower() - переводит символы строки в нижний регистр.
      • ucwords() - переводит в верхний регистр первый символ каждого слова.
      • explode() - разбивает строку на массив.
      • implode() -объединяет элементы массива со строкой.

       

       

       

      PHP - функции работы со строками

       

      Функция Описание
      addcslashes() Вставляет символ обратная косая черта -  \ перед заданными символами в строке 
      addslashes() Вставляет символ - \ перед символами
      single quote (')
      double quote (")
      backslash (\)
      NULL
      найденными  в строке
      bin2hex() Преобразует бинарные данные в шестнадцатиричное представление
      $binary = "11111001";
      $hex = dechex(bindec($binary));
      echo $hex;
      chop() Эта функция возвращает строку с удаленными из конца строки пробельными (или другими) символами.

      Если второй параметр не передан, rtrim() удаляет следующие символы:

      " " (ASCII 32 (0x20)), обычный пробел.
      "\t" (ASCII 9 (0x09)), символ табуляции.
      "\n" (ASCII 10 (0x0A)), символ перевода строки.
      "\r" (ASCII 13 (0x0D)), символ возврата каретки.
      "\0" (ASCII 0 (0x00)), NULL-байт.
      "\x0B" (ASCII 11 (0x0B)), вертикальная табуляция.
      // удаляем управляющие ASCII-символы с конца $binary
      // (от 0 до 31 включительно)
      $clean = rtrim($binary, "\x00..\x1F");
      var_dump($clean);
      chr() Возвращает символ по коду
      <?php
      echo chr(52) . "<br>"; // Decimal value
      echo chr(052) . "<br>"; // Octal value
      echo chr(0x52) . "<br>"; // Hex value
      ?>
      chunk_split($str, $n, $smb) разбивает строку $str на равные части длиной $n и разделяет их символоми $smb

      $str = "Hello world!"; echo chunk_split($str,2,".");
      convert_cyr_string(string,from,to) Меняет русскую кодировку строки string из кодировки from в кодировку to 

      Возможные кодировки:

      • k - koi8-r
      • w - windows-1251
      • i - iso8859-5
      • a - x-cp866
      • d - x-cp866
      • m - x-mac-cyrillic

      convert_cyr_string($str,'w','a');

      convert_uudecode() Декодирует строку, закодированную при помощи convert_uuencode()
      convert_uuencode(string) Кодирование uuencode переводит строку string (включая бинарные символы) в последовательности печатных (7-битных) ASCII-символов, что позволяет безопасно обмениваться данными через сеть. Закодированные данные примерно на 35% больше оригинала.
      count_chars() Возвращает количество символов в строке
      crc32(string) Функция вычисляет CRC32 код для строки string. Это обычно используется для контроля целостности передаваемых данных.
      crypt() Возвращает хэшированную (закодированную) строку, полученную с помощью стандартного алгоритма UNIX, основанного на DES, или другого алгоритма, имеющегося в системе.
      echo() Печатает одну или несколько строк
      explode(separator,string,limit) Конвертирует строку string в массив, разделяя её по символу separator. 

      delimiter

      Разделитель.

      string

      Входная строка.

      limit

      Если аргумент limit является положительным, возвращаемый массив будет содержать максимум limit элементов, при этом последний элемент будет содержать остаток строки string.

      Если параметр limit отрицателен, то будут возвращены все компоненты кроме последних -limit.

      Если limit равен нулю, то он расценивается как 1.

      fprintf() Печатает отформатированную строку в определённый выходной поток
      get_html_translation_table() Возвращает таблицу преобразований, используемую функциями htmlspecialchars() и htmlentities()
      hebrev() Преобразует текст на иврите в визуальный текст
      hebrevc() Преобразует текст на иврите в визуальный текст и новые строки (\ n) в <br>
      hex2bin() Конвертирует строку шестнадцатеричных величин в символы ASCII
      html_entity_decode(str,flags,char-set) Преобразует объекты HTML в символы
      htmlentities() Преобразует символы в объекты HTML
      htmlspecialchars_decode() Преобразует некоторые предопределенные объекты HTML в символы
      htmlspecialchars() Преобразует некоторые предопределенные символы в объекты HTML
      implode() Конвертирует массив в строку
      join() Конвертирует массив в строку
      lcfirst() Преобразует первый символ строки в нижний регистр
      levenshtein($str1, $str2) Вычисляет расстояние Левенштейна между двумя строками. Расстояние Левенштейна - это минимальное количество вставок, замен и удалений символов, необходимое для преобразования str1 в str2.
      localeconv() Возвращает информацию о численном и денежном форматировании локали
      ltrim() Удаляет пробелы (или другие символы) из начала строки
      md5() Вычисляет хэш MD5 строки
      md5_file() Вычисляет хэш MD5 файла
      metaphone() Вычисляет ключ метафона строки
      money_format() Возвращает строку, отформатированную как строка валюты
      nl_langinfo() Возвращает определенную локальную информацию
      nl2br() Вставляет разрывы строк HTML перед каждой новой строкой строки
      number_format() Форматирует число сгруппированными тысячами
      ord() Возвращает значение ASCII первого символа строки
      parse_str() Разбирает строку запроса в переменные
      print() Выводит одну или несколько строк
      printf() Выводит форматированную строку
      quoted_printable_decode() Преобразует строку с кавычками для печати в 8-битную строку
      quoted_printable_encode() Преобразует 8-битную строку в строку с текстом в кавычках
      quotemeta() Убирает в кавычки метасимволы
      rtrim() Эта функция возвращает строку str с удаленными из конца строки пробельными (или другими) символами.

      Если второй параметр не передан, rtrim() удаляет следующие символы:

      " " (ASCII 32 (0x20)), обычный пробел.
      "\t" (ASCII 9 (0x09)), символ табуляции.
      "\n" (ASCII 10 (0x0A)), символ перевода строки.
      "\r" (ASCII 13 (0x0D)), символ возврата каретки.
      "\0" (ASCII 0 (0x00)), NULL-байт.
      "\x0B" (ASCII 11 (0x0B)), вертикальная табуляция.

      // удаляем управляющие ASCII-символы с конца $binary
      // (от 0 до 31 включительно)
      $clean = rtrim($binary, "\x00..\x1F");
      var_dump($clean);
      setlocale() Устанавливает локальную информацию
      sha1() Вычисляет хэш SHA-1 для строки
      sha1_file() Вычисляет хэш SHA-1 для файла
      similar_text() Вычисляет сходство между двумя строками
      soundex() Вычисляет ключ soundex строки
      sprintf(format,arg1,arg2,,,) Возвращает стрроку, созданную из аргументов arg1,arg2, отформатированных строкой формат.

      format

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

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

      1. Необязательный описатель знака, указывающий как знак (- или +) будет применен к числу. По умолчанию, используется только знак минус, если число отрицательное. Этот описатель заставляет положительные числа также отображать знак плюс.
      2. Необязательный описатель заполнения, который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0. По умолчанию используется пробел. Альтернативный символ может быть указан с помощью одиночной кавычки ('). См. примеры ниже.
      3. Необязательный описатель выравнивания, определяющий выравнивание влево или вправо. По умолчанию выравнивается вправо, - используется для выравнивания влево.
      4. Необязательное число, описатель ширины, определяющий минимальное число символов, которое будет содержать результат этого преобразования.
      5. Необязательный описатель точности, указанный в виде точки (.), после которой следует необязательная строка из десятичных чисел, определяющая, сколько десятичных разрядов отображать для чисел с плавающей точкой. При использовании со строками этот описатель выступает в роли обрезающей точки, устанавливающей максимальный лимит символов. Также между точкой и цифрой можно указать символ, используемый при дополнении числа.
      6. Описатель типа, определяющий, как трактовать тип данных аргумента. Допустимые типы:

        • % - символ процента. Аргумент не используется.
        • b - аргумент трактуется как целое и выводится в виде двоичного числа.
        • c - аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
        • d - аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
        • e - аргумент трактуется как число в в научной нотации (например, 1.2e+2). Описатель точности указывает на количество знаков после запятой, начиная с версии PHP 5.2.1. В более ранних версиях он обозначал количество значащих цифр (на один знак меньше).
        • E - аналогично %e, но использует заглавную букву (например, 1.2E+2).
        • f - аргумент трактуется как число с плавающей точкой и также выводится в зависимости от локали.
        • F - аргумент трактуется как число с плавающей точкой и также выводится, но без зависимости от локали. Доступно, начиная с версии PHP 5.0.3.
        • g - выбирает самую краткую запись из %e и %f.
        • G - выбирает самую краткую запись из %E и %f.
        • o - аргумент трактуется как целое и выводится в виде восьмеричного числа.
        • s - аргумент трактуется как строка.
        • u - аргумент трактуется как целое и выводится в виде десятичного числа без знака.
        • x - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в нижнем регистре).
        • X - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в верхнем регистре).

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

      Обработка типов
      Тип Спецификатор
      string s
      integer d, u, c, o, x, X, b
      double g, G, e, E, f, F
      sscanf() Разбирает строку в соответствии с заданным форматом
      str_getcsv() Разбирает строку CSV в массив
      str_ireplace() Заменяет некоторые символы в строке (без учета регистра)
      str_pad() Дополняет строку до новой длины
      str_repeat() Повторяет строку определенное количество раз
      str_replace() Заменяет некоторые символы в строке (с учетом регистра)
      str_rot13() Выполняет кодировку ROT13 в строке
      str_shuffle() Случайно перемещает все символы в строке
      str_split($string,$length) Превращает строку $stringв массив раазбивая её на части длиной $length
      str_word_count() Считает количество слов в строке
      strcasecmp() Сравнивает две строки (без учета регистра)
      strchr() Находит первое вхождение строки внутри другой строки (алиас strstr ())
      strcmp() Сравнивает две строки (с учетом регистра)
      strcoll() Сравнивает две строки (сравнение строк на основе локали)
      strcspn() Возвращает количество символов, найденных в строке, до того, как найдена какая-либо часть определенных символов
      strip_tags() Вырезает HTML и PHP теги из текстовой строки
      stripcslashes() Удаляет экранирование символов, произведенное функцией addcslashes()
      stripslashes() Удаляет экранирование символов, произведенное функцией  addslashes()
      stripos() Возвращает позицию первого вхождения подстроки без учета регистра
      stristr() Регистронезависимый вариант функции strstr()
      strlen() Возвращает длину строки
      strnatcasecmp() Сравнение строк без учета регистра с использованием алгоритма "natural order"
      strnatcmp() Сравнение строк с использованием алгоритма "natural order" с учётом регистра
      strncasecmp() Бинарно-безопасное сравнение первых n символов строк без учета регистра (case-insensitive)
      strncmp() Бинарно-безопасное сравнение первых n символов строк (case-sensitive)
      strpbrk() Ищет в строке любой символ из заданного набора
      strpos() Возвращает позицию первого вхождения подстроки (case-sensitive)
      strrchr() Находит последнее вхождение символа в строке
      strrev() Переворачивает строку задом наперед
      strripos() Возвращает позицию последнего вхождения подстроки без учета регистра
      strrpos() Возвращает позицию последнего вхождения подстроки в строке (case-sensitive)
      strspn() Возвращает длину участка в начале строки, полностью соответствующего маске
      strstr() Находит первое вхождение подстроки (case-sensitive)
      strtok() strtok() разбивает строку str на подстроки (токены), используя в качестве разделителей символы из token. Например, строку "This is an example string" можно разбить на отдельные слова используя пробел в качестве разделителя.
      strtolower() Возвращает строку string, в которой все буквенные символы переведены в нижний регистр.
      strtoupper() Возвращает строку string, в которой все буквенные символы переведены в верхний регистр.
      strtr() Преобразует заданные символы или заменяет подстроки. 
      substr() Возвращает подстроку
      substr_compare() Бинарно-безопасное сравнение 2 строк со смещением, с учетом или без учета регистра
      substr_count() Возвращает число вхождений подстроки
      substr_replace() Возвращает число вхождений подстроки
      trim() Удаляет пробелы или другие символы с обеих сторон строки
      ucfirst() Преобразует первый символ строки в верхний регистр
      ucwords() Преобразует в верхний регистр первый символ каждого слова в строке
      vfprintf() Записывает строку, отформатированную в соответствии с параметром format в поток handle.
      Данная функция похожа на fprintf(), но принимает не переменное число аргументов, а массив.
      int vfprintf ( resource $handle , string $format , array $args )

      vprintf() Выводит отформатированную строку
      int vprintf ( string $format , array $args )
      Выводит значения массива, отформатированные в соответствии с аргументом format, описанном в документации функции sprintf().
      vsprintf() Возвращает отформатированную строку
      wordwrap() Переносит строку по указанному количеству символов