Mam aplikacji internetowej w PHP przy użyciu serwera apache, Linux. Ze względów bezpieczeństwa przechowuję dokumenty i obrazy poza katalogiem głównym. Jak mogę wyświetlać te obrazy, gdy użytkownik się zaloguje.Jak mogę wyświetlić obrazy poza katalogiem głównym w mojej aplikacji php?
Odpowiedz
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.
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);
użyć ob_clean() funkcji php przed ReadFile()
będzie on przydatny do miejsca jak uniknąć problemów
- 1. Przechowywanie plików skryptów poza katalogiem głównym domeny
- 2. Wicket utworzyć obraz z systemu plików poza katalogiem aplikacji internetowej
- 3. Nie można uzyskać dostępu do plików PHP poza katalogiem głównym witryny nginx.
- 4. Przechowuj pliki eclipse .project poza katalogiem projektu
- 5. Jak mogę umieścić stronę w mojej aplikacji?
- 6. Jak renderować MKMapView poza głównym wątkiem?
- 7. Jak mogę zmierzyć ruch danych mojej aplikacji?
- 8. Jak mogę osadzić NetLimiter w mojej aplikacji
- 9. Jak wyświetlić git sha w mojej aplikacji jonowej
- 10. Grails - Jak wyświetlić wersję i datę/czas w mojej aplikacji?
- 11. Jak wyświetlić animowaną tapetę użytkownika jako tło w mojej aplikacji?
- 12. Jak mogę używać standardowych czerwonych plakietek iOS w mojej aplikacji?
- 13. Linux C++: Jak wyświetlić dane wyjściowe aplikacji Tekst poza stdout?
- 14. Jak mogę zasymulować zakończenie mojej aplikacji Metro?
- 15. Jak mogę sprawdzić szybkość ramki mojej aplikacji?
- 16. PHP: Jak wyświetlić zawartość pliku tekstowego na mojej stronie?
- 17. Jak rozwiązać problem związany z katalogiem głównym aplikacji ASP.NET MVC 4?
- 18. Jak wyświetlić/wyświetlić wszystkie trasy w @Routes w mojej aplikacji Angular2
- 19. Ruch myszy nie jest wyzwalany poza głównym oknem głównym WPF
- 20. Dostęp do plików klas PHP poza DOCUMENT_ROOT
- 21. Jak wyświetlić bieżącą wersję projektu mojej aplikacji użytkownikowi?
- 22. wykonawcze ACL dla mojej aplikacji PHP
- 23. Dlaczego umieścić dane logowania MySQL poza katalogiem www?
- 24. Jak wyświetlić przesuwane obrazy na kartę SD w emulatorze
- 25. Uruchamiasz aplikację Ruby w dystrybucji pakietowej poza swoim własnym katalogiem?
- 26. Pliki serwowania z folderu poza aplikacją WWW w Jetty
- 27. Jak mogę użyć edytor przecinków stackedit w mojej aplikacji
- 28. Jak mogę przetestować ActiveRecord :: RecordNotFound w mojej aplikacji rails?
- 29. iOS 5: Jak mogę wyłączyć klawiaturę Emoji w mojej aplikacji?
- 30. Jak mogę zintegrować reklamy AirPush w mojej aplikacji na Androida?
[wygląda znajomo.] (https://stackoverflow.com/ pytania/13357994/access-a-file-which-is-located-before-the-server-root-directory # answer-13358201) – showdev
Jest to możliwe, ale nie jest to ta sama odpowiedź. – Legionar