Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z funkcją include
Forum PHP.pl > Forum > Przedszkole
siankotm
Witam,

widziałem, że są już tematy o podobnej nazwie, ale nie znalazłem tam odpowiedzi na swoje pytanie.
Mianowicie robię stronkę opartą na DIV'ach i w jednym z nich umieściłem uwarunkowanie załadowania konkretnych plików, niestety pojawia się komunikat o błędzie.

Oto fragment kodu index.php:
CODE

<div id="prawa">

<div id="prawa_tresc">

<?php

$adres = $_SERVER[REQUEST_URI];
$etap1 = '/index.php?etap=1';
$etap2 = '/index.php?etap=2';
$etap3 = '/index.php?etap=3';
$etap4 = '/index.php?etap=4';
$etap5 = '/index.php?etap=5';


if($adres == $etap1)
{
include '/pliki/prawa1.php';
}
elseif($adres == $etap2)
{
include '/pliki/prawa2.php';
}
elseif($adres == $etap3)
{
include '/pliki/prawa3.php';
}
elseif($adres == $etap4)
{
include '/pliki/prawa4.php';
}
elseif($adres == $etap5)
{
include '/pliki/prawa5.php';
}
else
{
include '/pliki/prawa1.php';
}

?>

</div>

</div>



Przejrzałem już mnóstwo różnych kursów, postów na forach etc., ale i tak nie mogę dostrzec błędu.

Proszę o pomoc. Co mogłem zrobić źle?

Pozdrawiam winksmiley.jpg
Bobek1910
Cytat(siankotm @ 2.05.2009, 17:03:24 ) *
niestety pojawia się komunikat o błędzie.


A podasz treść tego błędu? smile.gif
insecure
w poniższej linii dodaj apostrofy:
Kod
$adres = $_SERVER[REQUEST_URI];


czyli ma to wyglądać tak:
Kod
$adres = $_SERVER['REQUEST_URI'];
lub
$adres = $_SERVER["REQUEST_URI"];

w zależności od konwencji jaką przyjmujesz w przeciwym wypadku REQUEST_URI jest interpretowana jako zdefiniowana stała.

Oprócz tego na wszelki wypadek podaj treść błędu, to co Ci wyświetla przeglądarka podczas przetwarzania, bo nie wiem czy to błąd nieznalezienia pliku, błędnej ścieżki, braku dostępu czy właśnie błąd opisany powyżej. Przydatne zanim się przejdzie do analizy kodu.

Oprócz tego proponuję skorzystanie z php'owskiego switch, case.
Kod
<?php
       switch ($adres) {
           default:
           case $etap1:
           break;
  
           case $etap2:
              break;
  
           case $etap3:
           break;
  
           case $etap4:
           break;
       }
   ?>


Wewnątrz case zastosuj funkcje include .
siankotm
Treść błedu:
--------------------

Warning
: main() [function.main]: open_basedir restriction in effect. File(/pliki/prawa1.php) is not within the allowed path(s): (/var/www/sites:/var/www/tmp:/var/www/advertisements/:/var/www/cadvertisements/) in /var/www/sites/yoyo.pl/2/l/2loteam/index.php on line 82

Warning: main(/pliki/prawa1.php) [function.main]: failed to open stream: Operation not permitted in /var/www/sites/yoyo.pl/2/l/2loteam/index.php on line 82

Warning: main() [function.include]: Failed opening '/pliki/prawa1.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/sites/yoyo.pl/2/l/2loteam/index.php on line 82

--------------------

Dodałem apostrofy, ale to nie pomogło. Osobiście nie rozumiem tego co jest napisane w powyższym komunikacie, ale mam niemalże pewność, że chodzi o samą funkcję "include", ponieważ próbnie zastosowałem też funkcję "echo", która w tym samym miejscu działa bez zarzutu. winksmiley.jpg

Próbowałem też zastosować 'switch' , niestety również błędy (takie same jak wyżej z tym, że wartości "on line" się zmieniły na 60).
Kod, który zastosowałem z ów funkcją:
CODE

<?php

$adres = $_SERVER['REQUEST_URI'];
$etap1 = '/index.php?etap=1';
$etap2 = '/index.php?etap=2';
$etap3 = '/index.php?etap=3';
$etap4 = '/index.php?etap=4';
$etap5 = '/index.php?etap=5';

switch ($adres) {
default:
case $etap1:
include '/pliki/prawa1.php';
break;

case $etap2:
include '/pliki/prawa1.php';
break;

case $etap3:
include '/pliki/prawa1.php';
break;

case $etap4:
include '/pliki/prawa1.php';
break;
}

?>


Dziękuję za dotychczasową pomoc smile.gif
Kildyt
Znasz podstawy angielskiego? tongue.gif Przecież jak byk ci pisze, że nie można otworzyć pliku.
siankotm
No tak, ale dlaczego tak się dzieje? Przecież plik o takim adresie na pewno istnieje... sad.gif
Pavlus
Wyglada to jakbys chcial includowac pliki z poza twojego home, dlatego krzyczy o restrykcji z open_basedir. Albo zle chmody.
gulldarek
zmien

  1. <?php
  2. include '/pliki/prawa1.php';
  3. ?>


na

  1. <?php
  2. include './pliki/prawa1.php';
  3. ?>


ew.

  1. <?php
  2. include 'pliki/prawa1.php';
  3. ?>
siankotm
Działa!! ;D Wielkie dzięki winksmiley.jpg
Zmieniłem na "./pliki/..." i działa ;D
gulldarek
Nie ma za co. /pliki/prawa1.php to sciezka absolutna, ./pliki/prawa1.php to sciezka relatywna do katalogu w ktorym znajduje sie Twoj skrypt.

Przyklad:

skrypt znajduje sie w katalogu /home/dev/mywebsite/index.php

bez kropki probuje przeczytac plik

/pliki/prawa1.php

z kropka otwiera plik

/home/dev/mywebsite/pliki/prawa1.php
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.