Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z funkcją include
siankotm
post 2.05.2009, 16:03:24
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 2.05.2009

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


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
Go to the top of the page
+Quote Post
Bobek1910
post 2.05.2009, 16:13:20
Post #2





Grupa: Zarejestrowani
Postów: 31
Pomógł: 3
Dołączył: 14.04.2009
Skąd: Wziąć piwo?

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


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


A podasz treść tego błędu? smile.gif
Go to the top of the page
+Quote Post
insecure
post 2.05.2009, 16:23:01
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 2.05.2009

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


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 .

Ten post edytował insecure 2.05.2009, 16:27:38
Go to the top of the page
+Quote Post
siankotm
post 2.05.2009, 20:34:28
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 2.05.2009

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


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
Go to the top of the page
+Quote Post
Kildyt
post 2.05.2009, 21:45:31
Post #5





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


Znasz podstawy angielskiego? tongue.gif Przecież jak byk ci pisze, że nie można otworzyć pliku.


--------------------
Go to the top of the page
+Quote Post
siankotm
post 2.05.2009, 22:57:25
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 2.05.2009

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


No tak, ale dlaczego tak się dzieje? Przecież plik o takim adresie na pewno istnieje... sad.gif
Go to the top of the page
+Quote Post
Pavlus
post 3.05.2009, 12:58:26
Post #7





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 25.07.2008

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


Wyglada to jakbys chcial includowac pliki z poza twojego home, dlatego krzyczy o restrykcji z open_basedir. Albo zle chmody.
Go to the top of the page
+Quote Post
gulldarek
post 3.05.2009, 13:01:31
Post #8





Grupa: Zarejestrowani
Postów: 156
Pomógł: 15
Dołączył: 13.09.2003
Skąd: London

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


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. ?>
Go to the top of the page
+Quote Post
siankotm
post 3.05.2009, 16:35:43
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 2.05.2009

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


Działa!! ;D Wielkie dzięki winksmiley.jpg
Zmieniłem na "./pliki/..." i działa ;D
Go to the top of the page
+Quote Post
gulldarek
post 3.05.2009, 16:47:01
Post #10





Grupa: Zarejestrowani
Postów: 156
Pomógł: 15
Dołączył: 13.09.2003
Skąd: London

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


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
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: 14.08.2025 - 01:03