2012-04-13 16 views
6

पर विफल रहता है मेरे पास एक PHP स्क्रिप्ट है जिसमें अन्य स्क्रिप्ट्स का एक सेट शामिल है (या 'आवश्यकता है)। यह मेरे सभी वर्गों को आयात करने के लिए प्रभावी ढंग से है। जो मैं सामना कर रहा हूं वह एक HTTP 500 त्रुटि है। मैंने टुकड़ा करके कोड टुकड़ा को हटा दिया है और यह निर्धारित करने के लिए कि यह मेरी फ़ाइलों में से एक में requ_once पर असफल रहा है।पीएचपी requ_once

index.php:

<?php 
require_once("std/classes.php"); 
?> 

और एसटीडी/classes.php:

<?php 
RequireStandards(); 
RequireAddons(); 

function RequireStandards() 
{ 
    $ClassFiles = scandir("classes/standard"); 

    foreach($ClassFiles as $ClassFile) 
    { 
     if($ClassFile == "." || $ClassFile == "..") 
      continue; 

     //require_once("classes/standard/" . $ClassFile); 
    } 
} 

function RequireAddons() 
{ 
    $ClassFiles = scandir("classes"); 

    foreach($ClassFiles as $ClassFile) 
    { 
     if($ClassFile == "." || $ClassFile == ".." || $ClassFile == "standard") 
      continue; 

     //require_once("classes/" . $ClassFile); 
    } 
} 

?> 

इस कोड के रूप में यह बैठता है काम करेंगे, लेकिन जैसे ही

यहाँ कोड है मैं आवश्यकता को कम करता हूं, यह विफल रहता है। मुझे अजीब बात यह है कि मेरे पास इस सर्वर पर कई अन्य साइटें हैं जो लगभग समान तरीके से कार्य करती हैं।

मुझे लगता है कि मुझे किसी भी तरह से मेरी PHP त्रुटि रिपोर्टिंग बंद कर दी गई है ... जो मुझे नहीं पता कि वापस कैसे चालू करें; जैसा कि मैंने अभी PHP 5.3 में अपग्रेड किया है। यदि आम तौर पर PHP विफल हो जाता है, तो मैं आम तौर पर 'ब्राउज़र खोल नहीं सकता' या कुछ ऐसा ब्राउज़र की अपेक्षा करता हूं।

शायद कोई मुझे बता सकता है कि यह एक HTTP 500 को क्यों ला रहा है, या शायद त्रुटि रिपोर्टिंग को फिर से सक्षम करने के लिए कैसे। यह बहुत सराहनीय होगा; यह सिर्फ ज्यादा समझ में नहीं आता है।

+0

क्या आप अपने सर्वर लॉग से परामर्श कर सकते हैं? – miku

+1

क्या आपकी कक्षा फ़ोल्डर रूट निर्देशिका में है? कक्षाओं से पहले "/" जोड़ने का प्रयास करें? केवल अनुमान है। –

+0

शायद आपके शामिल पथ के साथ एक समस्या http://www.php.net/manual/en/function.set-include-path.php –

उत्तर

11

पर गौर त्रुटि रिपोर्टिंग सक्षम करने के लिए:

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
require_once("std/classes.php"); 
?> 

उम्मीद है कि है कि काम करना चाहिए।

संपादित करें: यदि यह काम करता है, तो लाइव, सार्वजनिक सामना वातावरण में कुछ भी डालने से पहले प्रदर्शन त्रुटियों को बंद करना याद रखें!

+0

धन्यवाद। यही वह जवाब है जिसे मैं प्राप्त करने की उम्मीद कर रहा था। जबकि @ मैडब्रेक्स का जवाब 'एक जवाब' था - यह मैंने जो भी पूछा उससे जवाब नहीं था। मैं आपकी सलाह मैडब्रैक ले जाऊंगा, और एक ऑटोलोड लोड करूंगा, लेकिन 'इस तरह आपको अपना कोड लिखना चाहिए' के ​​जवाब देने के बजाय, क्या लोग असली मुद्दे का जवाब देना शुरू कर सकते हैं? 'मुझे पता है कि यह वैध PHP है क्यों यह कोड काम नहीं कर रहा है' के जवाब के रूप में 'अपने कोड को फिर से लिखना' बहुत परेशान है। यद्यपि आप किसी भी तरह से धन्यवाद। जिम डी के लिए - यह मुझे मेरी वास्तविक PHP त्रुटियों के शीर्ष पर वापस रखता है और मैं कुछ 'स्ट्रीम को खोलने में विफल रहा हूं' को ठीक कर सकता हूं। बहुत सराहना की। – DigitalJedi805

+0

@ DigitalJedi805 - खुशी है कि मैं मदद कर सकता हूं! Ini_set ('display_errors') बिट कुछ ऐसा है जो मैं आमतौर पर उत्पादन/पर्यावरण स्थिरता के आधार पर टॉगल करता हूं। इस तरह, मैं बेकार नहीं हो सकता और गलती से इसे बंद करना भूल जाता हूं। –

0

मैं सुझाव देंगे आप Autoloading Classes

+0

डाउनवॉटर ... क्यों? – Madbreaks

+0

मैंने ऐसा नहीं किया लेकिन संभवतः क्योंकि यह मुझसे पूछे गए प्रश्न का उत्तर नहीं है, और न ही यह मुझे मौजूदा कोड को ठीक करने में मदद करता है, इस पर ध्यान दिए बिना कि मैं सर्वोत्तम प्रथाओं का पालन कर रहा हूं या नहीं। जबकि मैं टिप की सराहना करता हूं, और इसे पहले से ही कार्यान्वित कर चुका हूं, तो आप @ जिम डी के उत्तर पर टिप्पणी पढ़ सकते हैं, जिसमें मैं विस्तार से बताता हूं कि यह मेरे परिस्थिति में सहायक नहीं था। – DigitalJedi805

2

आप अस्थायी रूप से, error_reporting (का प्रयोग करके) समारोह पर पुन: रिपोर्ट त्रुटि बदल सकते हैं उदाहरण दिखाने के लिए सभी त्रुटियों को अपनी फ़ाइल में निम्न कोड डालें के लिए:

error_reporting(E_ALL);

बेशक

, इस स्थायी रूप से आप बदलना अपनी php.ini फ़ाइल को संपादित करना चाहिए, और सुनिश्चित करें कि आपके पास त्रुटि_ रिपोर्टिंग सक्षम है और साथ ही display_errors (कम से कम यदि यह उत्पादन वातावरण नहीं है)। तुम भी कोशिश कर सकते हैं:

ini_set('display_errors', 1);

इस हालांकि यदि आप पृष्ठ पर एक गंभीर त्रुटि है काम न करें। दोबारा, इसे स्थायी रूप से सक्षम करने के लिए आपको अपनी php.ini फ़ाइल को संशोधित करना होगा।

आमतौर पर यह सुझाव दिया जाता है कि आप केवल गैर-उत्पादन प्रणालियों पर display_errors को सक्षम करते हैं ताकि उपयोगकर्ता आपके त्रुटि संदेशों के माध्यम से संभावित रूप से संवेदनशील जानकारी प्राप्त न करें। हालांकि यह अपने वितरण के आधार पर भिन्न हो सकते हैं

/var/log/apache2/error.log

:

या तो मामले में, आप अपाचे त्रुटि लॉग में php त्रुटियों को ढूँढने में सक्षम, ubuntu पर इस यहाँ स्थित है होना चाहिए।