Autor Zpráva
chadas
Profil *
Potřeboval bych poradit jak musí být správný zápis abych vkládal pomocí INCLUDE připravený soubor. Ve zdrojovém kódu mám
<?php
    include("/inc/novinky.php");
?>
I když to takto vložím do souboru v dalším podadresáři, obsah souboru novinky.php se mi nenačte a ani mi to nevypíše chybu. Funguje to pouze v tomto tvaru
<?php
    include("../inc/novinky.php");
?>
případně
<?php
    include("../../inc/novinky.php");
?>
atd. Je nějaká možnost jak se vyhnout zápisu ../../../ pro přechod do jiných podadresářů?
Borius
Profil
chadas:
Je taková možnost, ale je to docela nešťastné řešení: Zadávej cesty v absolutním tvaru, nikoli relativním. Tzn. include('/inc/novinky.php');

Nebo si ulož „relatinu“ do proměnné, případně konstanty:
//Platí vždy jen jedna ze tří následujících možností
$dir='';//definice v rootu
$dir='../';//definice v podsložce
$dir='../../';//definice v podpodsložce

//Vlastní vložení souboru, ať jsem kde jsem
include("{$dir}inc/novinky");
chadas
Profil *
Takhle si ale vůbec nepomůžu. Spíše to bude složitější o definici proměnné. Zkusi ljsem to teď malinko jinak:
<?php
    require "/3w/ic.cz/s/test/inc/novinky.php";
?>
Je to s celou cestou vcetne umisteni domeny na vzdalenem disku ale funguje to. Jenom nevím jaké to má případné nedostatky. To ale asi ukáže čas. Zřejmě by byl problém při přesunu na jiný vzdálený disk :( Nic jiného mě ale nenapadlo s mojí neznalostí PHP :( Možná bude nakonec nejlepší zůstat u původní verze (../; ../../; ../../../ atd.). Myslel jsem, že se to dá udělat nějak efektněji.
Borius
Profil
Pokud se jedná o pár souborů, ještě se nic neděje. Až půjde o desítky či stovky souborů (načítání novinek, jejich datování, způsoby třídění, přihlašování, přidávání či mazání novinek, jejich úpravy, pojídání čokolády, spolupráce s externími zdroji, protokolování atd. atd.), to už se bude dít, až budeš chtít změnit hosting nebo udělat nějakou razantní změnu, nebo jen spouštět a zpracovávat web ve svém počítači…

Když už přece jen tu absolutní adresu, asi bych dal přednost adrese na serveru ‘/s/test/inc/’ před adresou na disku ‘/3w/ic.cz/s/test/inc/’.
chadas
Profil *
Špatně jsem se vyjádřil. Ono se ve skutečnosti jedná o adresu vzdáleného serveru. Spíš jsem si myslel, že pomocí funkce se dá zjistit cesta do adresáře, ta se vloží do proměnné a to se potom poskládá dohromady.
Možná jsem taky nepochopil tu definici proměnné kde se vlastně definuje. asi to nebude u každého souboru. Nějak si to neumím představit v praxi :(
Borius
Profil
chadas:
pomocí funkce se dá zjistit cesta do adresáře
Například:
//Absolutní cesta adresáře
define('DIR', __DIR__);
chadas
Profil *
Díky ale to mi bohužel nic neříká. Netuším co s tím dál :(
peta
Profil
chadas:
Kdyby sis roklikal podtrzene odkazy v tom kodu...
define('DIR', __DIR__); // vytvori konstantu DIR a naplni ji obsahem php promenne __DIR__
echo DIR;
echo __DIR__;
define('AHOJ', __DIR__);
echo ' Moje konstanta = " ' . AHOJ . ' " ';
echo __DIR__;
Ugo
Profil
doplním, že konstanta __DIR__ je až od verze PHP > 5.3 , já zatím většinou pracuju s php 5.2 a tak si dávám pozor, na wz mám někde i php 4 (to už je problém xD), ale ve starších verzích místo __DIR__ použij:

dirname(__FILE__)
Borius
Profil
chadas:
Netuším co s tím dál :(
//Načtu soubor, ať jsem kdekoli
include(DIR.'/inc/novinky.php');
//Juchů, soubor byl slavně načten
Podmínkou samozřejmě je, že hlavní skript je stále stejný (přesněji – ve stejném adresáři).

Připomínka 1.:
Jak praví [#9] Ugo, u starší verze PHP nikoli ‘__DIR__’, alébrž ‘dirname(__FILE__)’.

Připomínka 2.:
Definoval jsem konstantu DIR. Pokud bys chtěl spíše proměnnou, vytvoříš ji analogicky takto:
$dir=__DIR__;
Případně u starší verze PHP
$dir=dirname(__FILE__);
Šéva
Profil
chadas:
tohle by ti možná mohlo pomoci:
http://my.opera.com/Knedle/blog/show.dml/451690

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: