【问题标题】:PHP require does not work in root folderPHP require 在根文件夹中不起作用
【发布时间】:2016-07-06 22:24:25
【问题描述】:

当用户单击表单上的提交按钮时,我使用它来要求文件。此代码位于 blog.php 中。当我在文件夹 /includes/ 中有这个文件时,代码可以完美运行,但我希望这个文件位于根文件夹中。当我将它添加到根文件夹时,我收到此错误:

警告:要求(../includes/addbloguser.php):无法打开流: C:\xampp\htdocs\Pentaslash\blog.php 中没有这样的文件或目录 第 27 行

致命错误:require():需要打开失败 '../includes/addbloguser.php' (include_path='.;C:\xampp\php\PEAR') 在 C:\xampp\htdocs\test\blog.php 第 27 行

<?php
    if(isset($_POST["submit"])){

      require '../includes/addbloguser.php';
    }
?> 

【问题讨论】:

  • 您可能应该从文件路径中删除..。请记住:始终使用绝对文件路径。
  • 即使我删除它,它也不会改变错误信息。我不明白为什么会这样,我使用 PDO 重要吗?
  • 这与 PDO 无关。这都是关于文件系统的。只需使用绝对路径,您就不会遇到这个问题。在全局 php 文件中定义一个常量,其中包含项目根目录的绝对路径,然后您就可以使用该常量。
  • 绝对路径似乎起到了作用,非常感谢匹配 =)

标签: php require


【解决方案1】:

这是使用相对文件路径引起的问题。当文件blog.php 位于文件夹includes 中时,您的相对文件路径有效,因为使用../,您将向上一个目录(到您的根目录),然后返回includes。但是由于您将文件向上移动了一个目录(到您的根目录),您将使用../ 向上移动一个目录,在您的根目录之外,然后尝试进入文件夹includes,但该文件夹不存在在你的根目录上面的目录中(好吧,如果你幸运的话,它确实存在,但文件不存在或者它存在但错误的文件)。

为防止这种情况,您应该始终使用绝对文件路径,这样您就可以将 blog.php 移动到任何地方,只要您的文件 addbloguser.php 保持在同一位置。

获取项目的绝对文件路径的一种简单方法是在项目根目录的全局文件中定义一个评估为dirname(__FILE__)) 的常量。这样,您始终可以使用该常量来处理文件,并防止在您更改某些内容时修改文件以更正相对文件路径。

例如global.php 在你的根目录里,那么你就写这个

define('IN_DIR', dirname(__FILE__)); //__FILE__ is a magic constant and includes the absolute filepath to the current file -> global.php

如果您现在在blog.php 中包含上述文件global.php(或相反),您可以为您的文件路径使用定义的常量,它看起来像这样

require IN_DIR.'/path/to/file.php'

在这种情况下是

require IN_DIR.'/includes/addbloguser.php'

【讨论】:

    【解决方案2】:

    根据你的评论,不应该是:

    require './addbloguser.php';
    

    尝试使用

    require __DIR__ . '/addbloguser.php'; 
    

    require dirname(__FILE__) . '/addbloguser.php';
    

    这样您就可以获得更好的错误消息并查看缺少的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      相关资源
      最近更新 更多