Действие HTML-формы с использованием php-файла вне корневого каталога?

Мне интересно, есть несколько файлов, которые я сохранил за пределами корневого каталога в другом каталоге, и я пытаюсь использовать форму HTML для отправки информации в файл php, который находится в корневом каталоге OUTSIDE

Это возможно? Если да, то как?

Создайте прокси-скрипт … что-то, что находится внутри веб-каталога, но все, что он делает, включает соответствующий «защищенный» файл:

DOCROOT / form_handler.php

<?php include "../secret/form_handler.php"; 

DOCROOT / form.html

 ... <form action="form_handler.php"> ... 

Это, на самом деле, то, сколько сайтов настроено (по крайней мере, по сути). Это типично для размещения большинства ваших скриптов вне DOCROOT, как это происходит в редком случае, когда Apache или подобное не анализируют ваш PHP (т. Е. Если он неверно сконфигурирован), он непреднамеренно не отправляет ваш исходный код.

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

На моем веб-сайте каждая форма начинается с этого кода:

 <form action="action" method="post"> <input type="hidden" name="i-action" value="do-whatever" /> 

Это позволяет избежать необходимости использования нескольких прокси-скриптов, поскольку action.php будет использовать значение скрытого поля для определения того, какой php-файл должен быть вызван. Не вызывайте действие скрытого поля, если вы отправляете форму с помощью Ajax, потому что это может вызвать конфликт. Кроме того, я установил файл .htaccess для удаления расширения php, поэтому вам может потребоваться добавить .php к action в свой HTML-код.

Вот action.php :

 if (!empty($_POST['i-action'])) { $action = str_replace('.', '', $_POST['i-action']); $action = str_replace('/', '', $action); if (file_exists("../secret/directory/structure/$action".'.php')) require_once("../secret/directory/structure/$action".'.php'); } 

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

Файл должен быть доступен из Интернета.
Если каталог «за пределами корня» означает вне DocumentRoot, это не будет возможным.

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