【问题标题】:PHP define() doesn't seem to be working with include()PHP define() 似乎不适用于 include()
【发布时间】:2011-03-31 11:14:04
【问题描述】:

我一直在尝试 OO PHP,目前有三个文件。我有一个 class_lib.php,目前只有一个 databaseServer 类、一个 index.php 文件和一个 definitions.php 文件。我想将所有敏感的数据库信息放入定义文件中。但是,当我这样做时,尝试连接到数据库时出现错误:“未知服务器 DB_HOST”。我的定义文件是:

<?php
define("DB_HOST","localhost");
define("DB_USER","root");
define("DB_PASS","password");
define("DB_NAME","database");
?>

然后我像这样在索引文件中使用它们:

include('definitions.php');
include('class_lib.php');

$testing = new databaseServer();

$testing->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);

而我在databaseServer类中使用的函数是这样的:

    function connect($host,$user,$pw,$db) {
        $this->con = mysql_connect($host,$user,$pw);
        if (!$this->con) {
            die('Could not connect: ' . mysql_error());
            }
        $this->selectDb($db);
        }

    function selectDb($database) {
        $this->db = mysql_select_db($database,$this->con);
        if (!$this->db) {
            echo "Could not Select database: " . mysql_error();
            }
        }

任何想法为什么这不起作用?我也尝试将定义文件放入 class_lib 文件的包含中,但它仍然不起作用。

【问题讨论】:

  • 首先,不要使用 require / include 作为函数,因为它不是。在索引文件中定义这些常量时会发生什么?
  • 这应该可以正常工作,而且我从未见过它不工作。您是否 100% 确定包含的顺序正确?能否对“definitions.php”文件和索引文件中的常量值进行测试输出?
  • @Kemo 使用带有大括号的include 有什么问题?
  • @Pekka 它是一种语言结构,而不是函数,因此最好不要使用大括号。
  • @Kemo 但为什么呢?只要它在项目中是一致的,我并没有真正看到使用或不使用大括号之间的区别。有吗?毕竟include可以有返回值。

标签: php class include


【解决方案1】:

这应该可以正常工作,而且我从未见过它不起作用。

  • 100% 确保包含的顺序正确(需要先加载定义)

  • 对“definitions.php”文件和索引文件中的常量值进行测试输出

  • 100% 确保您调用的是正确的文件

【讨论】:

  • 我来到这里是因为我尝试了define( "PUBLIC", __DIR__ )。当我将 PUBLIC 更改为 PUBLIC_PATH 时它才起作用,我注意到 public 是一个保留字
  • 检查了一切,但没有成功
【解决方案2】:

请检查您的服务器是否支持 short_open_tag 这个值会被注释掉。 我刚刚启用它并开始工作。

【讨论】:

  • 这完全是我的原因。它不在上面的示例中,但如果您的文件以 &lt;? 而不是 &lt;?php 开头,则它不会在更现代的语言版本中被解析为 PHP。我只是在服务器操作系统更新后点击了这个。
【解决方案3】:

称之为config.php

if(!$link)
{

die('Failed to connect to server: ' . mysql_error());

}

$db = mysql_select_db(DB_DATABASE);
if(!$db)
{

die("Unable to select database");

}

?>

然后包含(“config.php”);在您的网页上

【讨论】:

    【解决方案4】:

    工作

    <?php
    define('KLINGON_SEPARATOR', '');
    ?>
    

    不工作

    <?php
    define('KLINGON_SEPARATOR', '');
    

    傻... IDEA 说“多余的结束标签”

    【讨论】:

      【解决方案5】:

      您只需取出目标文件的define 函数并将其传输到源文件(在您的情况下为“translation.php”)即可开始工作!

      这样,在接收字符串参数时定义函数的错误不会发生,您将包括已经实现的 CONSTANTS。

      我遇到了这个麻烦,发现自己只有这一个解决方案。

      【讨论】:

      • 这错过了将定义放入单独文件的全部要点。
      【解决方案6】:

      我今天遇到了类似的问题,它似乎可能是文件末尾的无效字符代码。我在堆栈 PHP define is not registering constants 上找到了这个,他的解决方案(删除多余的空格)对我有用。

      【讨论】:

        【解决方案7】:

        这里的关键是使用 constant() 函数从定义的常量中提取值:

        echo constant("DB_USERNAME");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-04-04
          • 2023-04-06
          • 2017-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多