未定义的变量

时间:2013-01-24 14:27:52

标签: variables xdebug php

我已经定义了2个变量,包括联系人和衬衫。正如你所看到的那样,他们也在标题中。我仍然得到两个变量都未定义的消息。

我收到此错误消息:

  

(!)SCREAM:忽略(!)

的错误抑制      

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

     

Call Stack #TimeMemoryFunctionLocation 10.0003243592 {main}(   ).. \的index.php:0

     

20.0006246920 include('C:\ wamp \ www \ Test \ shirts4mike \ inc \ header.php').. \ index.php:3“>

和第18行相同。

shirts.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'); ?>

contact.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">

2 个答案:

答案 0 :(得分:5)

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

  1. 您已安装PHP的xDebug扩展程序。
  2. xDebug配置为防止错误抑制。
  3. 您的PHP代码正在尝试使用@符号或其他错误抑制机制来抑制错误消息,而xDebug正在覆盖此错误。
  4. xDebug是一个PHP扩展,旨在帮助调试PHP程序。它通常不应安装在生产系统上;仅限于开发系统。

    xDebug有一个名为“Scream”的设置,旨在防止错误被抑制。这又适用于开发系统。开发人员可能希望在正常情况下抑制错误,但在调试时查看这些错误很有用。所以scream设置会覆盖PHP隐藏错误消息的所有常规方法。这对于调试很有用,但在生产系统上却很糟糕。

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

    如果已安装并且您无法对其进行任何操作,那么您需要找到一个不在生产系统上安装开发工具的更好的Web主机。


    说完所有这些后,如果你收到$section is undefined的消息,那么它确实意味着代码中需要修复的错误。

    header.php中包含{}时,错误发生在index.php

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

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

    我希望有所帮助。

答案 1 :(得分:2)

你正在查看错误的文件

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

  • inc\header.php
  • index.php

在问题中,index.php未显示 - 但最有可能的是:

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

即。缺少的变量是 not 声明,然后才会在您执行的代码中使用它们。

SCREAM

scream是一个扩展,它忽略了@运算符的使用 - 即正在执行的代码中的某个地方,正在使用它,它通常被认为是忽略错误的不良做法。但是,turn scream off - 适用于制作/实时应用,但当然应该解决错误/警告/通知。