【问题标题】:php require not working after load() method to refresh a divphp 要求在 load() 方法刷新 div 后不工作
【发布时间】:2013-12-16 02:16:12
【问题描述】:

我的 div 里面有一个 php 需要

require('inc/coreturni/list.php');

这又需要一个数据库连接

require('inc/connect.inc.php');

当我加载页面时它们都可以工作。

但如果我尝试刷新 div,通过在单击事件后刷新第一个包含文件,使用 jquery load()

我收到以下路径错误:

警告:require(inc/connect.inc.php):无法打开流:第 2 行的 C:\xampp\htdocs\taximat\inc\coreturni\list.inc.php 中没有这样的文件或目录

致命错误:require():在 C:\xampp\htdocs\taximat\inc\ 中打开所需的 'inc/connect.inc.php' (include_path='.;C:\xampp\php\PEAR') 失败coreturni\list.inc.php 在第 2 行

为什么路径应该不同?我该如何解决?

【问题讨论】:

  • 使用绝对路径而不是相对路径
  • 我不喜欢使用绝对路径,我想了解和了解它为什么不起作用
  • 为什么说绝对?如果他这样做,他的代码将根本无法移植。只是对您的回答有点困惑。
  • 可以动态定义绝对路径
  • @Gabz 你不必喜欢他们就可以使用它们。显然你的路径是错误的,定义它在哪里的最好方法是使用完整路径。

标签: php jquery path


【解决方案1】:

你的错误说明了一切:

警告:需要(inc/connect.inc.php):无法打开流:没有这样 文件或目录在 C:\xampp\htdocs\taximat\inc\coreturni\list.inc.php 在第 2 行

致命错误:require():打开失败需要'inc/connect.inc.php' (include_path='.;C:\xampp\php\PEAR') 在 C:\xampp\htdocs\taximat\inc\coreturni\list.inc.php 在第 2 行

注意它说在这个目录中找不到inc/connect.inc.php

C:\xampp\htdocs\taximat\inc\coreturni

这是因为您的 require 语句指的是相对路径。所以当文件list.inc.php被加载时,require假设inc/connect.inc.php位于C:\xampp\htdocs\taximat\inc\coreturni。这就是它失败的原因。

您应该像这样在您的应用中设置基本路径。请注意,在这种情况下,我不清楚正斜杠或反斜杠语法,因为我主要在 Mac 和 Unix 系统上工作,错误显示 Windows 路径,但 PHP 显示的是 Unix 路径。

$BASE_PATH='/xampp/htdocs/taximat/inc/coreturni/';

要求所有文件如下:

require($BASE_PATH . 'inc/coreturni/list.php');

像这样:

require($BASE_PATH . 'inc/connect.inc.php');

这样无论从哪里调用文件,require 都将使用文件的绝对路径。由于$BASE_PATH 是你设置的一次性变量,你可以在你的主配置文件中设置它而不用担心它。要使代码可移植,只需根据系统设置更改$BASE_PATH

【讨论】:

  • 将它放在一个所有文件都使用的公共文件中。如果一个不存在,创建一个。并且也许使用require_once 而不是require 以避免在意外加载多次时发生冲突。
【解决方案2】:

第一次显示页面时,你的路径是这样的:

page.php
inc/
    coreturni/
        list.php
    connect.php

换句话说,所有require 语句都是相对的,如page.php 所见。

但是,当你直接使用 AJAX 请求 list.php 时,它看起来更像这样:

list.php
../
    connect.php

现在,require 应该是 ../connect.php

解决方案

解决此问题的一种方法是根据当前正在处理的文件(即list.php)计算绝对路径,如下所示:

require dirname(__DIR__) . '/connect.php';

dirname(__DIR__) 构造将始终生成文件系统上比当前脚本所在的目录高一级的目录。

【讨论】:

  • 你的意思是dirname(__FILE__) 对吗?此外,__FILE__ 的魔法常数的问题在于“包含已解析符号链接的绝对路径”,这可能会破坏将未解析符号链接用作路径的系统。更多信息:php.net/manual/en/language.constants.predefined.php
  • @JakeGould 不,是dirname(__DIR__),否则你会再次进入同一个目录。此外,尽管您对正在解析的符号链接可能是正确的,除非它们出现在您的项目中(恕我直言),否则您应该没问题。
  • 好吧,一切都很好。但是,如果包含和目录的嵌套深度超过 1 或 2 层呢? dirname(__DIR__) 只呈现下一个级别?
  • @JakeGould 这不是问题吗? :) 很明显,您将使用根路径常量或使用单个前端控制器……也就是说,dirname(dirname(__DIR__)) 可能是我接受的极限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2011-03-18
相关资源
最近更新 更多