无法让本地主机上的 ajax 调用 require_once 工作

Posted

技术标签:

【中文标题】无法让本地主机上的 ajax 调用 require_once 工作【英文标题】:Can't get require_once called by ajax on localhost to work 【发布时间】:2013-12-16 03:02:57 【问题描述】:

我快要疯了。

我在本地有一个简单的网站,其中包含一个联系表单功能,仅适用于 php

现在我想通过 AJAX 调用它,但由于相对路径,我总是会出错。

问题是,ajax调用的php文件有两个require_once,那就不行了。

我知道我应该使用绝对路径来让它工作,我尝试了不同帖子建议的不同方法,但都会导致错误。

我尝试过使用

require_once __DIR__ . 'app/config/settings.php';

我在 index.php 中使用了define('ROOT_SYS',dirname(__FILE__).'/'); 进行 ajax 调用,并在 php 文件中有如下要求: require_once ROOT_SYS . 'class/model/contactForm.php';

以及许多其他方法,例如此问题PHP include best practices question 中推荐的方法,但均未成功。我让它们都在 php 端工作,但是当我使用 ajax 时,它总是会导致如下错误:

注意:使用未定义的常量 ROOT_SYS - 在 G:\xampp\htdocs\website.de\app\class\controller\contactForm.php 中假定为“ROOT_SYS”第 6警告:require_once(ROOT_SYSclass/model/contactForm.php):无法打开流: 中没有这样的文件或目录G:\xampp\htdocs\website.de\app\class\controller\contactForm.php6致命错误: require_once():在 G:\xampp\htdocs\website.de\app\class 中打开所需的 'ROOT_SYSclass/model/contactForm.php' (include_path='.;G:\xampp\php\PEAR') 失败\controller\contactForm.php6 行

警告:require_once(app/class/model/contactForm.php):打开流失败:G:\xampp\htdocs\website.de\ 中没有这样的文件或目录app\class\controller\contactForm.php6致命错误:require_once(): Failed opening required 'app/class /model/contactForm.php' (include_path='.;G:\xampp\php\PEAR') 在 G:\xampp\htdocs\website.de\app\class\controller\contactForm.php 上线 6

常量未定义,因为它未包含在内,或者打开流失败。

我的意思是必须有办法让它在调用 PHP 文件中使用 require_once

你有什么经验可以和我分享吗?我现在真的很绝望..:(

我的文件夹结构是这样的:

app
-class
--controller
--helper
--model
--view
-config
-template
docroot
lib
system
-css
-js
index.php

我在本地主机上的项目路径:

G:\xampp\htdocs\website.de
http://localhost/website.de/

我的 ajax 调用

$.ajax(
    type: "POST",
    url: "app/class/controller/contactForm.php",
    data: content
)

以及调用contactForm.php中的要求我是如何从一开始就拥有它们的。

require_once 'app/class/model/contactForm.php';
require_once 'app/config/settings.php';

必须有某种方法让它工作,最好是在本地和网络服务器上工作的设置。

我知道要阅读的内容很多,所以感谢您抽出宝贵时间!

【问题讨论】:

【参考方案1】:

使用__DIR__ 是要走的路。您应该详细说明该声明:

require_once __DIR__ . 'app/config/settings.php';

我猜您只是缺少/,因为__DIR__ 将为您提供一条没有尾随/ 的路径。应该是:

require_once __DIR__ . '/app/config/settings.php';

【讨论】:

感谢您的回答,但有了这个,我从一开始就收到此错误:Warning : require_once(G:\xampp\htdocs\website.de\app\class\controller/app/class/model/contactForm.php): failed to open stream: No such file or directory in G:\xampp\htdocs\website.de\app\class\controller\contactForm.php on line Fatal error : require_once(): Failed opening required 'G:\xampp\htdocs\website.de\app\class\controller/app/class/model/contactForm.php' (include_path='.;G:\xampp\php\PEAR') in G:\xampp\htdocs\website.de\app\class\controller\contactForm.php on line 6 我猜这是因为需要的文件在子文件夹中。 我留在__DIR__ 是要走的路。只要确保路径正确并且一切正常。 app文件夹和php文件在同一个文件夹吗? 正如您在我的问题中看到的那样,我通过 ajax 调用的文件在 root->app->class->controller/contactForm.php 我通过 require_once 在此文件中调用的文件在 root->app->class->model/contactForm.phproot->app->config/settings.php 抱歉,根据该信息构建路径是 1 级。(即使我妈妈也可以)。尝试一下,你会确认这一点。我只能说__DIR__ 是要走的路

以上是关于无法让本地主机上的 ajax 调用 require_once 工作的主要内容,如果未能解决你的问题,请参考以下文章

$.post & AJAX 在服务器上不工作,但在本地主机上工作正常

API调用代码在本地主机上工作但不在服务器上

本地主机上的护照谷歌oauth

无法访问本地主机上的 API 资源管理器

本地主机上 laravel 5.3 中 ajax 发布请求中的 CSRF 令牌不匹配异常

不是本地主机上的有效域 facebook