【问题标题】:XAMPP Issue When Including PHP File Located Outside DocumentRoot包含位于 DocumentRoot 之外的 PHP 文件时的 XAMPP 问题
【发布时间】:2017-12-02 16:04:24
【问题描述】:

我在 Windows 10 机器上运行 XAMPP(版本 7.0.18)。我的桌面上有一个名为“site”的文件夹,其中包含“DocumentRoot”文件夹。 “DocumentRoot”文件夹的路径在 httpd.conf 文件中设置:

DocumentRoot "C:\Users\Username\Desktop\site\DocumentRoot"
<Directory "C:\Users\Username\Desktop\site\DocumentRoot">
    Options Indexes FollowSymLinks Includes ExecCGI    
    AllowOverride All    
    Require all granted
</Directory>

我正在尝试在“DocumentRoot”文件夹中的 HTML 文件中使用 AJAX 来返回来自 PHP 文件的响应。如果 PHP 文件位于“DocumentRoot”文件夹中,它可以正常工作,但如果它位于“DocumentRoot”文件夹之外(例如 C:\Users\Username\Desktop\site\includes)并被另一个包含PHP 文件位于“DocumentRoot”文件夹中。例如,我尝试了在 php.ini 文件中设置的以下 include_path:

include_path = ".;c:\Users\Username\Desktop\site\includes"

尽管在 php.ini 文件中将 error_reporting 设置为 E_ALL,但返回的唯一错误是通过 PHP 错误日志(似乎与脚本超时有关 - memory_limit 设置为 1M 以减少 PHP 错误之前的时间)呈现):

“PHP Fatal error:  Allowed memory size of 2097152 bytes exhausted (tried to allocate 4096 bytes) in C:\Users\Username\Desktop\site\DocumentRoot\test.php on line 1.”  

从包含文件夹中删除/重命名 PHP 文件以及删除/重命名包含文件夹本身对错误没有影响。我希望看到一些错误,指出找不到文件或目录,但没有。

我是 XAMPP 的新手,无法弄清楚这一点。虽然我没有在生产服务器上尝试过这种确切的情况,但我过去使用过 AJAX,在生产服务器上没有出现此类问题。任何建议将不胜感激。

更新 1

“DocumentRoot”文件夹(“test.php”)中的 PHP 文件试图将 PHP 文件包含在“DocumentRoot”文件夹(“test-process.php”)之外,在第 1 行具有以下内容:

<?php include 'test-process.php'; ?>

更新 2

我尝试在“test.php”文件中使用“include_once”(而不是“include”)并且没有给出错误。因此,“允许的内存大小...”错误可能是由于尝试重复包含“test-process.php”文件引起的。

但我仍然不明白为什么没有给出错误。我什至可以将 include_path 更改为不存在且不给出错误的内容。

更新 3

为了响应 cmets,创建了“test.php”和“test-process.php”作为一个简单的测试用例。如上面“更新 1”中所述,“test.php”文件只有一行代码和包含语句。 “test-process.php”文件具有以下内容,以 JSON 格式返回消息:

<?php
  $output['message'] = 'Hello World';
  echo json_encode($output);
?>

【问题讨论】:

  • Allowed memory size of ### bytes exhausted 与错误包含的文件无关。检查这个文件在做什么。似乎您正在尝试向内存中添加太多信息(例如,具有太多信息的数组)
  • 我的更新显示它只是试图包含一个 PHP 文件。正如我在最初的问题中提到的那样,无论“test-process.php”文件(试图被包含)是否存在,都会给出错误,所以该文件试图做什么似乎无关紧要。
  • 仅通过包含 PHP 文件是不可能达到内存限制的。你的文件在做什么?如果没有过度使用数组,请检查所有循环。尽可能频繁地取消设置/重置变量。
  • 唯一涉及的文件是“test.php”和“test-process.php”文件。我已经更新了问题以显示“test-process.php”文件的内容。没有循环或其他代码。关于您关于单独包含无法达到内存限制的评论,知道为什么在使用“include_once”与“include”时不会引发错误吗?

标签: php ajax xampp


【解决方案1】:

原来我无意中在名为“test-process.php”的根目录中留下了“test.php”文件的副本,因此它不断运行包含语句,直到达到内存限制。

两种可能的解决方案:

  1. 从根目录中删除“test-process.php”文件(带有include语句)

  2. 更改php.ini文件中设置的include_path,排除根目录:

    include_path = "c:\Users\Username\Desktop\site\includes"

【讨论】:

    猜你喜欢
    • 2013-02-17
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多