2013-11-14 10 views

Odpowiedz

9

PHP domyślnie może już uzyskiwać dostęp do plików spoza katalogu głównego, chyba że są one ograniczone dyrektywą open_basedir (lub trybem bezpiecznym, ale mam nadzieję, że nie znajdujesz się w tej klatce).

Zazwyczaj dobrą praktyką jest umieszczanie w konfiguracji VirtualHost ograniczenia open_basedir. Można określić wiele katalogów oddzielonych przez : w systemie Linux iw systemie Windows.

php_admin_value open_basedir /var/www/s/stage:/usr/share/php:/your/dir 

Aby uzyskać dostęp do tych plików, należy użyć bezwzględnej ścieżki lub ścieżki względem pozycji pliku PHP o nazwie. (Aby osiągnąć powyższe poziomy, musisz uzyskać ../).

Upewnij się również, że katalogi, w których chcesz pisać, są przypisane do użytkownika serwera WWW i mają uprawnienia do zapisu.

Inaczej masz drugą opcję:

wewnątrz katalogu www, stworzyć "image.php" plik, o podobnej treści do:

<?php 
    header('Content-Type: image/png'); 
    readfile("../img/" . $_GET['img']); 
?> 

i skontaktować się obrazy z

<img src="image.php?img=myimage.png" /> 

Należy pamiętać, że plik PHP nie powinien być tak prosty :) Ponieważ może chcesz adresować wiele formatów obrazu (i prowadź identyfikowanie odpowiedniego nagłówka), sprawdzanie ścieżki/włączeń szkodliwego pliku (nie chcesz używać $ _GET bez sprawdzania poprawności/odkażania danych wejściowych), dodatkowego buforowania itp. itd. itp.

Ale to powinno ci dać pomysł, w jaki sposób możesz kierować swój problem.

+0

[wygląda znajomo.] (https://stackoverflow.com/ pytania/13357994/access-a-file-which-is-located-before-the-server-root-directory # answer-13358201) – showdev

+0

Jest to możliwe, ale nie jest to ta sama odpowiedź. – Legionar

3

jako proste, to wyjście będzie obraz z odpowiednimi nagłówkami,
pamiętać, że trzeba ustawić nagłówek() przed spłukiwania coś z bufora wyjściowego
=> bez echa lub wydrukować przed

 
$file = '../../somedirectory/image.jpg‘; 
header('Content-Type:image/jpeg‘); 
header('Content-Length: '.filesize($file)); 
echo file_get_contents($file); 
0

użyć ob_clean() funkcji php przed ReadFile()

będzie on przydatny do miejsca jak uniknąć problemów

Powiązane problemy