使用根目录外的php文件的HTML表单操作?

时间:2012-07-09 07:05:40

标签: php html forms post include

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

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

4 个答案:

答案 0 :(得分:6)

创建一个代理脚本......在web目录中 的东西,但它只是包含相应的“受保护”文件:

DOCROOT / form_handler.php

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

DOCROOT / form.html

...
<form action="form_handler.php">
...
实际上,这是设置了多少站点(至少在本质上)。通常将大多数脚本放在DOCROOT之外,因为在极少数情况下,Apache或类似程序不会解析您的PHP(即,如果配置错误),它不会无意中发送您的源代码。

答案 1 :(得分:2)

在我的网站上,我从这段代码开始的每一个表单:

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

这避免了对多个代理脚本的需要,因为action.php将使用隐藏字段的值来确定应该调用哪个php文件。如果您使用Ajax发布表单,请不要调用隐藏字段action,因为它可能会导致冲突。另外,我已设置.htaccess文件以删除php扩展程序,因此您可能需要在HTML代码中将.php添加到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来确保黑客无法遍历不同的目录。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

该文件必须可从网上访问 如果“Root之外”目录意味着在DocumentRoot之外,那么这是不可能的。

你可以在DocumentRoot中拥有一个基本的Controller,它包含或调度动作。