【问题标题】:How can I access files outside webroot within an HTML tag?如何在 HTML 标记中访问 webroot 之外的文件?
【发布时间】:2013-04-30 21:09:43
【问题描述】:

我在共享主机上,无权访问 php.ini 或 apache 配置文件。我有 PHP 类文件存储在 webroot 之外,我需要使用 HTML 访问这些文件,我知道

<form action="../../classes/someclass.php" method="post">

不会工作。

我必须编写什么样的 PHP 脚本才能访问这些文件?

【问题讨论】:

  • 你不能。如果你想要一些东西可用 - 为什么不把它放在 webroot 下
  • 我无法创建 PHP 脚本来执行此操作?
  • 解释原任务
  • 这不是一个任务,而是一个解决方案。解释你为什么需要它。解释为什么你不能把所有文件都放在 webroot 下
  • 它什么也解释不了。所以?您想将它们提供给客户。是从 webroot 还是从更高级别的目录提供服务有关系吗?再说一遍,你想做什么

标签: php html forms public-html


【解决方案1】:

您需要编写一个可访问的控制器或代理,并将请求路由到所需的类。

/someclassproxy.php

在该脚本中,您将拥有:

require '../../classes/someclass.php';

但是,让内部类直接处理请求并不常见。相反,控制器应该使用该类来处理请求。

【讨论】:

  • +1 可以避免 -1,但仍然 - 我们最好解决真正的问题
  • @zerkms 谢谢。你说得有道理,所以我添加了一小段内容,介绍了使用内部类作为控制器的潜在问题。
【解决方案2】:

您不能 POST 到嵌套文件,但可以访问指定共享目录中的文件。

假设您可以访问home/var/www/ 或类似的东西。并且无法访问 www 以上。

您的网站可能位于该级别的目录中,因此您的网站将位于

home/var/www/yoursite

现在,假设您在 www 文件夹中有一个名为 config.php 的文件。假设您在 yoursite 文件夹中还有一个名为 post.php 的文件。

post.php 可以很容易地包含 config.php:

<?php 
include('../config.php');

?>

但显然您不能发布到 config.php,因为它位于站点指定目录的上方。

但是-

我认为这对你来说不是新闻。我不确定我是否 100% 理解您的问题,因为您似乎知道的足够多,知道您可以使用 include 访问文件...

也许我只是不明白你的问题。随意澄清比你认为你已经拥有的更多。或者至少解释一下为什么你不能使用基本的包含

【讨论】:

  • 我想我可以使用包含,但我被教 PHP 的方式是将 PHP 类文件放在 webroot 之外。
  • 这就是我在这里所说的,除了 PHP 不必位于 Web 根目录之外。这是不合逻辑的。但是配置文件或敏感的东西,当然
  • 但是,如果你说你想要所有的 php 都在 web 根目录之上,那么我同意 niels。没有理由相信这一点,因为正如 cmets 中某处所提到的,将所有相关的 php 文件放在 web 根目录中是标准和常见的做法。我认为您很难找到一个另有说明的教程
  • @KaiQing:任何 PHP 文件都不应该被访问者访问,无论是数据库配置文件还是我总是放在 webroot 之外的类文件。如果访问者没有合法理由访问它们,则无需访问它们。然后我根据需要包含这些文件。我的意思是我被告知应该这样做。
  • @cryptic - 是的,我同意。此问题中的第三条评论支持该概念。
猜你喜欢
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多