Autor Zpráva
hal_sk
Profil
Zdravím,
Takto sa snažím inkludovať súbor "data.txt", ktorý sa nachádza v adresári o úroveň vyššie a nefunguje to:
<?php
include("../data.txt");
?>

Skúšal som to aj pomocou absolútnej cesty takto:
<?php
include("/data/k/a/example.com/sub/data.txt");
?>

ale to tiež nefunguje.
Cesta k index súboru z ktorého volám include je: /data/k/a/example.com/sub/test/index.php
Cesta k súboru ktorý chem inkludovať je: /data/k/a/example.com/sub/data.txt
Je to v rámci subdomény čiže v tomto prípade internetová URL vyzerá takto: http://test.example.com/
Čo spraviť, aby to dokázalo nájsť ten súbor, aj keď je mimo aktuálneho adresára?
Samo
Profil *
<?php
include('./../data.txt');
?>

alebo absolútna
<?php
include('http://test.example.com/data.txt');
?>
AM_
Profil
Samo:
alebo absolútna
<?php
include('http://test.example.com/data.txt');
?>
FUJ! //dodatek: jistěže by to nefungovalo, jednak proto, že by se soubor otevřel přes HTTP, PHP v něm se zpracovalo ve vlastním vláknu a jestli sedí nebo nesedí cesta, to už je jen malý detail. Pokud v data.txt není žádný výkonný kód PHP, není vhodné používat include, ale každopádně tohle je šílený nesmysl, který občas vyplodí nějaký programátor Pokusomyl.

správně je:
include(dirname(__FILE__)."/../data.txt");
(od PHP 5.3 je dostupná i konstanta __DIR__)
problém nastává, že pokud už soubor index.php je includován z jiného adresáře, je ten brán jako pracovní, proto relativní odkaz nefunguje.

Jinak pro PHP soubory silně doporučuji používat vždy koncovku php a nikoli txt kvůli bezpečnosti.
shaggy
Profil
Samo:
alebo absolútna
<?php
include('http://test.example.com/data.txt');
?>
To nie je FUJ!, to by ani nefungovalo.
Ak je root subdomény v /data/k/a/example.com/sub/test/, tak logicky sa na tejto adrese: 'http://test.example.com/data.txt nič nenachádza
hal_sk
Profil
shaggy:
To nie je FUJ!, to by ani nefungovalo.
Ak je root subdomény v /data/k/a/example.com/sub/test/, tak logicky sa na tejto adrese: 'http://test.example.com/data.txt nič nenachádza
U môjho webhostingu nachádza. Ale nedá sa z tej cesty (http://test.example.com/data.txt) includovať.
shaggy
Profil
hal_sk:
U môjho webhostingu nachádza
Tak potom to znamená, že ten súbor máš buď v /data/k/a/example.com/sub/test/data.txt a nie v /data/k/a/example.com/sub/data.txt, alebo je root subdomény v /data/k/a/example.com/sub/ a nie v /data/k/a/example.com/sub/test/.
Ako to teda vlastne je?
hal_sk
Profil
Stále s tým mám problém:
Samo:
<?php
include('./../data.txt');
?>

Nefunguje.
AM:
include(dirname(__FILE__)."/../data.txt");
Nefunguje.

Moja adresárová štruktúra (to čo vidím v FTP cez Total Commander - ešte je tam tretí adresár [log], ale pre nás je nepodstatný):
[web]....index.php (to je index hlavnej stranky "http://www.example.com/")
[sub]....[test]....index.php (to je index subdomeny test "http://test.example.com/" v ktorom chcem inkludovat subor "data.txt")
   :...data.txt (tento tento subor chcem includovat)

Ide o to že tam budem mať vytvorených viacero subdomén (v adresári [sub] budú ďalšie adresáre, každí pre každú subdoménu) a bude jeden spoločný súbor v adresári [sub] ktorý budem inkludovať vo všetkých subdoménach.
hal_sk
Profil
Aby som to nekomplikoval. Potrebujem includovať súbor, ktorý je v rodičovskom adresári adresára z ktorého includujem (o úroveň vyššie).
Čize podľa http://php.net/manual/en/function.include.php :
For example, if a filename begins with ../, the parser will look in the parent directory to find the requested file.
By my to malo fungovať takto:
<?php
include("../data.txt");
?>

A nefunguje. Tak reku že či nebude nejak špeciálne nastavená politika pre tieto adresáre subdomén zo strany webhostingu.
AM_
Profil
[#7] hal_sk
<?php
include(dirname(__FILE__).'/../../data.txt');
?>

by nefungovalo? z té struktury vypadá, že je to o dvě úroveň výše. Také bys mohl dodat chybovou hlášku.
hal_sk
Profil
AM:
Nefunguje.
Ani keď to zmením na:
<?php
include(dirname(__FILE__).'../data.txt');
?>

Štrukrúra je takáto:

Ale všimol som si, že to funguje v adresári [web]. Poslal som dotaz na webhosting, uvidím čo povedia. Ale dnes z toho asi nič nebude.
Davex
Profil
Výstup funkce dirname() nekončí lomítkem, takže je ho tam potřeba dopsat.

<?php
include(dirname(__FILE__).'/../data.txt');
?>
hal_sk
Profil
Prišla odpoveď z helpdesku a ak som to správne pochopil, includovať môžem súbory len z adresára [web], alebo z jednotlivých podadresárov adresára [sub].
hal_sk
Profil
Davex:
Hmm, myslím že som to skúšal aj s tým lomítkom a nešlo to, ale teraz to už ide. Z webhostingu mi tam zrušili nejaké reštrikcie čo sa týkajú adresárov, možno aj to pomohlo.
Problém je vyriešený, vďaka všetkým za váš čas.
Davex
Profil
hal_sk:
Příště si zapni zobrazování chyb PHP a napiš sem chybovou hlášku. S chybovou hláškou by to bylo jasné hned.

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: