garip php sorun ...

3 Cevap php

Windows üzerinde PHP ile garip bir sorun ... benim uygulama, bir ayarlar dosyası yükleyen bir 'çekirdek' dosyası yükler autoloads kaydeder, çekirdek dosyasının üstündeki ben include_once ("config.php") başlatma vs var; Bu sadece sessizce yapılandırma dosyasının dahil sayar ama ben ayrı bir dizin çekirdek dosyası eklerseniz ... Herkes önce bu gördü, geçerli dizinde herhangi bir şey için çalışıyor?

/ Webroot / core.php

<?php
  require_once "config.php";
  //register autoloads
  //do some initialization... standard stuff
?>

/ Webroot / config.php

<?php
  define("WEB_ROOT","/webroot");
  define("DB_USER","root");
  // ... more stuff...
?>

/ Webroot / admin / index.php

<?php
  require_once("../dbconnect.php");
  echo WEB_ROOT;
  // print string literal WEB_ROOT rather than value in config.php
?>

Benim anlayış dosya işlemleri istekte dosyasının dizine göreli olmasıdır, require_once ("config.php") core.php dosya göreli seçmemelisiniz? Bu kod bir Mac veya Linux üzerinde beklemeyin ama hiç pencereleri, (değiştirirsem tam yolunu kullanmak gerekir ya .. /, çalışır) olur gibi çalışır

Gerçek delilik Require_once ("config.php") herhangi bir hata atmak değil ama içinde kod hiçbiri idam olmasıdır!

vista xampp kullanarak

3 Cevap

PHP sessizce hataları göz ardı ederseniz, istenen dosyanın üstündeki koymak deneyin:

ini_set('display_errors', 'On');
error_reporting(E_ALL);

Şimdi tüm hataları görünür olmalıdır.

Sonra (bana göre) en iyi uygulama uygulama kökü için tam dosya yolu ile bazı sabit define (dahil değil dosyaları herhangi) istenen dosya etmektir. Yani içinde index.php uygulama kök ise /webroot/admin:

define('APP_DIR', dirname(__FILE__));

Eğer bir şey de zaman bundan sonra, bu sabiti kullanabilirsiniz. Dizin yapısı ise:

/webroot/
    admin/
        index.php
    config.php
    core.php

Ve config.php içine dahil etmek istiyorum index.php:

require_once APP_DIR . '/../config.php';

core.php eklemek için config.php olurdu:

require_once APP_DIR . '/../config.php';

Ve böylece.

Mutlak dosya sistemi yolları kullanarak herhangi belirsizlikleri önleyecektir.

Belki PHP'nin open_basedir kısıtlama içine koşuyoruz? Bazı kötü niyetli komut önlemek amacıyla, PHP 'güvenli mod' olduğunu, dosyalar yüklenebilir diğer şeylerin, sınırlar arasında. Xampp bu varsayılan olarak açık olsaydı bunu çalıştırmak olabilir.

Ayrıca başarısızlık herhangi bir gösterge olup olmadığını görmek (ve konu sıralaması almak kadar, tercihen E_ALL için, hata raporlama açmak) için web sunucusu hata günlüklerini kontrol etmek isteyebilirsiniz.

Eğer dahil yapıyor dosyasına göre bir yol kullanarak bir dosya eklemek isterseniz, bu gibi tam yolu prepend gerekir:

<?php
require_once(dirname(__FILE__) . "/config.php");
?>