jaki jest poprawny zapis?

0

Witam

dzisiaj okazało się że zapis stosowany przeze mnie przez długi czas działający na serwera OVH i HOME jest nie poprawny

$_SERVER[DOCUMENT_ROOT]

jego prawidłowa forma jest taka?

$_SERVER['DOCUMENT_ROOT']

dodam ze ten pierwszy na pewnym serwerze z PHP w wersji 5.3.17 nie widzi pierwszej zmiennej

0

prosze mi jeszcze wytlumaczyc dlaczego nie dzialaja takie skroty

<?="test"?>

i dlaczego wywala mi blad gdy zmienna jest pusta:

przykład $_GET['test'] i trzeba ja sprawdzac za pomoca isset

gdzie takie funkcje mozna powlaczac/powylaczac?

prosze o odpowiedz bo jestem zrezygnowany kilka lat mojej pracy bede musial poprawiac?

0

php.ini short_open_tag http://php.net/manual/en/ini.core.php generalnie zacznij od jakiegoś kursu bo takie rzeczy są raczej tłumaczone, poziom błędów/warningów też można sobie ustawić.

0

$_SERVER i $_GET są tablicami asocjacyjnymi, czyli takimi gdzie indeksem nie jest liczba, a napis tekst. Ponieważ wartość w tablicy pod takim tekstowym indeksem może nie istnieć, musisz to sprawdzać za pomocą isset. W sumie nie wiem o co Ci chodzi, pokaż więcej kodu.

0

Ok, więc:

$_SERVER[DOCUMENT_ROOT]

W tablicach, jeżeli klucz nie jest cyfrą (czyli np. $tab[0]) tylko stringiem - podawaj cudzysłowy! Dlaczego? Otóż w PHP jest coś takiego jak STAŁE. Stałe to takie prawie zmienne, tylko, że zapisuje się w nich tylko ciąg znaków/liczby/albo true lub false. Stałe - zgodnie z nazwą definiuje się RAZ, na stałe. Zapisuje się je jako litery, bez znaku dolara, po prostu słowa. I teraz:
Załóżmy, że definiujesz sobie stałe:

define("login", "root");
define("pass", "root");
define("db", "4programmers");

Przechowujesz sobie w nich dane do logowania do bazy danych. Przypominam, że odwołanie do stałych to po prostu ich nazwa, bez żadnych ekstra symboli (jak $ przy zmiennych), więc taki zapis:

$_GET[login]

spowoduje, że PHP zrozumie słowo login NIE jako klucz tablicy - weźmie wartość stałej, która brzmi root i w efekcie odczyta $_GET['root'] - co będzie nieoczekiwane. PHP niestety zbyt często stara się być mądrzejsze od użytkownika dlatego pozwala na brak cudzysłowiów przy odwoływaniu się do tablicy - wtedy jeżeli stała nie jest zdefiniowana - potraktuje Twoje literki jako ciąg znaków [i wygeneruje ostrzeżenie].

Dla Ciebie pewnie brzmi niegroźnie, ale - korzystając z jakichś bibliotek - może się okazać, że jakaś definiowała stałe - i wtedy Twój skrypt "nie wiadomo dlaczego" by się posypał.

Teraz kwestia ostrzeżeń i isset - PHP generuje ostrzeżenia i błędy na wielu "poziomach". Domyślnie serwery są ustawiane tak, że "małe" problemy są ignorowane po cichu (np. odwołanie się do nieistniejącej zmiennej) - tu znowu PHP jest mądrzejsze od użytkownika, bo czegoś takiego nie zrobisz w "poważnych" językach programowania - choć ja osobiście to lubię. Ale trzeba być świadomym wszystkich magicznych "ulepszeń" PHP przy pisaniu, bo można się zdziwić.
Za poziom (rodzaj) wyświetlania błędów odpowiada ustawienie error_reporting w php.ini. Zazwyczaj jest ono ustawione na:
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE, bądź error_reporting = E_ALL & ~E_NOTICE
U Ciebie jest teraz na error_reporting = E_ALL więc wyświetla Ci wszystkie błędy i ostrzeżenia, nawet te najmniejsze. Z jednej strony - E_ALL pozwala Ci pisać kod naprawdę dobrze, z drugiej strony zazwyczaj wystarczy dołączyć jakąś bibliotekę i okazuje się, że inni się nie przejmowali takimi sprawami i plan, żeby Twoja strona działała normalnie z E_ALL odpada.
Swoją drogą - na serwerach publicznych WSZYSTKIE błędy powinny być ukryte - często wg opisu takiego błędu można być w stanie odnaleźć jakąś dziurę i przy jej pomocy - coś napsuć. Na domowym serwerze, na którym sobie piszesz - użyj jednej z podanych wyżej wartości.

Skróty typu <?="test"?> nie działają ze względu na ustawienie short_open_tag = Off. Pownieneś to tak zostawić, a wszelkie dołączone biblioteki używające short_open_tags samodzielnie poprawić. Dlaczego tak?
Opcja ta istnieje dziś ze względu na kompatybilność ze starymi skryptami, ale zaleca się jej wyłączenie zarówno na serwerach publicznych jak i domowych. Jaki jest powód? Tagów <? używa wiele języków, w tym popularny XML - więc serwer mógłby być zmylony i zacząć probówać parsować zły kod jako PHP - i się na tym wyłożyć po prostu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1