2011-12-13 81 views
23

我包括PHP类未找到,但它包含

require_once($ENGINE."/classUser.php"); 

,但在执行代码时,我收到此错误PHP类:

Fatal error: Class 'User' not found in C:\xampp\htdocs\WebName\resources\engine\ajax\signup.php on line 12

我仍然想不通有什么问题。我99%确定它是正确的。

“$ ENGINE”是正确的,并且类也是正确的(Netbeans建议我使用类方法和变量)。

signup.php:

<?php 

/* Created on: 13/12/2011 
* Author: 
* 
* Description: User signup procedure. 
*/ 

require_once("../settings.php"); 
require_once($ENGINE."/classUser.php"); 

$user = new User(); 
$user->createUser($_POST["username"], $_POST["email"], $_POST["password"]); 


?> 

classUser.php:

<?php 

/* Created on: 13/12/2011 
* Author: 
* 
* Description: This class manages users. 
*/ 

require_once("settings.php"); 
require_once($LIBRARY."/cassandraphp/cassandra.php"); 

class User { 

    public function createUser($username, $email, $password){ 
     $cassandra = Cassandra::createInstance($CASSANDRASERVER); 
     $cassandra->set(
       "user.".$username, 
       array(
        'ID' => uniqid(), 
        'Username' => $username, 
        'Email' => $email, 
        'Password' => $password 
       ) 
     ); 
    } 
} 

?> 
+0

我没有线索 – ajreal

回答

6

首先检查是否$ENGINE."/classUser.php"是现有文件的有效名称。 试试这个:

var_dump(file_exists($ENGINE."/classUser.php")); 
+9

无用...如果无法找到或读取文件,require_once()将杀死具有致命错误的脚本。 –

+0

我收到'bool(false)',但是当我执行'echo $ ENGINE。“/ classUser.php
”;'我收到'http:// localhost/webname/resources/engine/classUser.php'这是正确的 – siannone

+0

就像后续一样,尝试'var_dump'ing'$ ENGINE。“/ classUser.php”'以查看'file_exists'返回false的情况。还有权限也可能是你的朋友/敌人 –

27
if (! class_exists('User')) 
    die('There is no hope!'); 
+9

+1只适用于款式 –

+5

*我们都注定要失败! DOOOMED!* – DaveRandom

+14

根据“死”的消息,你正在寻找的类应该是“希望”。 – SeanKendle

0

正如你可以定义您的类存储的文件夹,并创建一个自动加载磁带机(__autoload()),它会搜索中定义的地方的类文件更加系统化,结构化的解决方案:

require_once("../settings.php"); 
define('DIR_CLASSES', '/path/to/the/classes/folder/'); // this can be inside your settings.php 

$user = new User(); 
$user->createUser($_POST["username"], $_POST["email"], $_POST["password"]); 

function __autoload($classname) { 
    if(file_exists(DIR_CLASSES . 'class' . $classname . '.php')) { 
     include_once(DIR_CLASSES . 'class' . $classname . '.php'); // looking for the class in the project's classes folder 
    } else { 
     include_once($classname . '.php'); // looking for the class in include_path 
    } 
} 
29

检查以确保您的环境对您的开始标签没有挑剔。我的配置要求:

<?php 

如果我尝试使用:

<? 

然后我得到了同样的错误,你。

+2

这是我的问题。我的解决方案是将以下内容添加到php.ini:short_open_tag =在 请参阅:http://php.net/manual/en/ini.core.php#ini.short-open-tag – theINtoy

+3

如果您没有访问php.ini,你可以添加这个.htaccess: php_value short_open_tag 1 – theINtoy

+1

耶稣。 Thx这么多) – Constantine

1

的问题就走了,当我做

sudo service apache2 restart 
1

这是发生在我身上! 问题是,你以某种方式包含一个具有相同类文件名的文件,从而使同一类无效!

检查包含的路径和这些检查文件具有相同的名称!

0

检查file permissions正确的Linux用户为classUser.php

0

近两个小时的调试后,我得出的结论是这个最好的解决办法就是给文件名不同的名称,它包含的类。例如:

以前 使用example.php包含:

<?php 
class example { 

} 

解决方案:文件重命名为example.class.php(或类似的东西),或重命名类example_class(或类似的东西)

希望这会有所帮助。

+0

为什么这将是最好的解决方案?你是怎么意识到这一点的?你说的话完全是一个坏主意。顺便说一下,尝试使用Composer与“最佳解决方案”,并让我知道它是怎么回事;) P.S.当你回来并意识到你刚才所说的实际上是一个坏主意时,请阅读下面的内容:http://www.php-fig.org/psr/psr-4/ – siannone

3

我有这个问题,解决方案是名称空间。包含的文件包含在其自己的名称空间中。明显的事情,容易忽略。

+1

该死的为什么你给我带来了我的回忆代码,这是非常可怕的:( – siannone

1

事实上,这是一个非常古老的线程,但很有用...

当命名空间声明是你的PHP类文件的一部分“这种怪异的错误往往出现”

解决方案:使用namespace{,你的代码这样表示:

​​
0

仔细检查磁带自动加载机的要求&命名空间。

  • 例如,您的自动加载器是否需要您的名称空间以匹配文件所在位置的文件夹结构 ?如果是这样,请确保他们匹配 。
  • 另一个例子,你的自动加载器是否需要你的文件名到 遵循某种模式/是否区分大小写?如果是这样,请确保 文件名遵循正确的格式。
  • 当然,如果该类位于名称空间中,请确保使用完全限定的类名称(/Path/ClassName)或文件顶部的use语句正确地包含它 。
-5

只需复制您想要使用的类定义并将其粘贴到PHP文件中即可。删除“include __once”或“require __once”。它不会显示该错误。它为我工作。

0

也可能是,您错误地将这样的行注释掉了,例如require_once __DIR__.'/../vendor/autoload.php'; ---您的名称空间未加载。

或者你忘了添加一个类图到作曲家,因此类不会自动加载并且不可用。例如,

"autoload": { 
    "psr-4": { 
     "": "src/" 
    }, 
    "classmap": [ 
     "dir/YourClass.php", 
    ] 
}, 
"require": { 
    "php": ">=5.3.9", 
    "symfony/symfony": "2.8.*",