ďťż

[PHP] Ścieżki względne w Include Nowość w PHP5 czy konfiguracja?

       

Podstrony


telcocafe

Plik C:\xampp\htdocs\poll.php
require 'katalog/sonda/sonda.php';
Plik C:\xampp\htdocs\katalog\sonda\sonda.php
require 'hello.php';Zauważmy, że katalogiem bazowym nadal jest C:\xampp\htdocs

Plik C:\xampp\htdocs\katalog\sonda\hello.php
Hello world!
Co otrzymujemy? "Hello world!"

Taki kod nie zadziałałby w PHP4. W PHP5 jest możliwe dołączenie pliku z tego samego katalogu (niebazowego) bez podania ścieżki. Czy to zależy od wersji PHP, czy od konkretnej konfiguracji?

Include path: .;C:\xampp\php\PEAR

Aby każdy zrozumiał, o co chodzi, podam prosty przykład.

1. W głównym folderze jest nasz główny plik index.php.
2. Ściągamy komponent / skrypt i umieszczamy go w folderze /skrypt/.
3. W pliku index.php dołączamy: /skrypt/skrypt.php.
4. Plik skrypt.php dołącza bezpośrednio inny plik w tym samym folderze, np. skrypt2.php
include 'skrypt2.php';Mimo że w naszym przypadku katalogiem bazowym jest główny folder (ten, w którym siedzi nasz index.php).

Czy taki skrypt ma prawo działać na każdej konfiguracji PHP 5?

Czy jednak trzeba wykryć ścieżkę względem index.php i podawać ją przy każdym include bądź wywołać chdir()?



Er, nie rozumiem o co ci chodzi ;) Przy include parser szuka pliku zaczynając od katalogów z INCLUDE_PATH kończąc na katalogu wywołanego skryptu. Tak więc include 'foo/bar.php'; załączy bar.php z podkatalogu foo skryptu jeżeli wcześniej nie znajdzie czegoś takiego w katalogach z INCLUDE_PATH. Zaleca się podawanie ścieżki względnej typu include './foo/bar.php' tak by parser nie przeszukiwał całego INCLUDE_PATH, tylko od razu szukał względem wywołanego skryptu w przeglądarce (ścieżki są względne względem wykonującego się skryptu niezależnie od zagnieżdżenia include).

Chyba trochę niejasno opisałem problem, ale już nieważne. Dla bezpieczeństwa lepiej wywołać chdir(), aby ustawić ścieżkę skryptu, a potem przywrócić poprzednią też za pomocą chdir(). Ewentualnie utworzyć stałą SCRIPT_DIR ze ścieżką.

Chodzi o to, że skrypt.php jest już dołączony przez plik z wyższego katalogu. Zadziała zarównoinclude('./skrypt/skrypt2.php'); //oraz include('skrypt2.php');

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.