【问题标题】:PHP - require_once in multiple pagesPHP - 在多个页面中需要一次
【发布时间】:2012-11-10 13:14:30
【问题描述】:

我正在使用 LAMP 堆栈来开发 PHP 应用程序。我正在使用 require_once 来包含类文件。我需要在多个 PHP 页面中使用这些类文件中的函数。因此,我使用 require_once 将这些类文件包含在所有必需的 PHP 页面中。但是,如果我将这些类文件包含在多个页面中,PHP 文件就会变为空白。它什么也不显示。查看源代码也不显示任何内容。

文件:test.php、process.php 和 class.test.php

test.php 有

<?php
    session_start();
    require_once 'classes/class.test.php';

    .
    Few more classes
    .
    .  


?>

<html>   
    <form name = "myForm" method="POST" action="process.php">
       <input type = "text" name="username" value=""/>
       <input type = "submit" value="Submit" />
    </form>   
</html>

进程.php

<?php 
    session_start();
    require_once 'classes/class.test.php';

    $obj_test = new test();
    $obj_test->test();
?>

class.test.php

<?php
    session_start();
    require_once 'class.misc.php';
    require_once 'config.php'; //DB connection details

    function test()
    {
        $obj_misc = new misc();
        $id = $obj_misc->random_ID();
        $username = $_POST['username'];             

        $query = "INSERT INTO test_table VALUES ('$id','$username',NOW());
        mysql_query($query);
    }
?>

现在,它返回一个空白页。如果我注释掉 process.php 中的 require_once,test.php 页面会显示表单,但在提交表单时 process.php 会抛出错误“找不到类测试”。

在过去的两周里,我一直在努力解决这个问题。 :( 在那之前它工作得很好。我不明白出了什么问题。请帮忙。

【问题讨论】:

  • 也许你应该检查类所在文件的路径。它们会根据需要它们的文件的位置而变化
  • 嗨@sarghau,欢迎来到SO。 +1 格式正确的问题。现在,为什么你有两个test.php sn-ps?问题是你不小心打错了test.php吗?
  • 你检查过你的错误日志吗?我通常建议省略结尾的 ?>,因为它可能导致标题被过早发送。
  • process.php 中评论某事会如何影响test.php,当你说这不与test.php 互动时?你在误解某事
  • 启用 php 错误,以免下次出现空白页。错误将解释什么是错误的,您不需要在 SO 中发布问题。

标签: php require-once


【解决方案1】:

process.php 的 PHP 代码有错误;你少了一个分号:

require_once 'classes/class.test.php'

应该是:

require_once 'classes/class.test.php';

如果这不能解决问题,那么您的代码中的某处可能存在其他错误。如果没有完整的源代码,我们将无能为力。

为了将来参考,如果页面变为空白,通常是 PHP 源代码存在问题(即某种类型的解释错误)。作为良好调试策略的一部分,请查看 display_errorserror_reporting

【讨论】:

  • 已更正。这是一个涉及大量类和其他 php 文件的巨大代码。所以,我只发布了它引发错误的片段。
  • in class.test.php $query = "INSERT INTO test_table VALUES ('$id','$username',NOW()); mysql_query($query); 缺少另一个引号 - " - 在字符串的末尾。这有帮助吗?
  • @cegfault 这是一个错字!但这不是问题。如果有语法错误,我使用的IDE会指向。
  • 尝试在所有文件上运行php -l,这将显示语法错误(您的IDE似乎在这里失败了......)
  • @BotondBalázs - 这是一个复制粘贴错误。不是 IDE。
【解决方案2】:

试试

error_reporting(E_ALL);

【讨论】:

    【解决方案3】:

    听起来您的错误报告功能已关闭。你应该检查你的错误日志,看看当它静默失败时抛出了什么异常(这会给你更多的洞察力)。

    此外,您可能希望将其添加到流程脚本的顶部:

    error_reporting(E_ALL);
    

    【讨论】:

    • 是的,我做到了。但还是空白。
    • 尝试在上面的代码中也使用它 - ini_set('display_errors', 1);
    • 检查 php.ini 文件。寻找“错误”。它可能已关闭
    • @sarghau 应该有 display_errors 和 error_reporting 参数。
    【解决方案4】:

    Require once 是一个函数...

    尝试添加括号...

     require_once( 'classes/class.test.php' );    
    

    【讨论】:

    • require_once、require、include_once 和 include 都像 echo - 你不需要 need 括号。 PHP Manual 甚至有没有括号的例子...
    • 问题不在于代码。我在我的机器上运行了代码。有效。服务器出现问题,已由提供商解决。
    【解决方案5】:

    看起来您在 sql 查询中缺少结束 qoute

    $query = "INSERT INTO test_table VALUES ('$id','$username',NOW());
    mysql_query($query);
    

    应该是

    $query = "INSERT INTO test_table VALUES ('$id','$username',NOW())";
    mysql_query($query);
    

    【讨论】:

    • 这是一个错字!但这不是问题。如果有语法错误,我使用的IDE会指向。
    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 2014-01-25
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多