Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Bezwzględna ścieżka do pliku
Forum PHP.pl > Forum > PHP
zaajcu
Cześć wszystkim.
Mam mały problem z ścieżkami do pliku a mianowicie mam taki układ folderów

www
moja strona
| admin
| | img
| | logo.jpg
| | admin.php
|
index.php


w pliku admin.php wybieramy sobie grafikę która ma się wyświetlić w pliku index.php jak i admin.php
wybieranie obrazka realizuje poprzez scandir('img') który wyswietla mi obrazki, po wybrani którego ścieżka do niego wyglada tak "img/logo.jpg"
natomiast jak wyświetlam z index.php to rzecz jasna tego obrazka nie widzi.

potrzebował bym jakoś zrobić żeby ścieżka do pliku zamiast img/logo.jpg wygladała np tak: http://mojastrona.pl/admin/img/logo.jpg znacie jakiś sposób żeby to zrobić?
gorden
  1. if($_SERVER['PHP_SELF'] == 'index.php') $sciezka = 'admin/'.$sciezka;
zaajcu
no ok to jest dobre rozwiązanie ale tylko w tym konkretnym przypadku bo jeżeli będę chciał to wyświetlić gdzieś indziej to będzie problem. Wykombinowałem coś takiego:

  1. $dir = str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER['SCRIPT_FILENAME']);
  2. $dir = pathinfo($dir);
  3. $dir = $dir['dirname'];
  4. $dir =$_SERVER['HTTP_HOST'].'/'.$dir;


powiedzmy ze to zwraca

http://mojastrona.pl/admin/

jezeli adres obrazka jest img/logo.jpg to wystarczy to dodac i po sprawie ale jeżeli adres obrazka będzie ../img/logo.jpg to nie mam pomysłu jak to połączyć
!*!
http://mojastrona.pl/img/logo.jpg
zaajcu
Cytat(!*! @ 6.12.2011, 10:17:55 ) *

to wiem ze to tak będzie wyglądać pytanie tylko jak to zrobić mając 2 stringi

  1. stringA = 'http://mojastrona.pl/admin';
  2. stringB = '../img/logo.jpg';
!*!
Pytałeś o ścieżkę bezwzględną, to jest właśnie ona.

Ze stringaA usuń wyrażeniem regularnym wszytko co jest po / albo pobierz z tego domenę.
A ze stringaB usuń kropki basename()

Ewentualnie "./img/logo.jpg" o ile katalog img jest tam gdzie index.
zaajcu
no właśnie nie jest i tu jest mały problem bo w bazie danych muszę przetrzymywać link do pliku i ten link może być wyświetlany w różnych plikach które będą zagnieżdżone.
dlatego nie mogę mieć w bazie linka typu ../../img/logo.jpg czy też img/logo.jpg tylko muszę mieć pełną ścieżkę do niego np http://mojastrona.pl/admin/img/logo.jpg

jak by się dało zrobić z ../../img/logo.jpg ścieżke bezwzględną np d:/www/mojastrona/admin/img/logo.jpg to jest problem z głowy tylko nie wiem czy da się to jakoś zamienić

Misja chyba wykonana, zrobiłem coś takiego i jak na razie działa wink.gif

  1.  
  2. $file_dir = '../admin/img';
  3. $dir = $_SERVER['HTTP_HOST'].'/'.str_replace($_SERVER['DOCUMENT_ROOT'],'',str_replace('\\','/',realpath($file_dir)));
by_ikar
Coś takiego:

  1. <?php
  2.  
  3. str_replace('//', '/', dirname($_SERVER['SCRIPT_NAME']).'/');


zwróci ci "/admin/", jeżeli admin.php będzie pod takim linkiem:

Kod
http://mojastrona.com/katalog1/katalog2/admin/admin.php


to powyższy str_replace zwróci ci taką ścieżkę: "/katalog1/katalog2/admin/". Możesz do tego dodać sobie katalog z obrazami:

  1. <?php
  2.  
  3. $imageUrl = str_replace('//', '/', dirname($_SERVER['SCRIPT_NAME']).'/img/');


I ta zmienna będzie przechowywać bezwzględną ścieżkę do twojego katalogu z obrazkami. Bez względu na to do jakiego katalogu przeniesiesz admin.php to zawsze zmienna $imageUrl będzie przechowywać odpowiednią bezwzględną ścieżkę. HTH wink.gif
zaajcu
Cytat(by_ikar @ 6.12.2011, 11:15:42 ) *
Coś takiego:

  1. <?php
  2.  
  3. str_replace('//', '/', dirname($_SERVER['SCRIPT_NAME']).'/');


zwróci ci "/admin/", jeżeli admin.php będzie pod takim linkiem:

Kod
http://mojastrona.com/katalog1/katalog2/admin/admin.php


to powyższy str_replace zwróci ci taką ścieżkę: "/katalog1/katalog2/admin/". Możesz do tego dodać sobie katalog z obrazami:

  1. <?php
  2.  
  3. $imageUrl = str_replace('//', '/', dirname($_SERVER['SCRIPT_NAME']).'/img/');


I ta zmienna będzie przechowywać bezwzględną ścieżkę do twojego katalogu z obrazkami. Bez względu na to do jakiego katalogu przeniesiesz admin.php to zawsze zmienna $imageUrl będzie przechowywać odpowiednią bezwzględną ścieżkę. HTH wink.gif


Rozwiązanie wydaje się być ok wink.gif

ja to zrobiłem tak
  1. function absolut_path($path)
  2. {
  3. return 'http://'.$_SERVER['HTTP_HOST'].'/'.preg_replace('/^\//','',str_replace($_SERVER['DOCUMENT_ROOT'],'',str_replace('\\','/',realpath($path))));
  4. }


i działa dobrze, tak że chyba zostanę przy tym bo już mi się nie chce wszystkiego przerabiać wink.gif
by_ikar
No akurat moje rozwiązanie jest bardziej optymalne, z prostego powodu - używam tylko jednej funkcji, ty używasz takich dwóch + wyrażenia regularne. No ale zrobisz jak chcesz, twoja sprawa w sumie wink.gif BTW, masz tutaj dodane dodatkowo domenę:

  1. function absolutPath($path)
  2. {
  3. return 'http://'.$_SERVER['HTTP_HOST'].str_replace('//', '/', dirname($_SERVER['SCRIPT_NAME']).'/');
  4. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.