PHP beni dış config.php den tanımlanan değişkenleri çekin izin yok

5 Cevap php

Ben bir üretim sunucusuna geliştirme PHP sitesini hareketli ve yeni veritabanı bağlantısını test ediyorum. Ben sadece bu (ama gerçek verileri ile) olan bir config.php sayfa var:

<?php
    // Database Constants
    defined('DB_SERVER') ? null : define('DB_SERVER', 'xxx.xxx.xxx');
    defined('DB_PORT')   ? null : define('DB_PORT', 'yyy');
    defined('DB_USER')   ? null : define('DB_USER', 'zzz');
    defined('DB_PASS')   ? null : define('DB_PASS', 'abcdefg');
    defined('DB_NAME')   ? null : define('DB_NAME', 'lmnop');
?>

Sonra initialize.php ki benim define() sabitleri tüm tutan ve benim sınıflarının tüm çağrıları var.

<?php
   // Define core paths

   // DIRECTORY_SEPARATOR is a PHP pre-defined constant
   // (\ for Windows, / for Unix)
   defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

   defined('SITE_ROOT')     ? null : define('SITE_ROOT', 'http://...etc');
   defined('LIB_PATH')  ? null : define('LIB_PATH', SITE_ROOT.'/_includes');

   // load config file first
   require_once(LIB_PATH."/config.php");

   etc...
?>

Şimdiye kadar, çok iyi. (Ben btw, bilerek URL'leri değil DIR yolları kullanıyorum.)

Ben bir sorgu çalıştırmak için bir test.ph p sayfa oluşturduğunuzda Ama, ben DB_SERVER bulunmazsa bir hata alıyorum. I config.php şey yankı ve test.php üzerindeki sayfanın üst kısmında görünecektir, bu yüzden config.php dosyasını arıyor. Ve burada gerçek çılgın vurucu:

I config.php her şeyi kopyalamak ve initialize.php yapıştırın zaman, sorgu eserleri ... Bir şey değişmez, ve sonra config.php dosyayı yorum yok . Nedense bu beni config.php adlı bu değişken tanımları çekin izin vermez.

Herkes neden herhangi bir fikrin var mı?

5 Cevap

Sen olamaz include(), bir URL'den, bu ne yapar bu durumda, sadece boş bir dosya olacaktır üretilen kod, çalıştırma girişiminde olduğu gibi. Yerel bir yol kullanmak gerekir. Örneğin, geçerli dosyanın dizin almak için:

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

inlude s (ve require) operate on file system paths, değil urls:

define('SITE_ROOT', 'http://...etc')

yanlış. Orada yollar olabilir, ya da LIB_PATH farklı tanımlanmış olması gerekir olmalıdır. Manuel olarak açıklıyor bunu da url çalışmasına yapabilir, ama ben bunu şüpheliyim.

Bu işe asla: require_once () ve diğer tüm php-include aramalar sadece yerel dosyalar üzerinde çalışmak. (update: Bu gerçekten doğru değildir)

Eklemek istediğiniz gerçek code dosyasını frome: Düzenle aslında is mümkün url kullanarak bir şey eklemek diyor yorum okuduktan sonra. Şimdi yapıyorsun gibi bir url bir şey eklerseniz büyük olasılıkla bu dosya yerine gerçek php-içerik çalışan sonucunu dahil.

Eğer 2 şekilde sorununuzu çözebilirsiniz gibi Öyle görünüyor:

  • (- Bu sizin için iyi bir seçenek olmayabilir neden açıklamak için sorunuzu düzenleyebilirsiniz kolay seçenek) bir yerel yolu kullanarak Dahil
  • (Config url çağırır herkes düz metin yapılandırma verilerini alır, çünkü bu karşı tavsiye ederim.) Her yerde eklemek istediğiniz php içeriğin yankı senaryoyu olun

Sen can adresler dosyaları dahil, ama neler olduğunu fark var.

Web sunucusu böylece aslında dahil tek şey url-dahil php dosya çıktısı bir url olarak dahil php dosyasını işleyecek.

- Hangi durumda da - bir şey echo kadar bir şey değildir.