Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie zdjęć z poza folderu htdocs
Forum PHP.pl > Forum > PHP
rafaln
Klient wysłał aplikację do zainstalowania - struktura plików wygląda bardzo dziwnie - o dziwo po tygodniu męki udało się zainstalować.

Struktura plików wygląda tak:


htdocs, to oczywiście główny folder, gdzie znajduje się index.php i serwer wskazuje oczywiście na ten folder, problem tkwi w czym innym.

Użytkownik wrzuca zdjęcie - ono trafia do folderu _files, _files_previews - przy czym w kodzie, usiłuje pobrać zdjęcie z /htdocs/files/ gdyż jest <img src="/files/ [...] - jakieś przekierowanie czy coś, nie mam pojęcia. Wiadome że nie wyświetli mi zdjęcia w postaci url, w jaki kolwiek sposób z poza folderu htdocs. W czym tkwi problem? jest w stanie ktoś wytłumaczyć działanie tego?

Może trzeba skonfigurować coś na serwerze? u jakiegoś innego Klienta, człowiek zainstalował tą aplikację, z tym że nie ma kontaktu z autorem.
arecki
Jak znam życie, to pewnie w folderze htdocs jest jakiś pliczek php, który poprzez podany parametr określający nazwę pliku do wyświetlenia, pobiera z katalogu _files jego zawartość i wyrzuca do przeglądarki. Ot cały problem.
Pilsener
Dokładnie, adres fotki wygląda np. tak:
src="http://www.strona.pl/folder/2345.jpg"

A w rzeczywistości jest to:
src="http://www.strona.pl/index.php?akcja=fotka&id=2345"

Zwykłe przepisywanie adresów w .htaccess. Standardowo fotki wrzuca się do bezpiecznego folderu bez dostępu przez http (nierzadko nawet poza htdosc, www, public etc.). Potem skrypt w pliku index.php pobiera fotkę na podstawie jej id i wysyła do przeglądarki, wygląda to mniej więcej tak:
  1. $img = file_get_contents($path);
  2. header('Content-Type: image/jpeg');
  3. echo $img;
piotr94
readfile
Przykład #1 - wystarczy odpowiednio przerobić sekcję header i będzie działało tak jak chcesz biggrin.gif
poza tym pisałem o tym kiedyś ale w innym kontekście:
http://forum.php.pl/index.php?showtopic=135208&st=0
rafaln
Rozumiem, tylko pytanie co mam dalej zrobić. Bo problem jednak cały czas występuje, nie wyświetla mi zdjęć. W pliku .htaccess nic nie widzę, a wygląda tak:

  1.  
  2. #AuthType Basic
  3. #AuthName "GeCon Software"
  4. #AuthUserFile /Users/remigiusz/Sites/sdt-soft/passwd
  5.  
  6. #<Limit GET POST>
  7. # require valid-user
  8. #</Limit>
  9.  
  10. #php_value upload_max_filesize 20M
  11. #php_value post_max_size 10M
  12. #php_value max_execution_time 60
  13. #php_value max_input_time 60
  14.  
  15. # For GD Library
  16. # php_value memory_limit 1024M
  17.  
  18. #php_value arg_separator.output "&"
  19. #php_value arg_separator.input ";&"
  20.  
  21. ## Can be commented out if causes errors, see notes above.
  22. Options +FollowSymLinks
  23.  
  24. #
  25. # mod_rewrite in use
  26.  
  27. RewriteEngine On
  28. #ExpiresActive On
  29.  
  30. ########## Begin - Rewrite rules to block out some common exploits
  31. ## If you experience problems on your site block out the operations listed below
  32. ## This attempts to block the most common type of exploit `attempts` to Joomla!
  33. #
  34. # Block out any script trying to base64_encode crap to send via URL
  35. RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
  36. # Block out any script that includes a <script> tag in URL
  37. RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
  38. # Block out any script trying to set a PHP GLOBALS variable via URL
  39. RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
  40. # Block out any script trying to modify a _REQUEST variable via URL
  41. RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
  42. # Send all blocked request to homepage with 403 Forbidden error!
  43. RewriteRule ^(.*)$ index.php [F,L]
  44. #
  45. ########## End - Rewrite rules to block out some common exploits
  46.  
  47. ########## Begin - QuickPrint core SEF Section
  48. #
  49. RewriteCond %{REQUEST_FILENAME} !-f
  50. RewriteCond %{REQUEST_FILENAME} !-d
  51. RewriteCond %{REQUEST_URI} !^/newsletter.php
  52. RewriteCond %{REQUEST_URI} (/newsletter/(.)*)$ [NC]
  53. RewriteRule (.*) newsletter.php [L]
  54.  
  55. RewriteCond %{REQUEST_FILENAME} !-f
  56. RewriteCond %{REQUEST_FILENAME} !-d
  57. RewriteCond %{REQUEST_URI} !^/api.php
  58. RewriteCond %{REQUEST_URI} (/api/(.)*)$ [NC]
  59. RewriteRule (.*) api.php [L]
  60.  
  61. RewriteCond %{REQUEST_FILENAME} !-f
  62. RewriteCond %{REQUEST_FILENAME} !-d
  63. RewriteCond %{REQUEST_URI} !^/file.php
  64. RewriteCond %{REQUEST_URI} (/file/(.)*)$ [NC]
  65. RewriteRule (.*) file.php [L]
  66.  
  67. RewriteCond %{REQUEST_FILENAME} !-f
  68. RewriteCond %{REQUEST_FILENAME} !-d
  69. RewriteCond %{REQUEST_URI} !^/verify.php
  70. RewriteCond %{REQUEST_URI} (/verify/(.)*)$ [NC]
  71. RewriteRule (.*) verify.php [L]
  72.  
  73. RewriteCond %{REQUEST_FILENAME} !-f
  74. RewriteCond %{REQUEST_FILENAME} !-d
  75. RewriteCond %{REQUEST_URI} !^/paygw.php
  76. RewriteCond %{REQUEST_URI} (/paygw/(.)*)$ [NC]
  77. RewriteRule (.*) paygw.php [L]
  78.  
  79. RewriteCond %{REQUEST_FILENAME} !-f
  80. RewriteCond %{REQUEST_FILENAME} !-d
  81. RewriteCond %{REQUEST_URI} !^/(index|file|newsletter|api|verify).php
  82. RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
  83. RewriteRule (.*) index.php
  84. RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
  85. #
  86. ########## End - QuickPrint core SEF Section



