4

我想知道,有一些文件我保存在根目录之外的不同目录中,我正在尝试使用 HTML 表单将信息发布到位于根目录之外的 php 文件

那可能吗?如果是这样,怎么做?

4

4 回答 4

7

制作一个代理脚本......它位于web 目录中,但它所做的只是包含适当的“受保护”文件:

DOCROOT/form_handler.php

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

DOCROOT/form.html

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

实际上,这就是设置了多少个站点(至少本质上是这样)。像这样将大部分脚本放在 DOCROOT 之外是很典型的,因为在 Apache 或类似软件不解析您的 PHP(即,如果配置错误)的罕见情况下,它不会无意中发送您的源代码。

于 2012-07-09T07:08:03.110 回答
2

在我的网站上,每个表单都以以下代码开头:

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

这避免了对多个代理脚本的需要,因为action.php将使用隐藏字段的值来确定应该调用哪个 php 文件。action如果您使用 Ajax 发布表单,请不要调用隐藏字段,因为它可能会导致冲突。此外,我已将.htaccess文件设置为删除 php 扩展名,因此您可能需要在 HTML 代码中添加.phpto action

这里是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确保黑客不能遍历到不同的目录。

于 2016-04-29T14:46:27.840 回答
1

是的,这是可能的。该目录应作为单独的站点托管,然后您可以将文件的绝对 URL 作为表单操作提供

于 2012-07-09T07:09:45.747 回答
0

该文件必须可从 Web 访问。
如果“root 之外”目录意味着 DocumentRoot 之外,这是不可能的。

您可以在 DocumentRoot 中有一个基本控制器,其中包含或调度操作。

于 2012-07-09T07:10:06.507 回答