Autor Zpráva
nethor
Profil
Zdravím,

dosud jsem používal ve funkcích mkdir() a file_put_contents() pouze relativní cesty. Bez problémů.
Při použití cesty z kořene serveru, s lomítkem na začátku mě ale překvapilo, že se cesta nepočítá od htdoc, ale od rootu systému, na localu ve Win typicky od C:\ .
Řešení je asi upravit abs. cestu: $Path = $_SERVER['DOCUMENT_ROOT'].$Path.
Pokud chci ale pohodlně používat absolutní i relativní cesty, asi nezbývá než si napsat nenativní cfi s WorkAround:
if (preg_match('~^/~i', $Path)) {  // úprava absolutní cesty
    $Path = $_SERVER['DOCUMENT_ROOT'].$Path    ;
}
Připadá mi to jako zbytečná opičárna, neexistuje elegantnější cesta?
Kcko
Profil
do index.php si dej něco jako define('__ROOT__', __DIR__); a pak nebude problém ne?
V práci máme samozřejmě linux, svoje menší soukromý věci si dělám na WIN, funguje všude.
nethor
Profil
Kcko:
To problém je, protože musím separovat cesty pro interní práci a pro veřejné odkazy. Zbytečně.


Jde o to, že stejná absolutní cesta v různých použitích vede někam úplně jinam:
mkdir("/folder/")  ;
<a href="/folder/">folder</a>
narozdíl od relativních, které vedou na stejné místo:
mkdir("./folder/")  ;
<a href="./folder/">folder</a>
anonym_
Profil *
Kcko:
Možná mi něco uniká, ale nač definovat tu konstantu? Rovnou muže používat __DIR__.

nethor:
Ano, mícháš dohromady 2 nesouvisejici věci - cesty v PHP (na serveru) a cesty v HTML. Proč by dle tebe měly byt adresy v mkdir a v odkazu stejné, resp. stejně zapsané? Kazdy z tech řádků kódu je v jiné vrstvě aplikace (typicky MVC), každou z nich píše pravděpodobně jiný člověk.

V PHP použij relativní nebo absolutní s __DIR__ na začátku, v HTML relativní nebo absolutní s lomítkem na začátku. Řešis problém, který je umělý a reálně není.
nethor
Profil
anonym:
Konstanta by se v tomto případě hodila, protože __DIR__ obsahuje jinou hodnotu, podle umístění souboru, ve kterém je použitý.

Ve třídě jsem s relativními cestami mohl používat stejnou cestu pro interní práci v PHP i pro html výstup generovaný PHP.
S absolutními musím všechny cesty generovat dvojmo. To je reálný problém. Připadá mi to přes ruku, ptal jsem se, jestli neexistuje elegantnější cesta.
anonym_
Profil *
nethor:
Nikoliv, hodnota z __DIR__ nemá v HTML odkazech co dělat, takové asi snad ani fungovat nebudou, ne?

Základní problém je ten, ze mícháš jabka s hruškami, tedy PHP s HTML. Začal bych tam. Když už pracovat s absolutními URL, tak v PHP s __DIR__, v HTML pak s nějakou definovanou šablonovou promennou s hodnotou https://example.com.
nethor
Profil
anonym:
Nikoliv, hodnota z __DIR__ nemá v HTML odkazech co dělat, takové asi snad ani fungovat nebudou, ne?
O tom právě mluvím. Uniká ti podstata dotazu. Nevíš? Nevíš, nevadí.
anonym_
Profil *
nethor:
Pravé ze vím a snažil jsem se ti vysvětlit, ze to tak nefunguje. Stejně jako PHP nemůže vidět javascriptovou proměnnou, tak nemůžou byt tyhle 2 URL zapsané jednou proměnnou (nebo stejnou cestou).

Reálně to ničemu nevadí, protože… proč by vlastně mělo? V vetsine kódů to navíc budou psát dva různí lidé, každý zvlášť, v jiném souboru a jindy, tak není důvod, aby to bylo stejné.

I ty relativní adresy mohou a často budou (pokud teda nebastlis všechno dohromady) směřovat jinam. Relativně k souboru, kde ji volám, což muže byt i o několik adresářů jiné zanoreni.

Pokud jsi spokojený s výsledkem te funkce v #1, asi ji klidne používej dal. Chudák ten, kdo ten projekt po tobě jednou převezme…
Kcko
Profil
nethor:
Na co potřebuješ relativní a absolutní? Pokud vkládáš přes PHP skript jiný soubor, tak Ti musí stačit ona konstanta nadefinovaná v indexu. Pokud to potřebuješ např. na přilinkování assetů, tj. něco na práci s .htaccessem třeba, tak si udeláš funkci nebo jinou konstantu, rozšířenou o tu základní.

Moc nerozumím.

anonym
Jsi ve vlákně o PHP, proč do toho taháš HTML?
anonym_
Profil *
Kcko:
Viz #3.
Kcko
Profil
anonym:
Aha, to jsem přehlédl. Sorry. Nicméně, ano, máš pravdu, v HTML resp šablonovacím souboru, by bylo vhodné, pokud to není nějak připravené dopředu používat funkci nebo proměnnou, která to řeší, obdoba $basePath z Nette.

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:

0