Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Apsolutne vs. relativne mrvice (PHP)

10 views
Skip to first unread message

DiVeRgEnT

unread,
Apr 24, 2018, 8:59:02 AM4/24/18
to
Molim poznavaoce PHP-a za hint, koji dio koda moram izmjeniti da mi se
apsolutni linkovi u breadcrumbs (tipa:
http://apsolutni.com/relativni.php) pretvore u relativni link (tipa:
/relativni.php). Ja pokusavam, pa mi izbacuje gluposti... Mislim da je u
varijabli $base, ali mi poduplava apsolutni, umjesto da ga izbaci...ne
znam... Evo koda:


// This function will take $_SERVER['REQUEST_URI'] and build a
breadcrumb based on the user's current path
function breadcrumbs($separator = ' » ', $home = 'Pocetna') {

global $breadcrumbs;

// This gets the REQUEST_URI (/path/to/file.php), splits the string
(using '/') into an array, and then filters out any empty values
$path = array_filter(explode('/', parse_url($_SERVER['REQUEST_URI'],
PHP_URL_PATH)));

// This will build our "base URL" ... Also accounts for HTTPS :)
$base = ($_SERVER['HTTPS'] ? 'https' : 'http') . '://' .
$_SERVER['HTTP_HOST'] . '/';

// Initialize a temporary array with our breadcrumbs. (starting with
our home page, which I'm assuming will be the base URL)
$breadcrumbs = Array("<a href=\"$base\">$home</a>");

// Find out the index for the last value in our path array
$full_path = array_keys($path);
$last = end($full_path);

// Build the rest of the breadcrumbs
foreach ($path AS $x => $crumb) {
// Our "title" is the text that will be displayed (strip out .php and
turn '_' into a space)
$BreadcrumbTitle = ucwords(str_replace(Array('.php', '_'), Array('',
' '), $crumb));

// If we are not on the last index, then display an <a> tag
if ($x != $last)
$breadcrumbs[] = "<a href=\"$base$crumb\">$BreadcrumbTitle</a>";
// Otherwise, just display the title (minus)
else
$breadcrumbs[] = $BreadcrumbTitle;
}

// Build our temporary array (pieces of bread) into one big string :)
return implode($separator, $breadcrumbs);
}

--
Od kolijevke, pa do groba, za ispiranje mozga je doba.

Bruno Babic

unread,
Apr 26, 2018, 2:42:54 AM4/26/18
to
On 24.4.2018. 14:56, DiVeRgEnT wrote:
> $breadcrumbs[] = "<a href=\"$base$crumb\">$BreadcrumbTitle</a>";

$breadcrumbs[] = "<a href=\"$crumb\">$BreadcrumbTitle</a>";

--
bbabic(a)globalnet.hr
2b||!2b?

DiVeRgEnT

unread,
Apr 28, 2018, 4:39:02 AM4/28/18
to
Bruno Babic wrote:
> On 24.4.2018. 14:56, DiVeRgEnT wrote:
>> $breadcrumbs[] = "<a href=\"$base$crumb\">$BreadcrumbTitle</a>";
>
> $breadcrumbs[] = "<a href=\"$crumb\">$BreadcrumbTitle</a>";

Heh..., da, zvuci jednostavno, ali izbacivanje $base varijable radi
slicnu gresku kao kada sam uredjivao $base varijablu s raznim
pokusajima. Poduplava link. Doduse, uz mali napredak. Ne poduplava sada
cijeli URL, nego poduplava folder u kojem se nalazi neka datoteka. Npr.
frontend mrvica izgleda:

Home / folder / stranica

i kad kliknes na link "folder" odvede te na URL:

http://nekastranica.ocm/folder/folder

Umjesto na

http://nekastranica.com/folder/

ili barem

http://nekastranica.com/folder/index.php

Bruno Babic

