Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: define, a zasięg dostępu
Forum PHP.pl > Forum > PHP
adam_krk
Witam

Mam problem z zasięgiem stałych define.

Plik: http://localhost/test/include/config.inc.php

  1. <?php
  2.    define('BASE_URI','test/');
  3.    define('BASE_URL','http://localhost/');
  4. ?>


Plik: http://localhost/test/include/header.inc.php

  1. <html>
  2. <head>
  3.    <link href="<?php echo BASE_URL.BASE_URI.'include/style.css'; ?>" />
  4. </head>
  5. <body>
  6. Coś
  7. </body>
  8. </html>


Plik scalający powyższe: http://localhost/test/index.php

  1. <?php
  2.    require_once('./include/config.inc.php');
  3.    require_once(BASE_URL.BASE_URI.'include/header.inc.php');
  4. ?>


Problem w tym, że w pliku index.php stałe BASE_URL i BASE_URI są widoczne, natomiast w header.inc.php nie są.
W źródle strony index.php po otwarciu go w przeglądarce widać:

  1. <link href="BASE_URLBASE_URIinclude/style.css" />
  2. </head>
  3. Coś
  4. </body>
  5. </html>


Specjalnie by rozwiązać ten problem wyciąłem resztę kodu, ale się nie udało.
Pewnie nie ma to znaczenia, ale tuż przed kodowaniem włączyłem opcję 'allow_url_include' w php.ini.
erix
Nie ma znaczenia.

Zapamiętaj, że kod jest wykonywany od góry do dołu, a jeśli stała nie jest wcześniej zadeklarowana - PHP wyświetla po prostu jej nazwę (wsteczna kompatybilność). Stałe mają zasięg globalny, więc lepiej po prostu sprawdź kolejność wczytywania plików.
wookieb
  1. <?php
  2. require_once('include/header.inc.php');
  3. ?>


Erix, przecież doskonale widzisz, że kolejność jest dobra wieć co świrujesz?


// Pomógł++
// ayeo
adam_krk
  1. <?php
  2.   require_once('./include/config.inc.php');
  3. // stałe BASE_URL i BASE_URI są znane, poniżej plik "localhost/test/include/header.inc.php" jest dołączany
  4.   require_once(BASE_URL.BASE_URI.'include/header.inc.php');
  5. // ... ale w header.inc.php już nie są znane... dlaczego?
  6. ?>
erix
A sprawdź w header.inc.php, czy są przez defined" title="Zobacz w manualu PHP" target="_manual (na wszelki wypadek winksmiley.jpg).
wookieb
Adam_krk najpierw sprawdź co ci podałem a potem gadaj. Erix też.
adam_krk
wookieb, działa. (nie zauważyłem zmiany w odpowiedzi)

Dlaczego działa, a dlaczego nie działało?
wookieb
Jak podałeś ades bezwzgledny to tak jakbys odpalił ten plik prosto z przegladarki.
adam_krk
Rozumiem. Dzięki za pomoc
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.