-4

我已经定义了 2 个变量,联系人和衬衫。如您所见,它们也在标题中的 li 中。我仍然收到两个变量都未定义的消息。

我收到此错误消息:

( ! ) SCREAM: ( ! ) 忽略错误抑制

注意:未定义变量:第 17 行 C:\wamp\www\Test\shirts4mike\inc\header.php 中的部分

调用堆栈#TimeMemoryFunctionLocation 10.0003243592{main}( )..\index.php:0

20.0006246920 包括('C:\wamp\www\Test\shirts4mike\inc\header.php')..\index.php:3 ">

第 18 行也是如此。

衬衫.php

     <?php
            $pageTitle = "Mike's Full Catalog of Shirts";
            $section = "shirts";
            include('inc/header.php'); ?>

                    <div class="section page">
                            <h1>Mikes&rsquo;s Full Catalog of Shirts</h1>
                    </div>

            <?php include ('inc/footer.php'); ?>

联系人.php

<?php
    $pageTitle = "Contact Mike";
     $section = "contact";
     include('inc/header.php'); ?>

           <div class="section page">

           <h1>Contact</h1>

           </div>


<?php include ('inc/footer.php'); ?>

header.php

<html>
        <head>
                <title> <?php echo $pageTitle ?></title>
                <link rel="stylesheet" href="css/style.css" type="text/css">
                <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Oswald:400,700" type="text/css">
                <link rel="shortcut icon" href="favicon.ico">
        </head>
        <body>

                <div class="header">

                        <div class="wrapper">

                                <h1 class="branding-title"><a href="./">Shirts 4 Mike</a></h1>

                                <ul class="nav">
                                        <li class="shirts <?php if ($section == "shirts"){ echo "on"; } ?>"><a href="shirts.php">Shirts</a></li>
                                        <li class="contact <?php if ($section == "contact"){ echo "on"; } ?>"><a href="contact.php">Contact</a></li>
                                        <li class="cart"><a href="#">Shopping Cart</a></li>
                                </ul>

                        </div>

                </div>

                <div id="content">
4

2 回答 2

5

当您SCREAM在这样的 PHP 错误消息中看到时,是由于以下情况:

  1. 你已经安装了 PHP 的 xDebug 扩展。
  2. xDebug 被配置为防止错误抑制。
  3. 您的 PHP 代码正在尝试使用符号或其他错误抑制机制来抑制错误消息@,而 xDebug 正在覆盖它。

xDebug 是一个 PHP 扩展,旨在帮助调试 PHP 程序。它通常不应该安装在生产系统上;仅在开发系统上。

xDebug 有一个名为“Scream”的设置,旨在防止错误被抑制。这再次旨在用于开发系统。开发人员可能希望在正常情况下抑制错误,但在调试时查看这些错误很有用。因此,尖叫设置覆盖了 PHP 隐藏错误消息的所有正常方式。这对于调试很有用,但在生产系统上却是一件可怕的事情。

xDebug 永远不应该安装在面向公众的生产服务器上,因此如果这描述了您的系统,您应该删除它,或者要求将其删除。这可以像修改 PHP.ini 文件以删除对 xDebug 的引用一样简单(尽管这只会禁用扩展而不是卸载它)。

如果它已安装并且您对此无能为力,那么您需要找到一个不会在生产系统上安装开发工具的更好的 Web 主机。


说了这么多,如果您收到消息 that $section is undefined,那么它确实意味着代码中存在需要修复的错误。

错误发生在 中header.php,当它包含在 中时index.php

您向我们展示了shirts.phpcontact.php,两者都设置$section正确。您没有向我们展示index.php,但我猜它包含header.php与其他人相同的方式,但不像$section其他人那样设置。

因此,您可以通过编辑来修复错误index.php,使其$section以与其他页面相同的方式设置。即使它只是将其设置为空白字符串,也足以修复错误。

我希望这会有所帮助。

于 2013-01-24T15:28:21.607 回答
2

您正在查看错误的文件

堆栈跟踪表明包含两个文件以获取此特定错误(以相反的顺序):

  • inc\header.php
  • index.php

在问题中,index.php未显示 - 但很可能您有:

<?php
$pageTitle = "something";
include('inc/header.php');

即缺少的变量在您正在执行的代码中使用之前未声明。

尖叫

尖叫是一个扩展,它忽略了@操作符的使用——即在代码中的某个地方正在执行,它正在被使用,通常认为忽略错误是不好的做法。但是,您可以关闭尖叫声- 这适用于生产/实时应用程序,但当然应该解决错误/警告/通知。

于 2013-01-24T15:35:51.783 回答