unread,
Apr 30, 2018, 4:49:24 AM4/30/18
to
On 28.4.2018. 10:35, DiVeRgEnT wrote:
> Heh..., da, zvuci jednostavno, ali izbacivanje $base varijable radi
> slicnu gresku kao kada sam uredjivao $base varijablu s raznim
> pokusajima. Poduplava link. Doduse, uz mali napredak. Ne poduplava sada
> cijeli URL, nego poduplava folder u kojem se nalazi neka datoteka. Npr.
> frontend mrvica izgleda:

Problem je u tome sto ti je $crumb bez pocetnog /, pa ga browser tretira
kao relativni link i doda sve ono ispred. Rjesenje je da dodas jos taj
pocetni slash ispred:

$breadcrumbs[] = "<a href=\"/$crumb\">$BreadcrumbTitle</a>";

No, pogledao sam tu tvoju funkciju i njen rezultat je los jer URL u stilu:
http://server/prvi/drugi/treci

proparsa kao breadcrumb, ali su linkovi pogresni u smislu da link na
"drugi" izgleda:
http://server/drugi

a trebao bi izgledati ovako:
http://server/prvi/drugi

Nadam se da razumijes sto hocu reci, tj. da kuzis u cemu je problem.
Breadcrumb link ti pokazuje uvijek na root, bez obzira sto on nije u rootu.

Evo ti popravak dijela koda koji radi onako kako bi trebalo:

// Build the rest of the breadcrumbs
$theCrumb = ''; // ovo sam dodao
foreach ($path AS $x => $crumb) {
// Our "title" is the text that will be displayed (strip
out .php and turn '_' into a space)
$BreadcrumbTitle = ucwords(str_replace(Array('.php', '_'),
Array('', ' '), $crumb));

$theCrumb .= '/' . $crumb; // i ovo sam dodao, primjeti da
se automatski nadoda i pocetni slash

// If we are not on the last index, then display an <a> tag
if ($x != $last)
$breadcrumbs[] = "<a href=\"$theCrumb
\">$BreadcrumbTitle</a>"; // i tu sada koristis $mojCrumb koji vec ima
pocetni slash
// Otherwise, just display the title (minus)
else
$breadcrumbs[] = $BreadcrumbTitle;
}

--
bbabic(a)globalnet.hr
2b||!2b?

DiVeRgEnT

unread,
May 2, 2018, 5:04:02 AM5/2/18
to
Bruno Babic wrote:
> Problem je u tome sto ti je $crumb bez pocetnog /, pa ga browser tretira
> kao relativni link i doda sve ono ispred. Rjesenje je da dodas jos taj
> pocetni slash ispred:
>
> $breadcrumbs[] = "<a href=\"/$crumb\">$BreadcrumbTitle</a>";

Da, super, radi sad.


> No, pogledao sam tu tvoju funkciju i njen rezultat je los jer URL u stilu:
> http://server/prvi/drugi/treci
>
> proparsa kao breadcrumb, ali su linkovi pogresni u smislu da link na
> "drugi" izgleda:
> http://server/drugi
>
> a trebao bi izgledati ovako:
> http://server/prvi/drugi
>
> Nadam se da razumijes sto hocu reci, tj. da kuzis u cemu je problem.
> Breadcrumb link ti pokazuje uvijek na root, bez obzira sto on nije u rootu.
^^^^^^^^^^^^^^^^^^

Meni pokazuje, ili bi meni *trebao* pokazivati?

Ako sam dobro shvatio, kada bih imao vise poddirektorija, onda bi
breadcrumb linkovi krivo linkali, na ovaj nacin kako si napisao?


> Evo ti popravak dijela koda koji radi onako kako bi trebalo:

Hvala, ispravit cu to i na ostalim web sjedistima gdje koristim istu
funkciju. Nisam tu gresku primjetio, jer uglavnom imam samo jednu razinu
poddirektorija.

DiVeRgEnT

unread,
May 2, 2018, 5:24:01 AM5/2/18
to
DiVeRgEnT wrote:
> Nisam tu gresku primjetio, jer uglavnom imam samo jednu razinu
> poddirektorija.

