Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]DEFINE () nie działa po INCLUDE ()
Forum PHP.pl > Forum > Przedszkole
GeeryS
Hej,

w uproszonym przykładzie problem wygląda następująco :

plik konfig.php
zawiera:

  1. DEFINE ('TEST','test udany')
  2. echo 'zaladowany konfig';


plik uruchom.php
zawiera :

  1. include ('konfig.php');
  2. echo TEST;

otrzymuję:

zaladowany konfig
TEST

Czyli plik konfig.php jest includowany, wykonane jest ECHO w nim zawarte , ale
wyglada na to, że nie działa DEFINE po includowaniu ( nie ma zdefiniowanej stalej ? )

Dodam, że probelm pojawił się jak zmieniłem wersje apache i php na 5.5 ... wcześniej te pilki działały

gdzie szukać sedna problemu i jego rozwiązania ? ... przeszukałem przez ostatnie dni sieć i raz tylko znalazlem, że ktoś miał też ten problem, ale brak rozwiązania sad.gif

z góry dzięki za sugestie i rady
Pyton_000
define nie DEFINE
com
i brakuje ;
GeeryS
ok, oczywiście macie racje, źle tu zapisałem ... ale nie w tym problem, uwzględniając wasze poprawki , problem istnieje taki jak opisałem.
Macie jakiś pomysł dalej ?
Damonsson
Masz włączone wyświetlanie błędów, w tym Notice?

DEFINE czy define czy DeFiNe jeden pies, musi zadziałać.
GeeryS
pokieruj proszę, gdzie i co mam włączyć jesli chodzi o raportowanie błędów i Notice



mam w php.ini :

display_errors : on
error_reporting : 32759


com
  1. ini_set("display_errors", 1);

Ale to ustaw w pliku php
Damonsson
Czyli masz. A wpisz:

  1. echo TESt;


zamiast

  1. echo TEST;


Dostajesz Notice?
GeeryS
dodam, że jeśli sprawdzam zdefiniowane stałe to jeśli :

1) użyję

print_r(get_defined_constants(true));

w konfig.php ... to w wynikowej tablicy są na końcu zdefiniowane stałe [USER]



2) użyję

print_r(get_defined_constants(true));

po includowaniu konfig.php ...to w wynikowej tablicy nie ma [USER]


a plik konfig jest includowany !

echo TEST;

dostaję : TEST





echo TESt;

dostaję : TESt;



czyli nie dostaję Notice
Damonsson
A powinieneś dostać notice, gdzieś wyłączasz wyświetlanie błędów w kodzie. To jest część jakiegoś większego projektu? Musiałbyś pokazać cały kod, odpowiedzialny za to. Tak to możemy co najwyżej powróżyć gdzie jest błąd, niestety.
com
masz tak:
konfig.php
  1. <?php
  2. DEFINE ('TEST','test udany');
  3. echo 'zaladowany konfig';

i nic wiecej?
uruchom.php

  1. <?php
  2. ini_set("display_errors", 1);
  3. include ('konfig.php');
  4. echo TEST;

?
GeeryS
tak, to większy projekt, ale dalszy kod nie jest w tym momencie ruszany bo problem powstał już na etapie ładowania konfigu ze zdefinioanymi stałymi ścieżek za pomocą define () ;

wiec chyba nie ma co zawracac głowy dalszym kodem

całość działała na php 5.4 ...



przy innych błędach Notice działa ... tylko w tym przypadku efekt jest jako podałem echo wyświetla to co jest za nim. Jak napisze
echo xxxx;

dostaję xxxx

hej com,

powykonaniu Twojego testu dostaję :




zaladowany konfig
Pyton_000
zmień include na require
GeeryS
Hej Damonsson, a jak sądzisz gdzie szukac senda problemu ? ... w konfiguracji php.ini , czy gdzie inndziej ? .. bo raczej w kodzie nie ( chyba az takich zmian w php 5.5 nie było)

Cytat(Pyton_000 @ 22.03.2015, 20:38:22 ) *
zmień include na require



efekt ten sam sad.gif
Damonsson
Z tego co kojarzę php.ini nie ma ustawienia typu "wszystkie odwołania do stałej traktuj jako string". Więc nic tam nie powinno być. Z drugiej strony piszesz, że dostajesz błędy notice w innych miejscach, a jak próbujesz wyechować nieistniejącą stałą, to nie dostajesz notice. Więc gdzieś poziom niżej musiałbyś mieć jakoś obsłużone te stałe.

Jakiś cache? Edytujesz inny plik konfig.php niż wczytujesz? Coś bardzo głupiego w tym stylu bym zakładał.

Chcesz mieć 100% pewności, że to nic w konfiguracji php.ini? Utwórz sobie tylko te 2 pliki poza projektem i ustaw w nich to co Ci podał @com w ostatnim poście. Jeżeli tak zadziała, to znaczy, że masz gdzieś błąd w kodzie. Jeżeli nie zadziała tak, to, to hmmm, w sumie będzie to niemożliwe wg mnie.
GeeryS
ok, jest jakiś postep :

nowe, świeże pliki :


konfig.php

  1. <?php
  2. define ('TEST','test udany');
  3. echo 'zaladowany konfig';
  4. echo xxx;
  5. echo "konfig.php : ".TEST;
  6. ?>



