Mam następującą strukturę folderów:
mydomain.com
->Folder-A
->Folder-B
Mam ciąg z bazy danych, który to „../Folder-B/image1.jpg”, który wskazuje na obraz w folderze B.
W skrypcie w folderze A używam dirname ( PLIK ), aby pobrać nazwę pliku i otrzymuję
mydomain.com/Folder-A
. Wewnątrz tego skryptu potrzebuję napisu 'mydomain.com/Folder-B/image1.jpg
. próbowałem
$path=dirname(__FILE__).'/'.'../Folder-B/image1.jpg';
To pojawia się jako mydomain.com%2FFolder-A%2F..%2FFolder-B%2Fimage1.jpg
To jest dla przycisku udostępniania na Facebooku, a to nie daje prawidłowego obrazu. Czy ktoś wie, jak poprawnie uzyskać ścieżkę?
Edycja: mam nadzieję uzyskać adres URL >>> moja_domena.com% 2FFolder-B% 2Fimage1.jpg
Odpowiedzi:
Dla PHP <5.3 użyj:
$upOne = realpath(dirname(__FILE__) . '/..');
W PHP 5.3 do 5.6 użyj:
$upOne = realpath(__DIR__ . '/..');
W PHP> = 7.0 użyj:
$upOne = dirname(__DIR__, 1);
źródło
realpath()
z twojego postu. Doskonale rozwiązałem mój ostatni problem z wyjściem, dziękuję!dirname(__DIR__)
Jeśli masz php 7.0+, możesz użyć poziomów.
dirname( __FILE__, 2 )
za pomocą drugiego parametru możesz zdefiniować liczbę poziomów, o które chcesz wrócić.http://php.net/manual/en/function.dirname.php
źródło
Spróbuj tego
Edycja: usunięto „./”, ponieważ nie jest to poprawna składnia. Bez tego działa idealnie.
źródło
Możesz użyć funkcji dirname PHP.
<?php echo dirname(__DIR__); ?>
. W ten sposób otrzymasz nazwę katalogu nadrzędnego__DIR__
, w którym jest przechowywany katalog bieżący.źródło
Możesz użyć,
realpath
aby usunąć nieprzyjemną część:// One level up echo str_replace(realpath(dirname(__FILE__) . '/..'), '', realpath(dirname(__FILE__))); // Two levels etc. echo str_replace(realpath(dirname(__FILE__) . '/../..'), '', realpath(dirname(__FILE__)));
W systemie Windows zamień również
\
w/
razie potrzeby na ten w adresie URL.źródło
dirname(__DIR__,level); dirname(__DIR__,1);
poziom oznacza, ile razy wrócisz do folderu
źródło
Jeden poziom wyżej, użyłem:
str_replace(basename(__DIR__) . '/' . basename(__FILE__), '', realpath(__FILE__)) . '/required.php';
lub dla php <5.3:
str_replace(basename(dirname(__FILE__)) . '/' . basename(__FILE__), '', realpath(__FILE__)) . '/required.php';
źródło
Do kogo, bez współdzielenia środowiska hostingowego i nadal szansa na posiadanie aktualnego PHP poniżej 7.0 Kto nie ma,
dirname( __FILE__, 2 );
to jest możliwość użycia następujących.function dirname_safe($path, $level = 0){ $dir = explode(DIRECTORY_SEPARATOR, $path); $level = $level * -1; if($level == 0) $level = count($dir); array_splice($dir, $level); return implode($dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; } print_r(dirname_safe(__DIR__, 2));
źródło
Używam tego, jeśli istnieje ścieżka bezwzględna (to jest przykład):
$img = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT']."/Folder-B/image1.jpg");
jeśli jest zdjęcie do pokazania, to wystarczy:
echo("<img src='/Folder-B/image1.jpg'>");
źródło