PHP中的混淆URL include_once

时间:2017-06-24 18:06:24

标签: php

我知道这不是使用stackoverflow的正确方法,但我只需要快速回答我的问题

这是文件夹层次结构

login (folder)
  -- login.php
php (folder)
  -- connection.php

index.php
在login.php中

我使用include_once("../php/connection.php")

index.php中的

我使用include_once("login/login.php")

当我运行index.php时,我得到以下问题

警告:include_once(../ php / connection.php):无法打开流:第3行的/.../public_html/plog/login/login.php中没有此类文件或目录

提前感谢您的帮助:)

3 个答案:

答案 0 :(得分:2)

你更接近最佳答案,但更好的模式是:

您创建一个引导脚本并将其放在已知位置。为了实现这一点,所有重要的是每个脚本都需要require_once()相对于该脚本的引导程序文件。

大多数框架都使用前端控制器模式,这是MVC框架的典型入口点,但即使这对你来说太复杂了,只要总是require_once('../ somedir / bootstrap),这种技术仍然有效。 .PHP');

bootstrap.php脚本是任何配置设置,读取环境变量,设置常量等的好地方。

一开始你想要有这样的东西:

if (!defined('ABSPATH')) {
    define('ABSPATH', dirname(__FILE__) . '/');
}

所以现在,重要的是你了解任何其他文件与bootstrap.php所在目录之间的关系。比如说,你把它放在login.php目录中。

然后你的require_once()将是:

require_once(ABSPATH . login.php);

对于连接,它将是:

require_once(ABSPATH . '../php/connection.php');

如果您的系统在没有包含文件的情况下实际上无法正常运行,我强烈建议使用require_once over include_once,因为如果您无法在登录时连接到数据库,可能会这样做。 require_once将导致运行时错误,而include_once只是继续它的快乐方式,无论它是否可以实际找到并包含该文件。

说实话,不是你的目录命名的忠实粉丝。一个名为/ php的目录?这告诉你什么?这不是所有的PHP代码吗?

人们已经对良好的结构进行了大量的思考,然后是PSR的努力,作曲家等。拿a look at this来获得更好的计划。

答案 1 :(得分:1)

我使用常量BASE_URL更新代码,您将定义根,以便您可以从其他站点使用它

<?php
 define('BASE_URL', 'http://example.com');
 include(BASE_URL."/php/connection.php");
?>

答案 2 :(得分:0)

我做了一些研究,发现最好的方法是做到这一点,而不必声明任何常量如下:

在login.php中的

我以这种方式include_once( substr(__DIR__, 0, strrpos(__DIR__, "/") + 1 ) . "php/connection.php");

包含connection.php

所以这将解决整个问题。我没有必要定义任何东西。现在我几乎可以在任何地方复制这个子文件夹而无需改变任何内容。