Eh, ovako. Isao sam testirati vise razina poddirektorija i to me sjeti
zasto od vijeka vjekova ne koristim vise razina poddirektorija. Pa da
iskoristim ovaj thread za to pitanje...

Na pocetnoj stranici datoteke inkludam ovako:
<?php include('inc/headTagovi.inc.php'); ?>

Ali u poddirektorijima datoteke moram inkludati ovako:
<?php include('../inc/headTagovi.inc.php'); ?>

I kad nakon milion pokusaja stvaranja apsolutnog include linka prije
puno godina nije urodilo plodom, jednostavno sam otplilio vise razina
poddirektorija.

Jer, ne bi bio problem ispraviti na svakoj stranici druge razine
poddirektorija i dodati jos jedan ../ gdje treba, nego imam inkludove
inkludova, a tu onda dolazi do potpunog raspada sustava.

Pa kad sam se vec sada sjetio toga, mozda sada ima netko pametno
rjesenje kako napraviti apsolutni PHP include link?

Inace, radi se o GoDaddy shared hostingu. PHP verzija je bila 4.x do
prije par mjeseci, a sad je cini mi se 5.3. Ima i novija verzija, ali
moram ugasiti ovaj hosting i otvoriti i seliti sve na novi, a to mi se
neda..

Bruno Babic

unread,
May 2, 2018, 6:14:12 AM5/2/18
to
On 2.5.2018. 11:01, DiVeRgEnT wrote:
> Ako sam dobro shvatio, kada bih imao vise poddirektorija, onda bi
> breadcrumb linkovi krivo linkali, na ovaj nacin kako si napisao?

Upravo tako. Funkcija ti ne radi dobro u slucaju kada imas linkove koji
u sebi imaju neki kompleksniji path.

--
bbabic(a)globalnet.hr
2b||!2b?

Bruno Babic

unread,
May 2, 2018, 6:24:38 AM5/2/18
to
On 2.5.2018. 11:20, DiVeRgEnT wrote:
> I kad nakon milion pokusaja stvaranja apsolutnog include linka prije
> puno godina nije urodilo plodom, jednostavno sam otplilio vise razina
> poddirektorija.

dirname(__FILE__) ce ti dati apsolutni path do filea u kojem se ta
linija izvrsila.

Ja obicno deklariram neku konstantu u koju spremim apsolutni path do
root direktorija i onda dalje radim s konstantom:
define('ABSPATH', '/var/www/nesto');

Kasnije tu konstantu koristis u stilu:
include ABSPATH.'/direktorij/jos/jedan/file.php';

U tvom slucaju kada nemas pristup serveru na toj razini, mozes staviti
nesto u stilu:
define('ABSPATH', dirname(__FILE__));

u neki "config" file koji se nalazi u rootu i kojeg ce sve ostale
skripte includeati i samim time dobiti tu konstantu postavljenu na
apsolutni path te je dalje koristiti kao konstantu.

--
bbabic(a)globalnet.hr
2b||!2b?

DiVeRgEnT

unread,
May 2, 2018, 8:39:01 AM5/2/18
to
Bruno Babic wrote:
> U tvom slucaju kada nemas pristup serveru na toj razini, mozes staviti
> nesto u stilu:
> define('ABSPATH', dirname(__FILE__));

Nisam siguran, bilo je davno, ali mislim da sam se s tim igrao, bez
uspjeha...


> u neki "config" file koji se nalazi u rootu i kojeg ce sve ostale
> skripte includeati i samim time dobiti tu konstantu postavljenu na
> apsolutni path te je dalje koristiti kao konstantu.

Nemam .config datoteku. Kaze Google featuring GoDaddy da web.config ima
samo na windows serverima.

Moze php.ini?

Bruno Babic

unread,
May 2, 2018, 9:57:15 AM5/2/18
to
On 2.5.2018. 14:36, DiVeRgEnT wrote:
> Nemam .config datoteku. Kaze Google featuring GoDaddy da web.config ima
> samo na windows serverima.

