2011-12-13 17 views
23

शामिल किया गया है मैंपीएचपी वर्ग नहीं मिला लेकिन यह

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% यकीन है कि यह सही है।

"$ इंजन" सही है, और कक्षा भी सही है (नेटबीन मुझे क्लास विधियों और चर का सुझाव देता है)।

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

मुझे 'बूल (झूठा)' मिलता है, लेकिन जब मैं 'echo $ इंजन निष्पादित करता हूं।"/ClassUser.php
"; मुझे' http: // localhost/webname/resource/engine/classUser.php' मिलता है जो सही है – siannone

+0

बस एक फॉलो अप के रूप में, 'var_dump'ing' $ इंजन "/ classUser.php" को आज़माएं, साथ ही यह देखने के लिए कि 'file_exists' गलत क्यों लौटाता है। इसके अलावा आपके मित्र/दुश्मन भी अनुमति हो सकते हैं –

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

सिर्फ शैली के लिए +1 –

+5

* हम सब बर्बाद हो गए हैं! डूमेड! * – DaveRandom

+14

"मरने" संदेश के अनुसार, जिस वर्ग को आप ढूंढ रहे हैं वह "आशा" होना चाहिए। – SeanKendle

0

एक और अधिक व्यवस्थित और संरचित समाधान आप जहां अपनी कक्षाओं जमा हो जाती है फ़ोल्डरों को परिभाषित करने और एक autoloader (__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 के लिए classUser.php

0

सही linux उपयोगकर्ता डिबगिंग के लगभग दो घंटे के बाद के लिए मैं निष्कर्ष निकाला है कि यह करने के लिए सबसे अच्छा समाधान वर्ग इसमें मौजूद करने के लिए फ़ाइल नाम एक अलग नाम दे रहा है। उदाहरण के लिए:

पहले example.php शामिल हैं:

<?php 
class example { 

} 

समाधान: फ़ाइल का नाम बदलने example.class.php करने के लिए (या ऐसा ही कुछ), या example_class के वर्ग का नाम बदलने (या ऐसा कुछ)

उम्मीद है कि इससे मदद मिलती है।

+0

और यह सबसे अच्छा समाधान क्यों होगा? आपको यह कैसे पता चला? आप जो कहते हैं वह पूरी तरह से एक बुरा विचार है। और वैसे, अपने "सर्वोत्तम समाधान" के साथ संगीतकार का उपयोग करने का प्रयास करें और मुझे बताएं कि यह कैसे जाता है;) पीएस जब आप वापस आते हैं और महसूस करते हैं कि आपने जो कहा है वह वास्तव में एक बुरा विचार है, तो इसे पढ़ने के लिए: http://www.php-fig.org/psr/psr-4/ – siannone

3

मुझे यह समस्या थी और समाधान नामस्थान था। शामिल फ़ाइल को अपने नामस्थान में शामिल किया गया था। स्पष्ट बात, अनदेखी करने में आसान है।

+1

अरे तुम मुझे मेरी पुरानी यादें क्यों लाते हो कोड, यह भयानक था :( – siannone

1

वास्तव में, यह एक बहुत पुरानी धागा लेकिन उपयोगी ...

जब नाम स्थान घोषणा अपने php वर्ग फ़ाइल का हिस्सा है "अजीब त्रुटियों के इस प्रकार प्रकट करने के लिए जाता है" है।

समाधान: { साथ उपयोग namespace, अपने कोड इस तरह पता चलता है:

<?php 

namespace path_to\lib { 

require_once "folder/php_class_file_where_namespace_declaration_is_part_of_it.php"; 

**YOUR CODE HERE** 

<?php } ?> 
0

डबल & नामस्थान जाँच अपने autoloader की आवश्यकताओं।

  • उदाहरण के लिए, अपने autoloader अपने नाम स्थान जहां फ़ाइल स्थित है फ़ोल्डर संरचना से मेल करने की आवश्यकता है? यदि ऐसा है, तो सुनिश्चित करें कि वे मैच।
  • एक और उदाहरण, क्या आपके ऑटोलोडर को आपके फ़ाइल नामों को पर एक निश्चित पैटर्न का पालन करना आवश्यक है/क्या यह केस संवेदनशील है? यदि ऐसा है, तो सुनिश्चित करें कि फ़ाइल नाम सही पैटर्न का पालन करता है।
  • और निश्चित रूप से यदि कक्षा किसी नामस्थान में है तो इसे को पूरी तरह से योग्य क्लास नाम (/Path/ClassName) या use कथन के साथ अपनी फ़ाइल के शीर्ष पर शामिल करना सुनिश्चित करें।
-5

बस उस क्लास परिभाषा की प्रतिलिपि बनाएँ जिसे आप उपयोग करना चाहते हैं और इसे PHP फ़ाइल में पेस्ट करें। "__once शामिल करें" या "__once की आवश्यकता है" निकालें। यह उस त्रुटि को नहीं दिखाएगा। यह मेरे लिए काम किया।

0

यह भी हो सकता है कि आपने गलती से ऐसी लाइन की टिप्पणी की जैसे requ_once __DIR__.'/../vendor/autoload.php'; --- आपके नामस्थान लोड नहीं किए गए हैं।

या आप संगीतकार को एक क्लासमैप जोड़ना भूल जाते हैं, इस प्रकार कक्षाएं स्वत: लोड नहीं होती हैं और उपलब्ध नहीं होती हैं। उदाहरण के लिए,

"autoload": { 
    "psr-4": { 
     "": "src/" 
    }, 
    "classmap": [ 
     "dir/YourClass.php", 
    ] 
}, 
"require": { 
    "php": ">=5.3.9", 
    "symfony/symfony": "2.8.*", 
संबंधित मुद्दे