2011-12-13 12 views
23

jestem w tym klasy PHP zklasa PHP nie znaleziono, ale to jest wliczone

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

ale gdy kod jest wykonywany i otrzymać ten błąd:

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

ja wciąż nie mogę dowiedzieć się, jaki jest problem. Mam 99% pewności, że to prawda.

"$ ENGINE" jest poprawne, a klasa również jest poprawna (Netbeans sugeruje mi metody i zmienne klasy).

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

mam żadnych wskazówek – ajreal

Odpowiedz

6

Przede wszystkim sprawdzenie, czy $ENGINE."/classUser.php" jest poprawną nazwą istniejącego pliku. Spróbuj tego:

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

Useless ... require_once() zabije skrypt z fatalnym błędem, jeśli plik nie został znaleziony lub przeczyta. –

+0

Otrzymuję 'bool (false)', ale kiedy wykonuję 'echo $ ENGINE."/ClassUser.php
"; otrzymuję' http: // localhost/webname/resources/engine/classUser.php' które jest poprawne – siannone

+0

Tak samo jak po kontynuacji, wypróbuj 'var_dump'ing' $ ENGINE. "/ ClassUser.php" ', a także po prostu zobacz, co to jest, jeśli' file_exists' zwróci false. Również uprawnienia mogą być twoim przyjacielem/wrogiem. –

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

+1 tylko dla stylu –

+5

* Wszyscy jesteśmy zgubieni! DOOOMED! * – DaveRandom

+14

zgodnie z komunikatem "die", klasa, której szukasz, powinna brzmieć "Hope". – SeanKendle

0

jako bardziej systematyczny i uporządkowany rozwiązania można określić foldery, w których przechowywane są zajęcia i stworzenia autoloadera (__autoload()), która będzie przeszukiwać pliki klas w wyznaczonych miejscach:

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

Sprawdź, czy środowisko nie jest wrażliwe na otwieranie tagów. Moja konfiguracja wymaga:

<?php 

jeśli staram się używać:

<? 

Następnie pojawia się ten sam błąd, jak ty.

+2

To był problem, który miałem. Moje rozwiązanie polegało na dodaniu do php.ini następujących informacji: short_open_tag = Na zobacz: http://php.net/manual/en/ini.core.php#ini.short-open-tag – theINtoy

+3

Jeśli nie masz dostępu do php.ini, możesz dodać to do .htaccess: php_value short_open_tag 1 – theINtoy

+1

Jezus. Tak bardzo) – Constantine

1

Problem odszedł kiedy zrobiłem

sudo service apache2 restart 
1

To mi się stało! Problem polega na tym, że w jakiś sposób dołączasz plik o tej samej nazwie pliku, co unieważnia tę samą klasę!

Sprawdź ścieżkę włączenia i sprawdź pliki o tej samej nazwie!

0

Sprawdź swój file permissions dla prawidłowego użytkownik Linux dla classUser.php

0

po prawie dwóch godzinach debugowanie I doszli do wniosku, że najlepszym rozwiązaniem jest, aby podać nazwę pliku inną nazwę klasy, które on zawiera. Na przykład:

Przed example.php zawiera:

<?php 
class example { 

} 

rozwiązanie: Zmiana nazwy pliku do example.class.php (czy coś takiego), lub zmienić nazwę klasy do example_class (lub coś w tym stylu)

Mam nadzieję, że to pomoże.

+0

I dlaczego to byłoby najlepsze rozwiązanie? Jak zdałeś sobie z tego sprawę? To, co mówisz, jest całkowicie złym pomysłem. A przy okazji, spróbuj użyć Composer z "najlepszym rozwiązaniem" i daj mi znać, jak to działa;) P.S. kiedy wrócisz i uświadomisz sobie, że to, co właśnie powiedziałeś, jest złym pomysłem, daj mi przeczytać: http://www.php-fig.org/psr/psr-4/ – siannone

3

Miałem ten problem, a rozwiązaniem były przestrzenie nazw. Dołączony plik został uwzględniony we własnej przestrzeni nazw. Rzecz oczywista, łatwa do przeoczenia.

+1

Cholera, dlaczego przynosisz mi wspomnienia z mojego starego kod, to było okropne :( – siannone

1

W rzeczywistości jest to bardzo stary wątek, ale przydatne ...

Kiedy deklaracja przestrzeni nazw jest częścią klasy pliku php „tego rodzaju błędów dziwne wydaje się pojawiać”.

Rozwiązanie Use namespace z {, kod pokazuje tak:

<?php 

namespace path_to\lib { 

require_once "folder/php_class_file_where_namespace_declaration_is_part_of_it.php"; 

**YOUR CODE HERE** 

<?php } ?> 
0

dwukrotnie sprawdzić wymagania autoloadera za & nazw.

  • Na przykład, czy twój autoloader wymaga, aby przestrzeń nazw pasowała do struktury folderów, w której znajduje się plik, ? Jeśli tak, upewnij się, że pasują one do siebie.
  • Kolejny przykład, czy twój autoloader wymaga, aby twoje nazwy plików miały numer , podążając za określonym wzorcem/czy rozróżnia małe i wielkie litery? Jeśli tak, upewnij się, że nazwa pliku jest zgodna z prawidłowym wzorcem.
  • Oczywiście, jeśli klasa znajduje się w obszarze nazw, należy ją odpowiednio dołączyć pod nazwą z pełną nazwą klasy (/Path/ClassName) lub z instrukcją use u góry pliku.
-5

Po prostu skopiuj definicję klasy, której chcesz użyć i wklej w pliku PHP. Usuń "include __once" lub "require __once". Nie pokazuje tego błędu. To zadziałało dla mnie.

0

Możliwe, że przez pomyłkę skomentowałeś taką linię, jak require_once __DIR__.'/../vendor/autoload.php'; --- twoje przestrzenie nazw nie zostały załadowane.

Albo zapomniałeś dodać mapę klasy do kompozytora, więc klasy nie są ładowane automatycznie i nie są dostępne. Na przykład,

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