uruchom.php

  1. <?php
  2.  
  3. ini_set("display_errors", 1);
  4. include ('konfig.php');
  5.  
  6.  
  7. echo xxxx;
  8. echo "uruchom.php : ".TEST;
  9. ?>



otrzymuję :

zaladowany konfig
Notice: Use of undefined constant xxx - assumed 'xxx' in /share/CACHEDEV1_DATA/Web/M77i7apps/MegaBAZAksiazki/priv/cng/konfig.php on line 4
xxxkonfig.php : test udany
Notice: Use of undefined constant xxxx - assumed 'xxxx' in /share/CACHEDEV1_DATA/Web/M77i7apps/MegaBAZAksiazki/priv/cng/uruchom.php on line 8
xxxxuruchom.php : test udany


czyli teraz wszystko ok !


ale ... gdy ten sam kod wkleję w pliki projektu ( wycinam do zera kod i wklejem ten powyżej ) ... to problem nadal ... problem, gdzies w kodowaniu zapisanych wcześniej plików ?

czy mam dwa testy z taką sama zawartoscią kodu ... jeden test jest ok -ten na świeżych plikach

a druki test na plikach już istniejących nie działa

com
Nie dawaj ?> bo jak zakładam tam w tym konfig masz sam kod php. Kodowanie UTF8 bez bom masz?
Damonsson
A te stare jak wczytujesz? Po prostu odpalasz z poziomu przeglądarki wpisując domena..../uruchom.php tak jak te nowe, czy masz tam w projekcie jakiś autoloader, controllery, bootstrapy, które najpierw się odpalają i dopiero później doczytują plik uruchom.php?
GeeryS
wczytuje stare i nowe z przeglądarki ... w ten sam sposob : domena\uruchom.php




wynik świeżych plików :

zaladowany konfig

konfig.php : test udany

uruchom.php : test udany



wynik na starych plikach :

zaladowany konfig

konfig.php : test udany
Notice: Use of undefined constant TEST - assumed 'TEST' in /share/CACHEDEV1_DATA/Web/X/uruchom.php on line 8
uruchom.php : TEST


pominowłem w wynikach Notice wobex niezdefiniowa




dodam, że wcześniej projekt działał na Xampp 1.8.2 na windowsie ... a teraz projekt jest wrzucony w Apache na linuxie. ... może tu gdzies problem w powiazaniu z jakimś kodowaniem, czy czymś podobnym ?

Cytat(com @ 22.03.2015, 21:14:19 ) *
Nie dawaj ?> bo jak zakładam tam w tym konfig masz sam kod php. Kodowanie UTF8 bez bom masz?



co oznacza bez bom ?
GeeryS
dzięki Qcom ... uzupełnię wiedzę...

z tego co sprawdziłem na szybko to i stare i nowe bez bom ... ale sprawdze sobie pozniej na spokojnie , czy w tym jest miedzy tymi plikami róznica

jeszcze są jakies sugestie gdzie może byc różnica w starych i nowych plikach ?


a tak na koniec dnia to dzięki wszystkim Wam za udział w dyskuji i pomoc ...
Damonsson
Wrzuć gdzieś te 2 stare pliki i te 2 nowe i daj tu linka.
GeeryS
znalazłem przyczynę była w podaniu ścieżki do konfig.php

include ("http:// -tak było w starych plikach , wtedy w moich testech zdefiniowane stałę nie działają
include ("../ - tak jest w nowych plikach i stałe działają


zmiana w obu plikach sposobu podania ścieżki ... wywołuje juz te same efekty

sorry, że tego nie było widać ściezek w podaych wcześniej przykłądach, bo kompletnie się tego nie spodziewałem, bo w obu przypadakch includował przecież konfig.php ... w obu wykonane było echo
to mnie zmyliło ... byłem pewien ze ściezki w obu przypadkach nie mają znaczenia


a jak to rozumieć ?
com
http://php.net/manual/en/filesystem.config...low-url-include
Na jednym miałeś włączone na drugim nie smile.gif
GeeryS
Cytat(com @ 22.03.2015, 22:12:22 ) *
http://php.net/manual/en/filesystem.config...low-url-include
Na jednym miałeś włączone na drugim nie smile.gif



kurcze, ale obecnie na linuxie , php.ini pokazuje :

allow_url_fopen On
allow_url_include On


wiec chyba powinno działac include('http://

czy źle myślę ?
Damonsson
Przecież include działa poprawnie. Ale skoro zapisujesz sobie coś w RAMie na innym serwerze, to z jakiej racji ma to być widoczne na Twoim?
GeeryS
bo to ten sam serwer ... wydawalo mi sie ze jesli odwolanie przez include('http dotyczy tego samego serwera to bedzie widzial stale ... ok. i ta Twoja odpowiedz wyjasnia juz wszytko . jak widac bylem w blednym przekonaniu ... include traktuje takie odwolanie jako odwolanie do innego serwera i nie widzi stalych


dzieki za pomoc.
zamykam sprawe. jakos to zaznaczyc tu na forum ?
com
Zostawiasz, tu nie zamykamy. Zamykane sa tylko wątki które zamknie moderator smile.gif
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.