Zastanawiam się, bo to jest o jeden krok do rozwiązania problemu :/

Takie pytanie, jak to rozgryźć:


Cytat(Pilsener @ 29.07.2010, 16:02:11 ) *
Dokładnie, adres fotki wygląda np. tak:
src="http://www.strona.pl/folder/2345.jpg"

A w rzeczywistości jest to:
src="http://www.strona.pl/index.php?akcja=fotka&id=2345"

Zwykłe przepisywanie adresów w .htaccess. Standardowo fotki wrzuca się do bezpiecznego folderu bez dostępu przez http (nierzadko nawet poza htdosc, www, public etc.). Potem skrypt w pliku index.php pobiera fotkę na podstawie jej id i wysyła do przeglądarki, wygląda to mniej więcej tak:
  1. $img = file_get_contents($path);
  2. header('Content-Type: image/jpeg');
  3. echo $img;


Bo w zasadzie częściowo rozumiem, ale skąd pobiera sobie obrazek? skąd wie gdzie on jest?


Ps. Znalazłem coś takiego:


  1. // sprawdz czy jest plik w zdefiniowanym temacie
  2. while (list(, $link) = each($path)) {
  3. if (file_exists(_DOCUMENT_ROOT . "/htdocs" . $link . $file)) {
  4. //define("_INCLUDE", _DOCUMENT_ROOT.$link.$file);
  5. $fc = file_get_contents(_DOCUMENT_ROOT . "/htdocs" . $link . $file);
  6. return $fc;
  7. }
  8. }



albo jeszcze coś takiego znalazłem:

  1. /**
  2. * Utworz katalogi dla pliku
  3. *
  4. * @param string $file_handle identyfikator systemowy pliku
  5. * @param bool $file_org plik oryginalny
  6. * @param bool $file_order plik z zamowienia
  7. * @return array
  8. */
  9. public function createFileRepository($file_handle, $file_org = true, $file_order = false, $temp_file = false)
  10. {
  11. global $sys_config;
  12.  
  13. $matrix = $sys_config->db_config['SysRepositoryMatrix'][rand(1, count($sys_config->db_config['SysRepositoryMatrix']))];
  14. $repository = $sys_config->db_config['SysFilesRepository'][rand(1, count($sys_config->db_config['SysFilesRepository']))];
  15.  
  16. if ($file_org) $dst_prv_dir = _DOCUMENT_ROOT . "_files_previews/" . $matrix;
  17. else if ($file_order) $dst_prv_dir = _DOCUMENT_ROOT . "_files_orders_previews/" . $matrix;
  18. else if ($temp_file) $dst_prv_dir = _DOCUMENT_ROOT . "_tmp/" . $matrix;


Czy ktoś wskaże mi jakiś kierunek zaczepienie? abym mógł odnaleźć bądź naprawić? nie wiem już sam czy brakuje jakiejś funkcji, czy czegoś innego.
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.