Ne treba ti .config datoteka niti php.ini nego moras imati neki PHP file
kojeg mozes nazvati npr. config.php ili constants.php (svejedno je kako
se zove) koji ce biti u rootu te postavljati konstantu na onaj nacin
kako sam vec opisao. Ostali fileovi samo includeaju njega na nacin da
moraju znati gdje je taj file u odnosu na njih i nakon toga imas u
svakom fileu deklariranu konstantu koja ti pokazuje na apsolutni root
koju dalje koristis za include svega ostalog.

--
bbabic(a)globalnet.hr
2b||!2b?

DiVeRgEnT

unread,
May 3, 2018, 12:49:02 PM5/3/18
to
Jucer uopce nisam shvatio. Danas sam iz drugog citanja shvatio, pa
testirao, ali bilo je milion gresaka. Pa citaj opet. Jedno tri puta sam
ti napisao da ne funkcionira, pa dok sam sastavljao tekst, skuzim
gresku, pa ispravim i radi, ali na nekim drugim stranicama ne radi. Pa
ispocetka.

Uglavnom, SAD RADI SVE!

Ha, bogte, 10 godina se zajebavam s tim i sad kad sam skuzio mi das
relativno jednostavno rjesenje, koje ni GoDaddy ne zna. :-)

Ona ponuda za gajbu pive i dalje stoji. Kad jednom ides za ZG, ja sam ti
na pola puta, pa naleti na kavu. Gajba te ceka. ;-)

Bruno Babic

unread,
May 4, 2018, 2:11:59 AM5/4/18
to
On 3.5.2018. 18:47, DiVeRgEnT wrote:
> Ha, bogte, 10 godina se zajebavam s tim i sad kad sam skuzio mi das
> relativno jednostavno rjesenje, koje ni GoDaddy ne zna. :-)

Slijedeci put nemoj cekati 10 godina nego pitaj odmah :)

BTW, ovisno o verziji PHP-a onaj "dirname(__FILE__)" mozes zamijeniti sa
"__DIR__". Pise u PHP dokumentaciji od koje verzije je sto dostupno.

--
bbabic(a)globalnet.hr
2b||!2b?

DiVeRgEnT

unread,
May 4, 2018, 2:59:01 AM5/4/18
to
OK, hvala.

DiVeRgEnT

unread,
May 21, 2018, 11:29:01 AM5/21/18
to
DiVeRgEnT wrote:
> Bruno Babic wrote:
>> Ne treba ti .config datoteka niti php.ini nego moras imati neki PHP file
>> kojeg mozes nazvati npr. config.php ili constants.php (svejedno je kako
>> se zove) koji ce biti u rootu te postavljati konstantu na onaj nacin
>> kako sam vec opisao. Ostali fileovi samo includeaju njega na nacin da
>> moraju znati gdje je taj file u odnosu na njih i nakon toga imas u
>> svakom fileu deklariranu konstantu koja ti pokazuje na apsolutni root
>> koju dalje koristis za include svega ostalog.
>
> Uglavnom, SAD RADI SVE!


Evo jedan zanimljiv fenomen jednog dijela koji ne radi. Index sam
promijeno u apsolutne pathove, a ostale stranice jos nisam, jer ima
dosta stranica, dosta izmjena, a ovog trena mi se ne smije dogoditi da
neke stranice budu srusene, jer sam negdje zeznuo. Tamo negdje iza ljeta
cu taj dio dovrsiti.

E sad, doslo je do nekih promjena, pa sam parametar jedne varijable koja
se nalazi u jednoj inkludanoj datoteci promijenio. Radi se o datumu. Cim
promjenim taj datum, po cijelom sajtu se naravno taj datum mijenja, gdje
god pozivam tu varijablu. Medjutim, na indexu se ne mijenja. Ostaje
stari datum. Polupao sve zivce WTF i onda skuzim da je mozda stvar u
apsolutnim pathovima. Maknem to s indexa i sad i index uredno pokazuje
novi datum.

