在PHP中没有命令“ include”的包含文件的任何路径

时间:2018-10-20 15:42:05

标签: php

由于当前网站已过时,我正在重建非常简单的网站。它是三年前用简单的HTML制作的,目的是显示我的照片。

我使用.shtml和命令 #include 来重复这样的元素:

<!--#include virtual="/GotoUp.xml"-->

在新版网站上,我决定尝试PHP。但是相对于路径,命令 include 的工作方式不同。它需要一个相对于当前文件的包含文件的完整路径-它不适用于我的网站,因为它进一步更改文件的方向非常复杂。

<?php include './../../../Menu.php'; ?>

如何更改开始从根方向搜索文件的搜索算法?

页面的一部分:

<body>
  <?php set_include_path ("/Menu.php") ?>  
  <?php include './../../../Metrisc/Yandex.php'; ?>    
  <div class="main">    
    <?php include './../../../Menu.php'; ?>    
    <title>Polina</title>    
    <div id="Images">
      <img class="image" src="/Image/Portrait/Polina/DSC00750_Web.jpg" width="1200" height="1200" alt="" />
      <img class="image" src="/Image/Portrait/Polina/DSC00820_Web.jpg" width="600" height="600" alt="" />
      <img class="image" src="/Image/Portrait/Polina/DSC00792_Web.jpg" width="600" height="600" alt="" />
      <img class="image" src="/Image/Portrait/Polina/DSC_2250_Web.jpg" width="600" height="900" alt="" />
      <img class="image" src="/Image/Portrait/Polina/DSC00800_Web.jpg" width="600" height="900" alt="" />
      <img class="image" src="/Image/Portrait/Polina/DSC_2253_Web.jpg" width="1200" height="795" alt="" />
    </div>   
    <?php include './../../../Contacts.php'; ?>         
  </div>
</body>

My current site。新版本page1page2

为清楚起见:摄影是我的主要爱好;我不是程序员,但是我已经开始学习javascript和PHP,将英语学习与其他有用的东西相结合,并可能在未来三年内在我的网站中创建一个交互式照片库:)

更新21.10.2018。我已经使用以下代码创建了a test page,并获取了“ getRoot()”-“ ../home/../vanirn/。 ./public_html/../Portrait/../“和 “ DIR ”-“ / home / v / vanirn / vanirntest / public_html / Image / Portrait / Polina”。我认为该功能出了问题。

<body>
  <?php function getRoot()
{
    $root = ROOT_DIR;
    $root = str_replace('\\', '/', $root);
    $pageroot = getcwd().'/';
    $pageroot = str_replace('\\', '/', $pageroot);
    $root = str_replace($root.'/', '', $pageroot);
    $root = preg_replace('#(/.*?).*?(/)#', '/../', '/'.$root);

    return substr($root, 1);
} ?>
  <div class="main">

    <?php echo getRoot(); ?>
    <p></p>
    <?php echo ROOT_DIR; ?>
    <p></p>
    <?php echo __DIR__; ?>

    <?php include getRoot().'Menu.php'; ?>

    <?php include './../../../Contacts.php'; ?>

  </div>
</body>

2 个答案:

答案 0 :(得分:1)

我为我的项目编写了一个可以使用的函数。

 /**
 * 
 * Return the root of the current page so we can call any page from any folder
 * 
 */
function getRoot(){
    $root = ROOT_DIR;
    $root = str_replace("\\", "/", $root);
    $pageroot = getcwd() ."/";
    $pageroot = str_replace("\\", "/", $pageroot);
    $root = str_replace($root."/", '' , $pageroot);
    $root = preg_replace("#(/.*?).*?(/)#", '/../', "/".$root);
    $root = substr($root, 1);
    return $root;
}

然后在根文件夹中的页面上设置此行。 **必须在您的根文件夹中定义,并且您必须在调用此函数的每个页面上包括定义文件。

 define('ROOT_DIR', __DIR__);

最后,您可以像这样调用函数

 include getRoot()."path/to/file";

基本上,该功能将添加正确数量的../,以将您设置回根文件夹。然后,您可以基于此设置所有变量。

****使用您的代码更新****

<?php

define('ROOT_DIR', __DIR__);

function getRoot(){
    $root = ROOT_DIR;
    $root = str_replace('\\', '/', $root);
    $pageroot = getcwd().'/';
    $pageroot = str_replace('\\', '/', $pageroot);
    $root = str_replace($root.'/', '', $pageroot);
    $root = preg_replace('#(/.*?).*?(/)#', '/../', '/'.$root);
    return substr($root, 1);
} 
?>
<body>
<div class="main">

<?php include getRoot().'Menu.php'; ?>

<?php include getRoot().'Contacts.php'; ?>

</div>
</body>

答案 1 :(得分:0)

我找到了更轻松的解决方案! 只需在“ .htaccess”上添加一个笔画:

php_value include_path“。:/ home / v / vanirn / vanirntest / public_html / includes /:/ home / v / vanirn / ivanpavlovphotograph.ru / public_html / includes /:/ home / v / vanirn / ivanpavlovphotograph.ru / public_html /“ 位于文件夹“ includes”中的所有文件将被加载到页面中。它既可以在服务器测试中也可以在主服务器中使用。