1

感谢您的时间和关注。

我正在使用一个 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 中包含的所有内容都必须在 host.../myDir/gbook/... 中找到?

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

谢谢。

4

1 回答 1

0

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

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

require_once __DIR__ . /template/all_the_other_files.php;

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

于 2015-07-31T11:27:33.920 回答