Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] in_array() expects parameter 2 to be array
Forum PHP.pl > Forum > Przedszkole
Kuba707
Witam.
Stronę odpalam poprzez Apache na localhoscie. Wpisując w przeglądarke adres localhost/strona wszystko jest OK. Ale gdy wpiszę adres: mojeip/strona to są różne błędy. Co do adresu IP to mam przekierowanie na routerze.
No ale dobra, jak mówiłem, gdy wpisuję adres localhost to wszystko w porządku, a gdy wpisuję IP/strona to już nie. Oto błędy:
Kod
Warning: in_array() expects parameter 2 to be array, null given in C:\xampp\htdocs\strona\index.php on line 52

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\strona\index.php:52) in C:\xampp\htdocs\strona\index.php on line 25

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\strona\index.php:52) in C:\xampp\htdocs\strona\index.php on line 33

Pierwszy error jest dla mnie dziwny.. Oto kod:
Kod
$languages = array("pl", "en");

// tutaj rozne if'y itp.


function getUserLang()
{
    $jezyk = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    if(strstr($jezyk[0], '-') === FALSE && in_array($jezyk, $languages))
    {
        return $jezyk;
    }
    return false;
}


Co do pozostałych errorów to znam je. Ale jest to dziwne. Na początku mam PHP, nic nie drukuje na stronie, kodowanie UTF8 bez BOM więc nie rozumiem. Ale przecież na adresie localhost/strona nie wywala żadnych błędow, a na mojeip/strona już są błędy.

Trochę może porozwalany ten mój temat więc sorry.
kokers
poczytaj o zasięgu zmiennych .... koniecznie!

wrzuć :

$languages = array("pl", "en");

do funkcji i będzie ok.
Kuba707
Ahh.. zapomniałem o tym zasięgu, dzięki wink.gif.
thek
Masz ten warning ponieważ $languages jest w zasięgu globalnym skryptu i funkcja nie zna go wewnątrz. Stąd tworzy sobie ją w locie i ustawia NULLem, a in_array się burzy. Masz różne wyjścia... Albo $languages oznaczasz jako global wewnątrz funkcji na starcie (zły sposóB), albo przekazujesz jako parametr do funkcji (poprawny sposób). Można też jak radzi kolega wyżej pchnąć całą tablicę do wnętrza funkcji, ale jeśli używasz jej jeszcze poza funkcją, to wtedy ją "zgubisz". Stąd lepiej pchnąć ją jako parametr. Po prostu bezpieczniej przerobić jedną funkcję małą, niż potem kombinować w kilku miejscach.

Co do warningów to najprawdopodobniej jadąc po IP masz gdzieś ustawione wyświetlanie wszystkich, włącznie z warningami (jakaś wariacja z konfigiem serwera), a na localhoście wyświetlanie to masz wyłączone i dlatego warningów nie pokazuje, choć są one, ale ukryte przed użytkownikiem.
Kuba707
Co do tego że się tworzy w locie to od razu się domyśliłem jak usłyszałem hasło "zasięg zmiennych" wink.gif.
Ale nie rozumiem jednego.
Cytat
Albo $languages oznaczasz jako global wewnątrz funkcji na starcie (zły sposócool.gif

Dlaczeog zły sposób? Chodzi o to, że może kiedyś się takie coś wydarzyć że pobierze inną zmienną globalną o takiej samej nazwie?
thek
Global ustawione dla zmiennej jest złą praktyką. Nie mam co strzępić języka... Sam poczytaj smile.gif
http://forum.php.pl/index.php?showtopic=49998&st=0
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.