包含位于DocumentRoot外部的PHP文件时的XAMPP问题

时间:2017-06-29 05:22:49

标签: php ajax xampp

我在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>

我试图在&#34; DocumentRoot&#34;中的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.”  

从includes文件夹中删除/重命名PHP文件并删除/重命名includes文件夹本身对错误没有影响。我希望看到一些错误,说明找不到文件或目录,但没有。

我是XAMPP的新手,无法解决这个问题。虽然我没有在生产服务器上尝试过这种确切的情况,但我过去使用过AJAX,在生产服务器上没有这样的问题。任何建议将不胜感激。

更新1

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

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

更新2

我尝试使用&#34; include_once&#34; (而不是&#34;包括&#34;)&#34; test.php&#34;文件,没有错误。所以也许&#34;允许的内存大小......&#34;尝试重复包含&#34; test-process.php&#34;文件。

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

更新3

在回应评论时,&#34; test.php&#34;和&#34; test-process.php&#34;被创建为一个简单的测试用例。如&#34;更新1&#34;以上,&#34; test.php&#34; file只有一行带有include语句的代码。 &#34; test-process.php&#34; file有以下命令将消息作为JSON返回:

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

1 个答案:

答案 0 :(得分:0)

事实证明,我无意中留下了&#34; test.php&#34;名为&#34; test-process.php,&#34;的根目录中的文件所以它一直在运行include语句,直到达到内存限制。

两种可能的解决方案:

  1. 删除&#34; test-process.php&#34;来自根目录的文件(包含include语句)
  2. 更改php.ini文件中的include_path集以排除根目录:

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