Содержание

PHP

РНР (читается как пи-эйч-пи) является интерпретируемым языком программирования.

Рабочие скрипты:

Документация PHP:

Установка PHP в Windows 11 (Hugo, VS Code) запуск локального веб сервера PHP

Потребовалось использовать PHP в проекте с Hugo (разработка проекта ведется в Windows 11, редактор Руководство VS Code: установка в Linux, работа с PHP, JS, React, Claude Code). PHP у меня не был установлен, значит нужно установить, для начал смотрим какие варианты есть в Windows 11, запускам под администратором PowerShell и выполняем команду winget для просмотра версий PHP:

PS C:\WINDOWS\system32> winget search PHP.PHP
Имя                       ИД              Версия Источник
----------------------------------------------------------
PHP 8.1                   PHP.PHP.8.1     8.1.34 winget
PHP 8.2                   PHP.PHP.8.2     8.2.33 winget
PHP 8.3                   PHP.PHP.8.3     8.3.33 winget
PHP 8.4                   PHP.PHP.8.4     8.4.25 winget
PHP 8.5                   PHP.PHP.8.5     8.5.10 winget
PHP 8.1 - Non-thread safe PHP.PHP.NTS.8.1 8.1.34 winget
PHP 8.2 - Non-thread safe PHP.PHP.NTS.8.2 8.2.31 winget
PHP 8.3 - Non-thread safe PHP.PHP.NTS.8.3 8.3.31 winget
PHP 8.4 - Non-thread safe PHP.PHP.NTS.8.4 8.4.22 winget
PHP 8.5 - Non-thread safe PHP.PHP.NTS.8.5 8.5.8  winget

Какую именно ветку ставить: Thread Safe или Non-thread safe? Для локального запуска через встроенный сервер php -S или для CLI-скриптов на Windows лучше ставить стандартную Thread Safe версию. Я поставлю PHP 8.3 потому что она основная версия на моих VPS.

winget install --id PHP.PHP.8.3 -e

Для проверки установки, перезапустите VS Code. В терминале VS Code проверьте версию:

> php -v
PHP 8.3.33 (cli) (built: Jul 28 2026 18:10:28) (ZTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.3.33, Copyright (c) Zend Technologies

Запускаем встроенный web сервер и открываем страницу в браузере:

php -S localhost:8000 -t public

Все работает!

А что делать со статическим генератором, в нашем случаем Hugo, чтобы он взаимодействовал с PHP? Встроенный dev-сервер Hugo (hugo server) написан на Go и умеет отдавать только статику. Если к нему обратиться по пути /api.php, он просто скачает этот файл или отдаст его как текст. Здесь нужно использовать небольшой лайфхак: этот метод полностью эмулирует поведение Nginx на VPS: HTML и PHP работают на одном порту, поэтому нет проблем с CORS (междоменными запросами).

  1. В первом окне терминала запусти Hugo в режиме постоянной пересборки файлов на диск (без запуска его собственного сервера). Он будет следить за изменениями и обновлять папку public/:
    hugo --watch
  2. Открой вторую вкладку терминала и запусти встроенный веб-сервер PHP, указав корневой директорией свежесобранную папку public:
    php -S localhost:8000 -t public

    Открой в браузере

    http://localhost:8000

Синтаксис

Операторы

Каждое из этих условий может быть пустым.

Пример. Так как условие1 безусловно выполняется один раз в начале цикла - это можно использовать для записи более компактного кода.

array1.php
$matches = array('Makap', true, 'false', 35);
 
for ($i = 0, $cnt=count($matches); $i < $cnt; $i++) {
        echo "$matches[$i]\n";
}

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

В альтернативном варианте можно записать также: for, while, if-else, switch-case.

Функции

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

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

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

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

function wrap_html_tag(&$string, $tag = 'b') {
   $string = "<$tag>$string</$tag>";
}

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

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

PHP и JavaScript

Взаимодействие PHP и JavaScript: основы, возможности и применение

  1. Внесение изменений в текст страницы, например в php файле
    echo '
    <html><head>
    <script>
    var fromDate="'.$_POST['fromDate'].'";
    var toDate="'.$_POST['toDate'].'";
    </script>
    ...Your HTML here
    ';

    После загрузки при помощи JavaScript считываются переменные fromDate и toDate.

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

Официальная документация Суперглобальные переменные PHP

Переменная $GLOBALS. Ассоциативный массив (array), содержащий ссылки на все переменные глобальной области видимости скрипта, определенные в данный момент. Имена переменных являются ключами массива.

<?php
$conf['conf']['foo'] = 'this is foo';
$conf['conf']['bar'] = 'this is bar';
global $conf; // добавляем переменную в глобальный массив видимости скрипта
$output = print_r($GLOBALS["conf"], true);
echo "$output\n";
?>

Для объявления глобальной переменной ее достаточно поместить в массив $GLOBALS

$GLOBALS['testkey2']='testvalue2';

Вывести на экран все значения переменных массива $GLOBALS можно при помощи print_r($GLOBALS); или так:

foreach ($GLOBALS as $key=>$value)
   echo 'GLOBALS['.$key.'] == '.$value.'<br>'; 

Переменная $_SERVER.

Переменная $_GET.

Переменная $_POST.

Переменная $_FILES - переменные файлов, загруженных по протоколу Коды состояния HTTP. Методы и структура протокола HTTP методом Метод HTTP POST. Пример PHP - загрузка файла на сервер.

Переменная $_REQUEST - ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE. Переменные в массиве $_REQUEST передаются в скрипт посредством методов GET, POST или COOKIE, поэтому им нельзя доверять, т.к. они могли быть изменены удаленным пользователем. Их наличие и порядок добавления данных в соответствующие массивы определяется директивой variables_order (по умолчанию установлено GPCS).

Переменная $_SESSION

Переменная $_ENV. Заполняется если скрипт был запущен из командной строки. Массив $_SERVER будет содержать все переменные из массива $_ENV.

Переменная $_COOKIE: Что такое Cookie и как их использовать.

Переменная $http_response_header

require и include

Операторы include, require, include_once и require_once работают аналогично серверным включениям (SSI). Операторы include и require являются языковыми конструкциями, а значит могут использоваться без круглых скобок.

include 'vars.php'; include_once './second.class.php';
Операторы require() и include() ничем не отличаются друг от друга, единственно в случае неудачного их выполнения require() выдаст сообщение о неисправимой ошибке и прервет выполнение программы, а include() выдаст только предупреждение.

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

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

Тернарная операция

Тернарная операция в PHP записывается аналогично языку С. Синтаксис тернарного оператор "?":

$переменная = условие ? $переменная = если условие выполнено : $переменная = если условие не выполнено

Справочник функций PHP

Обработка строк

Обработка текста

Функции запуска внешних программ

Функции для работы с файлами и сетью

Безопасность

Минимальная обработка на стороне сервера данных присланных пользователем:

Фильтрация(валидация) данных

Маленькие советы

1 способ: <?php echo '<a href=\"http://www.php.net\">PHP</a>'; ?> 2 способ: <?= '<br><a href="http://www.php.net">PHP1</a>' ?> </file>Начиная с версии PHP 5.4.0 запись <?= стала доступна всегда.