U cemu je stvar? Kada se stave apsolutni pathovi, onda server kesira
inkludane datoteke? Znam za taj problem dok sam se jedno vrijeme igrao s
WP-om. Nisam se bas nadao tom problemu kod rucnog strikanja stranice.

Bruno Babic

unread,
May 22, 2018, 9:31:00 AM5/22/18
to
On 21.5.2018. 17:25, DiVeRgEnT wrote:
> U cemu je stvar? Kada se stave apsolutni pathovi, onda server kesira
> inkludane datoteke? Znam za taj problem dok sam se jedno vrijeme igrao s
> WP-om. Nisam se bas nadao tom problemu kod rucnog strikanja stranice.

Tesko je reci bez kristalne kugle, ali znaj da kada radis include sa
apsolutnom putanjom, onda se uvijek taj isti file includea, dok u
slucaju relativne putanje konacni file koji ce se includeati ovisi
ustvari o fileu iz kojeg se includea.

--
bbabic(a)globalnet.hr
2b||!2b?

DiVeRgEnT

unread,
May 25, 2018, 4:29:01 AM5/25/18
to
Bruno Babic wrote:
> On 21.5.2018. 17:25, DiVeRgEnT wrote:
>> U cemu je stvar? Kada se stave apsolutni pathovi, onda server kesira
>> inkludane datoteke? Znam za taj problem dok sam se jedno vrijeme igrao s
>> WP-om. Nisam se bas nadao tom problemu kod rucnog strikanja stranice.
>
> Tesko je reci bez kristalne kugle,

