需要php配置类,但找不到文件

时间:2013-05-18 11:31:44

标签: php include config require

在我看来,我需要所有必要的文件,但我一直收到错误,找不到一个文件。所有文件都在同一个文件夹中。

这是zConfig.php的代码:

<?php
class zConfig {
    static $confArray;
    public static function read($name) {
        return self::$confArray[$name];
    }
    public static function write($name, $value) {
        self::$confArray[$name] = $value;
    }
}
?>

这是我的bd2.php代码:

require_once('zConfig.php');

/*
 * Write settings to the config
 */
zConfig::write('hostname', 'XXXX');
zConfig::write('database', 'XXXX');
zConfig::write('username', 'XXXX');
zConfig::write('password', 'XXXX');
zConfig::write('drivers', array(PDO::ATTR_PERSISTENT => true));

最后,这是我在Product.php中的函数代码:

public function pdo_updateTip($which, $tiptext)
{
  require_once("bd2.php");
  try {
  $pdo = new PDO("mysql:host=".bd2::read('hostname').";dbname=".bd2::read('database')."", bd2::read('username'), bd2::read('password'), bd2::read('drivers'));
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  $stmt = $pdo->prepare("UPDATE tip SET tip_text = :tiptext WHERE product_id='0' AND item LIKE :which");
  $stmt->execute(array(
    ':tiptext'   => $tiptext,
    ':which' => $which
  ));

echo $stmt->rowCount(); // 1
} catch(PDOException $e) {
  echo 'Error: ' . $e->getMessage();
}
    return true;
}

我加载Product.php时遇到的错误是:

Fatal error: Class 'bd2' not found in /home/xxxxx/Product.php on line 45

第45行是我首先引用bd2的行,在这里:

$pdo = new PDO("mysql:host=".bd2::read('hostname').";dbname=".bd2::read('database')."", bd2::read('username'), bd2::read('password'), bd2::read('drivers'));

3 个答案:

答案 0 :(得分:1)

让我向您展示PHP中自动加载的强大功能。

如果您关注PSR-1,那将非常简单。

假设您有这样的结构:

Project/
--conf/
--classes/
--index.php

所以,你把它放在conf目录上,用你喜欢的名字:

<?php
/**
* @author Henrique Barcelos <rick.hjpbarcelos@gmail.com>
* @copiright (c) 2013, Henrique Barcelos
*/

ini_set('display_errors', true);
error_reporting(E_ALL | E_STRICT);

setlocale(LC_ALL, array('es_ES', 'es_ES.iso-8859-1', 'es_ES.utf-8', 'spanish'));
ini_set('date.timezone', 'Europe/Madrid');

define('APP_ROOT', dirname(__DIR__) . DIRECTORY_SEPARATOR);

set_include_path(
    implode(PATH_SEPARATOR,
        array_unique(
            array_merge(
                array(
                    APP_ROOT . 'YOUR_CLASS_DIRECTORY', 
                ),
                explode(PATH_SEPARATOR, get_include_path())
            )
        )
    )
);

{
    function autoload($class) {
        $file = sprintf("%s.php", str_replace('_', DIRECTORY_SEPARATOR, $class));
        if (($classPath = stream_resolve_include_path($file)) != false) {
            require $classPath;
        }
    }

    spl_autoload_register('autoload', true);
}

index.php中,您只需:

require 'conf/NAME_OF_THE_FILE';

voilá,你将加载所有类。 例如,您的班级db2应该放在您的类目录中。

答案 1 :(得分:0)

我认为你想要做的是

$pdo = new PDO("mysql:host=".zConfig::read('hostname').";dbname=".zConfig::read('database')."", zConfig::read('username'), zConfig::read('password'), zConfig::read('drivers'));

bd2不是类,因此它不包含任何静态方法read。它似乎只是一个使用zConfig::write方法设置数据库配置的文件。

答案 2 :(得分:0)

为了最终在这里寻找“未找到课程”问题答案的任何人的利益。我需要我在网上找到的PHP邮件脚本。我自己编写需求的脚本是很久以前编写的,当时它的工作完美。

我正在移动服务器(使用更高版本的PHP的新服务器)。我也遇到了这个问题,并且搜索得很高。低解决方案。最后,问题变得非常微不足道。事实证明,PHP邮件程序脚本正在使用

&LT ;? ... ?&GT;

这显然足以混淆我的新服务器。我将起始标签更改为&lt;?php,所有内容都是hunkry dory。