Autor Zpráva
zylvar
Profil
Zdravím,
potýkám se již delší dobu s problémem že upravuji již napsaný web. kde je include definovano timto zpusobem.

<?php
$dr=$_SERVER['DOCUMENT_ROOT'];

include($dr.'/cz/_includes/_html_head.php');
?>
dle mojich postřehů zápis "$dr=$_SERVER['DOCUMENT_ROOT'];" určuje root ze kterého mají vycházet cesty pro soubory nicméně nejsem schopen ručit na jaký root to definuje
chyba kterou mi vyhazuje zkušební server je


Warning: include(): open_basedir restriction in effect. File(/data/www/www_btb_cz/btb_cz../_includes/_html_head.php) is not within the allowed path(s): (/data/www/www_btb_cz/btb_cz) in /data/www/www_btb_cz/btb_cz/ebro/cz/ebro-today/index.php on line 15 Warning: include(/data/www/www_btb_cz/btb_cz../_includes/_html_head.php): failed to open stream: Operation not permitted in /data/www/www_btb_cz/btb_cz/ebro/cz/ebro-today/index.php on line 15 Warning: include(): Failed opening '/data/www/www_btb_cz/btb_cz../_includes/_html_head.php' for inclusion (include_path='.:/usr/local/share/pear') in /data/www/www_btb_cz/btb_cz/ebro/cz/ebro-today/index.php on line 15

budu vděčný za vaše rady jak tato funkce funguje
Tori
Profil
Podle tohoto: File(/data/www/www_btb_cz/btb_cz../_includes/_html_head.php) to spíš vypadá na pokus includovat něco jako include($dr.'../_includes/_html_head.php'); (s chybějícím lomítkem před dvěma tečkami).
user243
Profil
root jde zjistit jednoduše
echo $_SERVER['DOCUMENT_ROOT'];
ale já raději používám
include __DIR__ . '/cz/_includes/_html_head.php';
zylvar
Profil
user243:

no nejsem si uplně jistej kam to zapsat abych zjistil nebo nastavil ten root jsem v php docela začátečník a nedokážu si vysvětlit jak ta funkce funguje.
ještě se podívám na ten tvůj zápis.
nicméně pokud bude fungovat a pude aplykovat čeká mě přepsat to v nějakých 300 souborech.

celý ten systém stránky je navržen hodně do hloubky s absolutními cestami a protože to testuji na jiném webu nemůžu je použít.
jem v tomhle docela v koncích.
Tori
Profil
zylvar:
Spouštíte skripty pro jednotlivé stránky samostatně, anebo jde všechny přes jeden hlavní skript (který includuje co potřeba)?
Koukněte např. na vlákno PHP include, absolutní/relativní odkaz nebo kořenová adresa?, tam se naposled řešilo něco podobného, akorát že všechny stránky ten uživatel spouštěl přes index.php, takže nastavení správné cesty díky tomu stačilo provést jen na jednom místě.
zylvar
Profil
Tori:
V mém případě je to trochu odlišené pokusím se popsat situaci přehledně.
začínám na souboru index.html který je v kořenovém adresáři.
cesta ke složcekde mám umístěné soubory vypadá takle

/cz/složka/index.php //do tohoto souboru načímám includes
/cz/složka_includes/includes.php // z teto složky se mi načítají ncludes

adresářová struktura stránky by se dala popsat asi takto
/cz/složka1/index.php
/cz/podlsožka1/soubor.php
/cz/podlsožka1/podložka2/soubor.php
vpodsložce jsou vždy umístěné jednotlivé stránky které se načítají

problém je tedy v tom jak říci skryptu
$dr=$_SERVER['DOCUMENT_ROOT'];
include($dr.'/cz/_includes/_html_head.php');
který vkládá menu aby nastavil cestu vždy tak aby odpovídala hloubce zanoření do složek v podstatě automaticky upravovala ../../cz/složka_includes/includes.php poté na ../../../cz/složka_includes/includes.php
podle toho jak hluboko jsem zanořen v adresářové struktuře.

skripty se vlastně načítají ze souborů ve složce includes které se includují do souborů umístěné hlouběji v adresářové struktuře.
user243
Profil
Tak ještě jednou... zjistěte si root webu, nemusí odpovídat umístění scriptu; takže pokud odpovídá umístění scriptu tak musíte přidat před cestu .., popřípadě jak napsala Tori;
místo zjišťování kořene webu, jde jednoduše použít __DIR__, cesta bude absolutně adresovaná a nemusím se starat, kde ten hosting vlastně kořen má;
Vaš problém není problém, soubor index.php si všechny ostatní soubory načítá vzhledem k svému umístění, pokud je v samotných souborech načítání jiných částí, tak je cesta opět vzhledem k index.php a tak dál (neplatí pro soubory mimo web).
Tori
Profil
Tenhle soubor: /cz/podlsožka1/podložka2/soubor.php se teda spouští samostatně, anebo se includuje do /cz/složka/index.php? Trochu jsem se v tom popisu ztratila. Pokud se includuje, tak bych prostě v index.php nadefinovala pár konstant (absol. cesta k index.php, absol. cesta ke složce s includovanými skripty,...) a ty pak dál používala místo DocumentRoot.
zylvar
Profil
Jelikož jsem se nedostal na nastavení php na serveru vyřešil jsem to regulárním výrazem a proměnou která určuje kořen webu. Díky známému který mi to poradil za což mu moc děkuji.
zápis:
$server_root = __DIR__;
if($subsubpage != "") $server_root = eregi_replace("([^/]+)(/)([^/]+)$", "", $server_root);
elseif($page != "") $server_root = eregi_replace("([^/]+)$", "", $server_root);

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: