Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] in_array() expects parameter 2 to be array
Kuba707
post 2.03.2011, 20:36:33
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 20.03.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kokers
post 2.03.2011, 20:41:53
Post #2





Grupa: Zarejestrowani
Postów: 154
Pomógł: 33
Dołączył: 18.10.2010
Skąd: Katowice

Ostrzeżenie: (0%)
-----


poczytaj o zasięgu zmiennych .... koniecznie!

wrzuć :

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

do funkcji i będzie ok.

Ten post edytował kokers 2.03.2011, 20:42:42


--------------------
‎"Sometimes you're gonna get odd error syntax, unexpected T_PAAMAYIM_NEKUDOTAYIM and you're like, what in the world is that thing i have no idea what went wrong in my code. In english that error means you screwed up the references to an object" Kevin Skoglund
Drobna prywata: Ależ nie nie, nie zamierzam zmieniać płci w najbliższym czasie, więc zwracanie się do mnie per Pan jest odrobinkę nietrafione.
Go to the top of the page
+Quote Post
Kuba707
post 2.03.2011, 20:43:54
Post #3





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 20.03.2010

Ostrzeżenie: (0%)
-----


Ahh.. zapomniałem o tym zasięgu, dzięki wink.gif.
Go to the top of the page
+Quote Post
thek
post 2.03.2011, 20:48:59
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Kuba707
post 2.03.2011, 21:06:28
Post #5





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 20.03.2010

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
thek
post 2.03.2011, 21:59:34
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.06.2025 - 10:03