2013-05-18 33 views
0

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

这是我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')); 
+1

您在bd2.php中包含一个类,但实际上bd2不是类。你应该使用类名 - > zConfig :: read('hostname'); –

+0

bd2类在哪里,因为我找不到它? PHP也不会找到它。 –

+0

伙计,使用自动加载... –

回答

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方法来设置数据库的配置。

1

让我告诉你在PHP自动加载的力量。

如果你关注PSR-1,它会很简单。

假设你有一个这样的结构:

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

所以,你把这个conf目录中,有一个名字你喜欢:

<?php 
/** 
* @author Henrique Barcelos <[email protected]> 
* @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'; 

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

0

对于任何人最终在这里寻找“未找到类”问题的答案的好处。我需要一个我在网上找到的PHP邮件程序脚本。我自己的脚本是很久以前写的,当时它的工作很完美。

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

<? ... ?>

而这显然足以混淆我的新服务器。我将开始标记更改为<?php,并且所有内容都再次成为hunkry dory。

相关问题