【问题标题】:PHP dir/file hierarchy with "include" and (dirname(__FILE__) . 'SOMETHING')带有“include”和(dirname(__FILE__)。'SOMETHING')的PHP目录/文件层次结构
【发布时间】:2015-07-31 10:57:22
【问题描述】:

感谢您的时间和关注。

我正在使用一个 php 站点,我想在其中集成我在网上找到的没有 mySql 数据库的留言簿。

我的网站结构如下:

host.../myDir/fileA.php (here we have all the basic files of the site)

我要集成的留言簿第一个文件位于此处:

host.../myDir/gbook/gbook.php 

在 gbook 目录下还有另一个名为 template 的目录,其中包含图形所需的所有内容(很明显)。

在 fileA.php 中我插入了这个包含命令:

require_once "gbook/gbook.php";

在 gbook/gbook.php 里面有这个命令:

$settings['tpl_path'] = './templates/'.$settings['template'].'/';

现在我已经阅读了 (include(dirname(FILE). '...') 的 php 指南,并且我还阅读了您对这个命令的多个解释,所以我已经测试过了这个:

 $settingsBase['tpl_basepath'] = (dirname(__FILE__) . '/');
 $settings['tpl_path'] =  $settingsBase['tpl_basepath'].'templates/'.$settings['template'].'/';

但适用于集成但不适用于图形。 所以这是我不理解的,也是我理解的。

当您在另一个文件中“包含”一个文件时,编译器会读取代码,因为它是同一文件的一部分。 那就是问题所在。当您包含位于另一个 /dir 中的内容时,编译器会获取文件,而不是整个结构,因此如果包含文件中存在另一个“包含”,编译器将在包含器文件所在的 /dir 中查找它。对吗?

所以存在 dirname() 命令对吗? 我的意思是使用 dirname() 告诉编译器我想要包含此文件 /dir/file.php 以及之后的所有内容以及包含在包含的第一个文件中的所有内容是否应该保持相同的 /dir 结构?

如果有这样的结构:

host.../myDir/fileA.php

这个文件包含命令:

include gbook/fileB.php

这个文件包含命令:

include /template/all_the_other_files.php

完整的结构是:

(1) host...  
   (2) /myDir (where_there's_site)
      (3) /gbook (where_there's_base_gbook_structure)
         (4) /template (where_there's_template)
            (5) /others dir (where_there's_pics_smiles_etc...)

我如何告诉编译器“嘿,当您包含 gbook/gbook.php”时,gbook.php 中包含的所有内容都必须在主机.../myDir/gbook/...中找到?

我知道这对你来说可能真的很简单,但我正在努力克服这个问题,但我无法理解问题的基本解决方案和解释。

谢谢。

【问题讨论】:

    标签: php include dirname


    【解决方案1】:

    首先,我建议使用 require_once 而不是 include。如果找不到所需的文件,它会引发错误,并且您不需要关心多个包含。

    我认为你只需要在你的 gbook/fileB.php 中使用它:

    require_once __DIR__ . /template/all_the_other_files.php;
    

    如您所见,您可以在较新的 PHP 版本中使用 DIR 魔术常量来代替 dirname(FILE)。使用它,您可以很容易地实现相对路径的包含。希望对您有所帮助。

    【讨论】:

    • 谢谢。经测试。它还不起作用,但我认为 DIR 命令存在问题。该命令返回文件的物理位置对吗?可能这就是为什么它找不到需要归档的原因。事实上,回声检查返回:对于 book.php 文件
      /membri/esimeconomytools/esdea/gbook/gbook.php (and it's found)
      对于一个必需的文件:
      /members/myName/myDir/gbook/templates/default/overall_header.php (and it's not found)
      但我需要的文件在这里:
      http://myName.host.org/myDir/gbook/templates/default/overall_header.php
      我该怎么办?
    • 需要区分服务器路径和URL。对于 PHP 中包含(或必需)的文件,您始终需要服务器路径。是的,DIR 魔术常量为您提供了它所使用的 PHP 文件的物理文件夹。
    • 但是为什么如果我使用 DIR 它说即使路径似乎正确也找不到文件?
    • 那么肯定有某种错误输入。在我看来,第二个包含 DIR 是不正确的。必须带有双前导和尾随下划线(很难在此编辑器中输入。)
    猜你喜欢
    • 2014-02-26
    • 2011-02-14
    • 1970-01-01
    • 2010-10-14
    • 2014-02-04
    • 2012-10-23
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多