БлогNot. Как отключить выполнение PHP там, где оно есть или включить там, где его нет

Как отключить выполнение PHP там, где оно есть или включить там, где его нет

Если нужно отключить выполнение php-скриптов в некоторой папке на хосте, например, в /xampp/htdocs/uploads (чтобы гипотетические пользователи не смогли загрузить туда исполняемый код), достаточно создать в этой папке файл .htaccess со следующим содержимым:

php_flag engine 0
RemoveHandler .phtml .php .php2 .php3 .php4 .php5 .php7 .php8 .phps .cgi .pl .asp .aspx .shtml .shtm .fcgi .fpl .htm .html
AddType text/plain .phtml .php .php2 .php3 .php4 .php5 .php6 .php7 .php8 .phps .cgi .pl .asp .aspx .shtml .shtm .fcgi .fpl .htm .html

Напоминаем, что файл .htaccess лучше всегда создавать в однобайтовой ANSI-кодировке.

Чтобы проверить результат, можно поместить в ту же папку файл index.php с таким содержимым:

<?php $i = 1; echo $i; ?>

и попытаться выполнить его на хосте по URL-адресу вида http://localhost/uploads/

Если всё получилось, мы увидим просто исходный текст скрипта:

<?php $i = 1; echo $i; ?>

а иначе увидели бы единичку:

1

Есть и другой вариант содержимого .htaccess, более короткий:

<FilesMatch "\.*">
SetHandler none
</FilesMatch>

Правда, исходников мы при таком подходе не увидим, а только пустое место.

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

Создадим в нужной папке файл .htaccess с таким содержимым:

AddType application/x-httpd-php .php .htm .html .tpl

или другой вариант:

<IfModule mod_mime.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php .htm
AddType application/x-httpd-php .html
AddType application/x-httpd-php .tpl
</IfModule>

Метод с AddHandler:

AddHandler application/x-httpd-php .php .htm .html .tpl

Метод с SetHandler:

<FilesMatch "\.(php|htm|html|tpl)$">
SetHandler application/x-httpd-php
</FilesMatch>

Проверим, что получилось, создав в той же папке uploads файл index.html со следующим содержимым:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="utf-8">
  <title>Test</title>
</head>
<body>
 <?php echo date('d.m.Y'); ?>
</body>
</html>

Если всё нормально, то, выполнив файл по URL-адресу http://localhost/uploads/index.html мы получим текущую дату на сервере в формате ДД.ММ.ГГГГ:

25.10.2022 

26.10.2022, 00:20 [926 просмотров]


теги: html памятка php сервер

К этой статье пока нет комментариев, Ваш будет первым