2012-04-13 29 views
6

Başka bir betik kümesi içeren (veya 'gerektirir') bir PHP betiğim var. Bu, tüm sınıflarımı içe aktarmak için etkili bir yöntem. Ne karşılaştığım bir HTTP 500 hatasıdır. Dosyalarımdan birinde require_once üzerinde başarısız olduğunu belirlemek için kod parçasını parçalara ayırdım ve yorumladım.PHP require_once üzerinde hata veriyor

index.php:

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

Ve std/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); 
    } 
} 

?> 

Bu kod en kısa sürede o oturur gibi çalışır, ancak burada

kodudur İhtiyacım yok, başarısız oluyor. Beni garip kılan şey, bu sunucuda neredeyse aynı şekilde davranan birçok sitem var.

Bir şekilde PHP hata raporlarımın kapalı olduğunu sanıyorum ... ki nasıl geri döneceğimi bilmiyorum; Ben sadece PHP 5.3'e yükselttiğim gibi. PHP başarısız olursa, genellikle bir 'açık dosya açamaz' veya tarayıcımda böyle bir şey beklerdim.

Belki birileri bunun neden bir HTTP 500'ü geri aldığını veya belki de hata raporlamasını yeniden nasıl etkinleştireceğini söyleyebilir. Çok takdir edilecektir; Bu sadece çok mantıklı görünmüyor.

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

Umarım çalışması gerekir: Ben öneririm

+0

Sunucu günlüklerinize başvurabilir misiniz? – miku

+1

Sınıf klasörünüz kök dizinde mi? Derslerden önce bir "/" eklemeyi deneyin. Sadece bir tahmin. –

+0

belki de dahil etme yolunuzla ilgili bir sorun http://www.php.net/manual/en/function.set-include-path.php –

cevap

11

içine bakmak.

DÜZENLEME: Bu işe yarıyorsa, canlı, herkese açık bir ortamda hiçbir şey koymadan önce ekran hatalarını kapatmayı unutmayın! kalıcı sana bunu değiştirmek için Elbette

error_reporting(E_ALL);

:

+0

Teşekkür ederim. Bu almayı umduğum cevap. @Madbreaks 'cevabı' bir cevap 'iken - bu sorduğum her şeyin bir cevabı değildi. Madbreaks tavsiyenizi alıp bir AutoLoad inşa edeceğim, ancak 'kodunuzu nasıl yazmanız gerektiği' ile yanıt vermekten ziyade, insanlar gerçek meseleyi cevaplamaya başlayabilir mi? 'Kodun yeniden yazılması', 'Bu geçerli bir php neden bu kod çalışmıyor' diye bir cevap olarak 'kodunuzu yeniden yazmanız' oldukça rahatsız edici. Yine de teşekkürler. Jim D'ye gelince - bu benim gerçek PHP hatalarımın üstüne geri koydu ve birkaçını düzeltebiliyorum 'şimdiki akışı açamadı. Çok takdir edildi. – DigitalJedi805

+0

@ DigitalJedi805 - Memnuniyetle yardımcı olabilirim! Ini_set ('display_errors') biti, genellikle bir üretim/ortam sabitine göre değişeceğim bir şeydir. Bu şekilde, beceriksiz olamam ve kazara kapatmayı unutamıyorum. –

0

Hata raporlamayı etkinleştirmek için Autoloading Classes

+0

Downvoter ... neden? – Madbreaks

+0

Bunu yapmadım ama muhtemelen bu, sorduğum soruya bir cevap değil, ne de en iyi uygulamaları takip edip etmediğime bakmadan çalışmam gereken mevcut kodu düzeltmeme yardımcı oluyor. Bahşişi takdir ettim ve zaten uygulamış olsam da, yorumu “JIM D'nin cevabı” na okuyabilirsiniz. – DigitalJedi805

2

tamamını geçici hatalar dosyasında aşağıdaki kodu koymak göstermek için örneğin() işlevini reportingi kullanarak geri raporlama hata kapatabilirsiniz php.ini dosyanızı düzenlemeli ve display_errors yanı sıra error_reporting (en azından bu bir üretim ortamı değilse) etkinleştirilmiş olduğundan emin olmalısınız. Ayrıca deneyebilirsiniz: Bu olsa

ini_set('display_errors', 1);

sayfadaki önemli bir hatayla varsa çalışmayabilir. Yine, bunu kalıcı olarak etkinleştirmek için php.ini dosyanızı değiştirmelisiniz.

Genellikle display_errors'ı yalnızca üretim dışı sistemlerde etkinleştirmeniz önerilir, böylece kullanıcılar hata iletileriniz aracılığıyla olası hassas bilgileri alamazlar. Her iki durumda da

, bu burada bulunur ubuntu üzerinde, apache hata günlüğünde php hataları bulmak mümkün olmalıdır:

/var/log/apache2/error.log

sizin dağılımına göre değişebilir rağmen.

İlgili konular