【问题标题】:PHP - Going back directoriesPHP - 返回目录
【发布时间】:2014-09-03 05:57:42
【问题描述】:

我在尝试包含/需要 2 个目录的 php 脚本时遇到了一些问题。这不是一个真正的问题,因为我想出了一个解决方法,但是我很想解释发生了什么。

这是文件结构:

  • 应用代码
    • db.php(我试图包含的文件)
  • 学生管理
    • index.php
    • 深度
      • getData.php(我正在尝试将 db.php 包含到的文件)

我想在studentManagement/dep/getData.php 中包含appCode/db.php。

getdata.php is executed with ajax from index.php

当我使用时:

require_once("../../appCode/db.php");

它不起作用。

唯一可行的方法是我先更改目录:

chdir("../");
require_once("../appCode/db.php");

为什么第一种方法不起作用?我也尝试过使用 include 而不是 require 但它是一样的。我正在 mamp 3.0.4 上对其进行测试。

任何帮助表示赞赏!

【问题讨论】:

  • 使用单个“.”可能是? => "././appCode/db.php"
  • 使用单个“.”不幸的是没有工作。

标签: php require chdir


【解决方案1】:

那是因为当您 require(),include() 及其变体时,它始终与调用的初始 php 文件相关(在您的情况下为 index.php)

其实chdir跟这无关,还有这个:

require_once("../appCode/db.php");

是正确的称呼方式。

当您需要文件并使用目录时,请始终将您的精神自我 (!) 视为 index.php。您的“活动目录”是放置 index.php 的目录。您始终可以使用 getcwd() http://php.net/manual/en/function.getcwd.php 验证此当前工作目录

【讨论】:

  • 对不起,我应该提到 getdata.php 是使用 index.php 中的 ajax 执行的。所以上面就不解释了。如果我删除 chdir("../"); ,脚本失败,文件不包括在内。
  • @mickzer 你能用这个非常相关的信息更新你的问题吗?最重要的是用 ajax 调用的确切路径?
  • 我有。 index.php中使用ajax执行dep/getData.php
  • ajax 是本地浏览器使用的概念。 php 文件不执行 ajax。你能用他的参数发布实际的ajax调用(来自jquery的javascript)吗?是不是直接指向index.php?
  • 感谢您指出大写的 A。我也非常熟悉 Ajax,而且我也从未提到它发生在 php 文件上 :) 我的意思是执行ajax 请求位于
【解决方案2】:

如果您从根目录一直了解整个目录,则可以使用:

http://php.net/manual/en/function.set-include-path.php

现在您可以始终包含或要求从您的包含路径开始的文件,而不是使用相对路径。

你可以把它放在 getData.php 中:

set_include_path ('/homepages/www/2/yourworkingpath');//Use your own directory
require_once 'appCode/db.php';

如果您需要包含,您也可以在其他文件中执行相同的操作,并且它将始终使用您的包含路径,因此您不必一直弄清楚要更改到哪个目录。希望这会有所帮助。

【讨论】:

  • 这不能回答问题。我试图解释上述行为。它适用于我的工作 O 只是想知道为什么。
猜你喜欢
  • 2014-02-08
  • 2019-07-13
  • 1970-01-01
  • 2011-08-13
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-11
相关资源
最近更新 更多