0

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

这是我的 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'));
4

3 回答 3

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';

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

于 2013-05-18T11:57:32.567 回答
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方法为您的数据库设置配置的文件。

于 2013-05-18T11:41:26.343 回答
0

为了最终在这里寻找“找不到类”问题的答案的任何人的利益。我需要一个我在网上某处找到的 PHP 邮件程序脚本。我自己的脚本是很久以前写的,当时它运行良好。

我正在移动服务器(新服务器使用更高版本的 PHP)。我也遇到了这个问题,并在高低处寻找解决方案。最后,这个问题变成了一个非常微不足道的问题。原来是 PHP 邮件脚本正在使用

<? ... ?>

这显然足以让我的新服务器感到困惑。我将起始标记更改为 <?php ,一切都再次变得很糟糕。

于 2013-12-04T07:21:22.197 回答