A valjda su to neke zakonitosti shared hostinga. Sad bi trebalo pronaci
aplikacije koje managiraju cash, sto kod Wordressa nije problem, ali
opet rucno se zajebavat s tim... :-( Nekom drugom zgodom cu se nastaviti
igrati s tim.


> ali znaj da kada radis include sa
> apsolutnom putanjom, onda se uvijek taj isti file includea, dok u
> slucaju relativne putanje konacni file koji ce se includeati ovisi
> ustvari o fileu iz kojeg se includea.

Nisam shvatio.

DiVeRgEnT

unread,
May 25, 2018, 12:04:01 PM5/25/18
to
DiVeRgEnT wrote:
> Bruno Babic wrote:
>> On 21.5.2018. 17:25, DiVeRgEnT wrote:
>>> U cemu je stvar? Kada se stave apsolutni pathovi, onda server kesira
>>> inkludane datoteke? Znam za taj problem dok sam se jedno vrijeme igrao s
>>> WP-om. Nisam se bas nadao tom problemu kod rucnog strikanja stranice.
>>
>> Tesko je reci bez kristalne kugle,
>
> A valjda su to neke zakonitosti shared hostinga. Sad bi trebalo pronaci
> aplikacije koje managiraju cash, sto kod Wordressa nije problem, ali
> opet rucno se zajebavat s tim... :-( Nekom drugom zgodom cu se nastaviti
> igrati s tim.


Ali najgore sam tek shvatio. Iako sam prije par dana maknuo te
abspathove s pocetne stranice, ona je i dalje kesirana.

Bruno Babic

unread,
May 28, 2018, 2:19:44 AM5/28/18
to
On 25.5.2018. 10:25, DiVeRgEnT wrote:
>> ali znaj da kada radis include sa
>> apsolutnom putanjom, onda se uvijek taj isti file includea, dok u
>> slucaju relativne putanje konacni file koji ce se includeati ovisi
>> ustvari o fileu iz kojeg se includea.
>
> Nisam shvatio.

Apsolutna putanja, kao sto joj i ime kaze, pokazuje na jednu konkretnu
poziciju na disku.

Relativna putanja, kao sto joj i ime kaze, pokazuje poziciju na disku
koja je u odnosu na neku drugu poziciju tj. varijabilna je.

Dakle, include /var/www/nesto.php; ce *uvijek* uzeti file sa pozicije
/var/www/nesto.php

Dok, include nesto.php; ce uzeti file sa pozicije
/trenutna/izvrsna/putanja/nesto.php

Zamisli ovakvu strukturu direktorija:
/var/www/nesto.php
/var/www/burek/nesto.php
/var/www/banana/nesto.php

Dakle, jasno je da postoji vise od jednog filea nesto.php. Ukoliko je
trenutna izvrsna putanja /vwr/www, relativni include ce uzeti onaj prvi
file. No, ukoliko je trenutna izvrsna putanja jedna od onih drugih, onda
ce include uzeti neki od onih drugih fileova koji mogu imati potpuno
drukciji sadrzaj.

--
bbabic(a)globalnet.hr
2b||!2b?

DiVeRgEnT

unread,
May 28, 2018, 3:24:02 AM5/28/18
to
Bruno Babic wrote:
> Dakle, jasno je da postoji vise od jednog filea nesto.php. Ukoliko je
> trenutna izvrsna putanja /vwr/www, relativni include ce uzeti onaj prvi
> file. No, ukoliko je trenutna izvrsna putanja jedna od onih drugih, onda
> ce include uzeti neki od onih drugih fileova koji mogu imati potpuno
> drukciji sadrzaj.


A to si mislio. Dobro, to razumijem, nije u tome problem. Struktura je
ovakva.

/inc/headTagovi.inc.php
/inc/baza.php
/inc/engine.php

A headTagovi.inc.php u sebi imaju
include baza.php
include engine.php

A sve frontend stranice imaju:
include ../inc/headTagovi.inc.php

osim naslovnice koja ima:
include inc/headTagovi.inc.php

Dakle, sve je poslozeno u relativnim pathovima. Apsolutni s naslovnice
maknuti. Medjutim, server je iz nekog razloga kesirao baza.php kod
prikaza naslovnice. Ne i na ostalim stranicama, samo na naslovnici.
Uopce mi to nije jasno. I sad ja promjenim vrijednost neke varijable u
baza.php i cijeli web vidi tu promjenu, ali naslovnica ne vidi. Svasta...

Upravo sam zavrsio razgovor s GoDaddy korisnickom sluzbom i kazu da nema
nacina da se isprazni kes na mom hostingu. Osim (kao sto sam prije
spominjao) Wordpressa, ili slicnih CMS rjesenja koja imaju dodatke koji
se igraju sa serverom, ali koje ne koristim, jer je rucno strikani web.

Ono sto je zanimljivo, ukoliko na naslovnici umjesto inkludanja head
tagova (koja jos usput inkluda bazu i engine) kopiram ih i onda direktno
inkludam bazu i engine, promjene na varijablama u baza.php su sasvim
vidljive.

Bruno Babic

unread,
May 28, 2018, 5:04:50 AM5/28/18
to
On 28.5.2018. 9:23, DiVeRgEnT wrote:
> Upravo sam zavrsio razgovor s GoDaddy korisnickom sluzbom i kazu da nema
> nacina da se isprazni kes na mom hostingu. Osim (kao sto sam prije

Ne znam kako GoDaddy radi, ali znam da je glupo kesirati file
beskonacno. Jos ih mogu i razumjeti da kes traje neko vrijeme, ali da
traje dulje od npr. jednog dana nema smisla, pogotovo za dinamicki sadrzaj.

Ono sto mozes probati je preimenovati file u npr baza-20180528.php pa
ces onda raditi include pod tim imenom koje valjda nije kesirano.

--
bbabic(a)globalnet.hr
2b||!2b?

DiVeRgEnT

unread,
May 28, 2018, 12:29:02 PM5/28/18
to
Bruno Babic wrote:
> Ono sto mozes probati je preimenovati file u npr baza-20180528.php pa
> ces onda raditi include pod tim imenom koje valjda nije kesirano.

Odlicna ideja. Rjesen problem. Jedino onaj ABSPATH ocito ne smijem vise
ni u ludilu koristiti, jer radi dar-mar na GD shared hostingu. :-)
0 new messages