一些 PHP 包含工作,其他的会导致它们之后的所有代码停止工作

问题描述

我是编码新手,主要是通过 W3Schools 等自学,所以请耐心等待。

我有一个使用 Linux 系统的 VPS。我正在为桌面 RPG 创建一个网站。我的网页文件主要是用 html 编写的,但是是 .PHP 文件,因为我想使用其中的一点(主要是“include”函数,这是我的问题的根源)。由于Linux,当我将这些文件上传到服务器时,我进入“home”文件夹,然后是一个以我的用户名命名的文件夹,然后是“public_html”文件夹,所以如果我正确理解术语,我应该参考将 public_html 作为“根目录”。

所以在那个根目录中,我有各种文件夹和前面提到的 .PHP 文件,它们创建了我的网站结构,所有这些都运行良好;该网站可在线查看。对于我的网页,我使用 include 函数在每个页面上包含页眉、页脚和侧边栏内容效果很好。

在根目录下,我创建了一个名为“obj”的文件夹。这包含大量小的 .PHP 文件,它们不是完整的网页,而每个文件仅包含一组代表 RPG 角色统计信息的变量。例如,一个名为“obj.StickmanSoldier.PHP”的文件具有以下内容

<?PHP include 'class.Character.PHP';
$stickmansoldier = new Character();
$stickmansoldier->name = array('Stickman Soldier','Standard Stickman Soldier');
$stickmansoldier->affinity = 'Ice';
$stickmansoldier->xp = 19;
$stickmansoldier->hp = 20;
$stickmansoldier->vp = 20;
$stickmansoldier->mp = 5;
$stickmansoldier->attack = 2;
$stickmansoldier->strength = 4;
$stickmansoldier->handeye = 5;
$stickmansoldier->platform = 3;
$stickmansoldier->weight = 3;
$stickmansoldier->icemod = '+2';
?>

我想澄清一下,“class.Character.PHP文件看起来像这样:

<?PHP class Character {
public $name='???';
public $player='Maestro';
public $affinity='Earth';
public $level=0;
public $xp=0;
public $hp=1;
public $badge_hp=1;
public $current_hp=0;
public $vp=0;
public $badge_vp=0;
public $current_vp=0;
public $mp=0;
public $badge_mp=0;
public $current_mp=0;
public $status='normal';
public $bal=0.00;
public $attack=1;
public $magic=1;
public $defense=0;
public $brain=1;
public $strength=1;
public $handeye=1;
public $platform=1;
public $kNowledge=1;
public $cLever=1;
public $charisma=1;
public $weight=1;
public $ap=0;
public $earthmod='--';
public $icemod='--';
public $watermod='--';
public $windmod='--';
public $firemod='--';
public $thundermod='--';
public $poisonmod='--';
public $plantmod='--';
} ?>

因此,在网页文件中,我可以使用 <?PHP include 'obj.StickmanSoldier.PHP';?> 调用这些统计信息,然后使用其他代码(如 PHP 的“echo”)将它们显示在该页面上。如果页面在子文件夹中,它可能看起来像 <?PHP include '../../obj.StickmanSoldier.PHP';?> ,但您明白了。它与我用于页眉和页脚等内容的包含方法相同,并且适用于这些方法。当我调用这些统计文件之一时,它也能正常工作。

一个

如果我在同一个网页上包含多个这些 stat 文件,那么突然之间,第二个包含之后页面上的所有代码都停止工作,给我一个几乎空白的页面。或者,如果我将包含内容放在中间,则是半空白页。

现在,当我说“第二个包含”时,它忽略了页眉和页脚内容的包含,因为它们就在那里,就像它们在所有其他网站页面上一样。如果我只包含 obj 文件夹中的一个 stat 文件,那么一切正常;我可以通过使用该统计文件中定义的变量以各种形式显示这些统计信息。但是当我尝试在同一个网页文件中包含多个 stat 文件时......它会这样做。

我检查了拼写错误,并切换了我包含的统计文件,所以这不是一个特定统计文件的问题。 obj 文件夹中有 983 个文件,所以...我希望我不必编辑所有这些文件。但似乎内容不是问题。包含函数的某些事情变得很棘手。

我还没有创建 PHP.ini 文件,所以如果我有一个,它只是我的服务器附带的文件。我也只将 stat 文件命名为“obj.Whatever.PHP”,因为我看到有人在某处这样做; “对象”。 part 对我正在做的任何事情都不起作用,所以我可以在需要时更改名称,如果由于某种原因额外的点导致了问题。但是鉴于其中一些包含确实有效,这些解释都没有意义。

我的网站在 http://arpeggiosystem.com/ ;它不完整,所以一些链接被破坏了,但如果你想看看我描述的这种包含导致的半空白页面现象的结果,请转到http://arpeggiosystem.com/default/enemy/stick.php

EDIT: Ohhhhh... 是不是因为所有的 stat 文件都使用 include 函数调用文件?在同一个页面上被多次调用是不是不喜欢?

解决方法

空白页面很可能是导致 PHP 解析器错误的原因。为了能够调试脚本,您需要设置错误报告。您可以通过在 php.ini 文件或 index.php 中进行设置来完成此操作。仅使用这两种方法中的一种。

一旦设置了错误报告,它就会显示错误,并且可以更轻松地跟踪脚本中的错误。 Have a look here 了解如何处理您的错误,并理解它们的含义。

确保您没有在实时网站上留下错误报告。在您机器上的开发文件夹中使用它。

在您的 php.ini 文件中尝试将这两行编辑为如下所示。

error_reporting = E_ALL
display_errors = 1

或者在页面顶部的 index.php 文件中包含 2 行。

<?php
error_reporting(E_ALL);
ini_set("display_errors",1);