Дозволяється використання імен констант будь-якого регістру. Зазвичай, вони записуються у верхньому, однак правила хорошого тону рекомендують відрізняти змінні та константи іменами у різних регістрах, щоб покращити читабельність програми.
| Define | Resalt | Comment |
|---|---|---|
| URL | https://nvkarta.synology.me/ | URL хоста, незалежно від протоколу передачі |
| HOST | nvkarta.synology.me | Ім`я хоста без протоколу передачі |
| ROOT | /volume1/web/ | Корінь папки, в якій виконується скрипт |
| DIR | /Приват/project-constants/ | Відносний шлях до поточного каталогу від URL хоста |
| FILE | /Приват/project-constants/index.php | Відносний шлях до поточного файлу від URL хоста |
Кастомні константи залежать від регістру, тобто $FILE не те саме, що й $file
URL хоста, незалежно від протоколу передачі, з урахуванням випадків, коли заголовки виставлені проксі-серверомif (!defined("URL")) { $URL = isset($_SERVER["HTTP_X_FORWARDED_PROTO"]) && $_SERVER["HTTP_X_FORWARDED_PROTO"] === "https" || isset($_SERVER["HTTP_X_FORWARDED_SSL"]) && $_SERVER["HTTP_X_FORWARDED_SSL"] === "on" ? "https://" : "http://"; $URL .= $_SERVER["HTTP_HOST"]; define("URL", $URL . "/"); }
Ім`я хоста без протоколу передачіif (!defined("HOST")) define("HOST", $_SERVER["SERVER_NAME"]);
Відносний шлях до поточного каталогу від URL хостаif (!defined("DIR")) define("DIR", dirname($_SERVER["PHP_SELF"]));
Відносний шлях до поточного файлу від URL хостаif (!defined("FILE")) define("FILE", $_SERVER["PHP_SELF"]);
| PHP | Resalt | Comment |
|---|---|---|
| $phpSelf | //project-constants/index.php | Строка для парсінгу (приклад) |
| $foldName | project-constants | Ім`я поточної папки |
| $baseName | index.php | Ім`я файла включно з типом |
| $fileName | index | Ім`я файла без його типу |
| $extName | php | Тип файлу (розширення) |
Ім`я поточної папки, в якій виконується скрипт$foldName = basename(dirname(__FILE__));
Видалення усіх символів, крім літер, цифр з адреси (при її використанні), що є захистом від ін`єкцій$phpSelf = filter_var($_SERVER["PHP_SELF"], FILTER_SANITIZE_URL);
$pathParts = pathinfo($phpSelf);
Виділення з адреси імені файла, включно з розширенням, де ім`я файла окремо, а розширення окремо$baseName = $pathParts["basename"];
$fileName = $pathParts["filename"];
$extName = $pathParts["extension"];
| PHP | Resalt | Comment |
|---|---|---|
| __DIR__ | /volume1/web/Приват/project-constants | Фізичний повний шлях до поточного каталогу |
| __FILE__ | /volume1/web/Приват/project-constants/index.php | Фізичний повний шлях до поточного файлу |
| __LINE__ | 231 | Номер поточного рядка у файлі |
| __CLASS__ | Example W3schools | Якщо використовується всередині класу, повертається ім`я класу. |
| __FUNCTION__ | Example W3schools | Якщо всередині функції, повертається ім`я функції |
| __METHOD__ | Example W3schools | При використанні всередині функції, яка належить до класу, повертається ім`я класу та функції |
| __NAMESPACE__ | Example W3schools | Якщо використовується всередині простору імен, повертається ім`я простору імен |
| __TRAIT__ | Example W3schools | Якщо використовується всередині трейта, повертається ім`я трейта |
Магічні константи не залежать від регістру, тобто __LINE__ повертає те саме, що й __line__
| PHP script | Resalt | Comment |
|---|---|---|
| $_SERVER["DOCUMENT_ROOT"] | /volume1/web | Кореневий каталог документа, в якому виконується поточний скрипт, як визначено у файлі конфігурації сервера |
| $_SERVER["PHP_SELF"] | /Приват/project-constants/index.php | Ім`я файлу скрипта, що виконується в даний момент, відносно кореня документа |
| $_SERVER["HTTP_REFERER"] | https://nvkarta.synology.me/%d0%9f%d1%80%d0%b8%d0%b2%d0%b0%d1%82/project-constants | Заголовок HTTP з адресою веб-сторінки (тобто URI або IRI), з якої був запит |
| $_SERVER["REMOTE_ADDR"] | 216.73.216.105 | IP-адреса, з якої користувач переглядає поточну сторінку |
| $_SERVER["REMOTE_HOST"] | 216.73.216.105 | Ім`я хоста, з якого користувач переглядає поточну сторінку, або інтернет-вузол, вказаний за параметром IP |
| $_SERVER["SERVER_NAME"] | nvkarta.synology.me | Отримується з імені сервера, базується на конфігурації веб-сервера |
| $_SERVER["HTTP_HOST"] | nvkarta.synology.me | Отримується із заголовка HTTP-запиту, базується на запиті клієнта |
| $_SERVER["HTTP_USER_AGENT"] | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | Заголовок HTTP про тип і налащтування клієнтського браузера |
| $_SERVER["SERVER_SOFTWARE"] | Apache/2.4.63 (Unix) | Рядок ідентифікації сервера (середовища) |
$_SERVER - це суперглобальна змінна PHP, що містить інформацію про заголовки, шляхи та розташування скриптів.
Заголовок HTTP з адресою веб-сторінки (тобто URI або IRI), з якої був запит. В разі прямого звертання до сторінки, можна повернути про це попередження$refer = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "The URI is not available through direct access to this page.";
Ім`я хоста, з якого користувач переглядає поточну сторінку. Зворотний пошук DNS базується на REMOTE_ADDR користувача, тому веб-сервер має бути налаштований для створення цієї змінної. Наприклад, в httpd.conf має бути встановлено Apache HostnameLookups On, щоб змінна могла існувати. В разі відсутності таких налаштувань, можна повернути ім`я хоста інтернет-вузла, вказаного за параметром IP таким чином$getHost = gethostbyaddr($_SERVER["REMOTE_ADDR"]);
$remoteHost = isset($_SERVER["REMOTE_HOST"]) ? $_SERVER["REMOTE_HOST"] : $getHost;
Рекомендовано додавати rel="noreferrer noopener" до елемента anchor щоразу, коли застосовується атрибут перенаправлення сторінок target="_blank".
<a href="https://karta.com" target="_blank" rel="noreferrer noopener">перейти</a>
Атрибут додається для покращення безпеки при відкритті посилання в новому вікні. Він запобігає передачі інформації про посилання з веб-сайту, який відкривається, назад до веб-сайту, з якого відбувається перехід.
Захист e-mail від краулерів за рахунок маскування його у JS-коді. Боти не вміють виконувати скрипти, тому такий варіант захисту працює досить надійно.
<div id="mail"></div>
<script>
const mail = {login: "geo", server: "karta", domain: "com"};
const email = `${mail.login}@${mail.server}.${mail.domain}`;
const string = `<a href="mailto:${email}?subject=Mail from our Website&body=Some body text here">${email}</a>`;
document.getElementById("mail").innerHTML = string;
</script>
Захист обробки запитів Apache налаштовується на сервері через конфіграційний файл .htaccess. Конфігурація .htaccess впливає на директорію, в якій він знаходиться, а також на всі піддиректорії цієї директорії. Це означає, що налаштування, визначені у файлі .htaccess, будуть застосовуватися до всіх файлів та піддиректорій, якщо не будуть перевизначені іншими файлами .htaccess у цих піддиректоріях.
Options +SymLinksIfOwnerMatch
Options -Indexes
DirectoryIndex index.php index.html
AddDefaultCharset UTF-8
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
</IfModule>
<FilesMatch "\.(html)$">
Header set Cache-Control "no-cache, no-store"
Header unset ETag
</FilesMatch>
<IfModule mod_headers.c>
Header set X-Content-Type-Options "nosniff"
Header set X-XSS-Protection "1; mode=block"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header set Referrer-Policy "no-referrer-when-downgrade"
</IfModule>
Конфігурація, наведена вище, налаштовує веб-сервер Apache на безпечну й ефективну роботу з веб-додатками. Mодуль для визначення заголовків HTML файлів блокує кешування, але, при необхідності, його можна видалити.