Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pobieranie zdjęcia po kliknięciu
Forum PHP.pl > Forum > Przedszkole
Woijtek338
Witam! Mam nastepujący problem:
Po kliknięciu na obrazek wyświeltam JS przycisk. Po naciśnięciu chciałem, aby pobrał się on na dysk. W tym celu użyłem kodu:
  1. if(isset($_POST['pobieranie']))
  2. {
  3. $path = $_SERVER['../'];
  4.  
  5. $fullPath = $_POST['hid'];
  6. if ($fd = fopen ($fullPath, "r")) {
  7. $fsize = filesize($fullPath);
  8. $path_parts = pathinfo($fullPath);
  9. $ext = strtolower($path_parts["extension"]);
  10. switch ($ext) {
  11. case "jpg":
  12. header("Content-type: image/jpg");
  13. header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
  14. break;
  15. default;
  16. header("Pragma: public");
  17. header("Expires: 0");
  18. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  19. header("Content-type: application/octet-stream");
  20. header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
  21. }
  22. header("Content-length: $fsize");
  23. header("Cache-control: private");
  24. while(!feof($fd)) {
  25. $buffer = fread($fd, 2048);
  26. echo $buffer;
  27. }
  28. }
  29. fclose ($fd);
  30. }

Gdzie $_POST[hid] to ukryte pole, do którego wpisuje się javascriptem pełna ścieżka z serwera np: http://x.pl/n05922.jpg .

Problem polega na tym że po kliknięciu przycisku zamiast ściągnąć na dysk, tak jakby echuje mi zawartość zdjęcia na stronie a dokładnie taki ciąg znaków: ...
'ŰřťZˇƒ^Ő"†;ůŐ#KÉUC°pĽT>.ń(ÇüOőS•›É=>ľOĹ˙ň:kßö¸˙эU:Ăò2ť7 ńfźěDŢ"Րc‚/$äúu¨żá,ń&OüTŽ˙ŸŮ?ƲS$ÓOŤA]š˙đ–ř“ţ† W˙d˙CâßgţFW˙$˙ÇçҔi ěݡń_ˆŒ„ˇˆ5RĄI9ź“ƒůÔGĹž$$‘â T ˙ĎäŸăY@•FżZ,;ł[ţßgţF[˙d˙OřK|K˙C­˙˛d“֍ŁÔš,;łcţßt˙„ƒUĎý~Iţ5"xłÄ{÷jťTÓ$˙ÄŔĎCNčÁ Œhť5á-ń!9> Նy˙É?ƁâĎ“˙#­˙˛ecÉý*)%ÚО0>˝óK­’ •ŮŽŢ- ....

Dlaczego ?
Proszę o pomoc
thek
header("Content-type: image/jpeg");
? smile.gif

Tak przy okazji... http://www.webmaster-toolkit.com/mime-types.shtml
Woijtek338
no niestety nie to...
jeśli to coś powie, to w 1 linice wyświetla :
  1. ˙Ř˙ŕJFIF˙ţ;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 ˙ŰC    $.' ",#(7),01444'9=82<.342˙ŰC 
by_ikar
Jak używasz firebuga podejrzyj nagłówki jakie dostajesz.
thek
Jak dla mnie to ogólnie przekombinowałes...
  1. <?php
  2. if( !is_file( $fullPath ) ) {
  3. die("<b>404 File not found!</b>");
  4. }
  5. $path_parts = pathinfo($fullPath);
  6. $ext = strtolower($path_parts["extension"]);
  7. header("Cache-Control: private");
  8. header("Content-Description: File Transfer");
  9. header('Content-disposition: attachment; filename='.basename($fullPath)); //tu można użyć także tablicy $path_parts zamiast basename()
  10. switch( $ext ) {
  11. case 'jpg':
  12. case 'jpeg':
  13. case 'jpe':
  14. header("Content-Type: image/jpeg");
  15. break;
  16. case 'png':
  17. header("Content-Type: image/png");
  18. break;
  19. case 'gif':
  20. header("Content-Type: image/gif");
  21. break;
  22. default:
  23. header("Content-type: application/octet-stream");
  24. }
  25. header("Content-Transfer-Encoding: binary");
  26. header('Content-Length: '.filesize($fullPath));
  27. readfile($fullPath);
  28. ?>
Prościej, czytelniej, bez kombinowania, działa. Rozbudowanie tego to chyba zerowy problem?

Dobudowywanie do tego nagłówków do innych plików też nie stanowi problemu, ale moim zdaniem źle robisz idąc po rozszerzeniach... A co jeśli ktoś zapisze plik exe jako png? MIME type, a nie rozszerzenia.... Ja oba jednocześnie sprawdzam najczęsciej, bo samo mime nie zawsze mi dobrze powie na co trafiłem. Już nawet nie wspominam, że taki excel ma kilka MIME i kilkanaście rozszerzeń. Sam sobie zobacz pod link jaki Ci dałem w poście wyżej...
Woijtek338
przy zastosowaniu Twojego kodu wyskakuje mi:
404 File not found!

myślałem że to problem ze ścieżką, ale chyba jest ok, jeśli musi być inna to poprawcie mnie, moja wygląda mniej wiecej tak:
http://aaa.eu/slajdy/2e7a41effc601e88cf8723bd41f540db.jpg
Rid
Dał Pan tego linka,i także miałem The request /slajdy/2e7a41effc601e88cf8723bd41f540db.jpg was not found on this server.
Ale teraz wbija mnie na jakąś stronkę francuską,może mieli jakiś tymczasowy problem z serwerem.
Woijtek338
to "aaa" było tylko przykładem , chciałem się upewnić, czy mozna podać link w taki sposób, czy nie trzeba dawać przypadkiem jakoś do serwera przykład:
../slajdy/aaa.jpg

Panowie ! Co może być powodem że zamiast ściągać fotke, dostaje ją jako treść w postaci echa na stronie ?
thek
Zawsze tego powodem jest posłanie fotki jako ciągu znaków, bez określenia nagłówka. Sprawdź jako co posyłasz ten obrazek. Masz przeglądarkę to sprawdź wspomniane nagłówki. Jeśli faktycznie przeglądarka otrzymuje nagłówek właściwy to choćby się uparła, pobierze to jako obrazek, niezależnie co to będzie. To co jeszcze mi przychodzi do głowy to zwalona ścieżka (co sugeruje mój skrypt) lub z rozpędu posyłasz nie tylko obrazek, ale także coś jeszcze i to "coś" rozwala przesył bo miesza w nagłówkach.
Woijtek338
Ogólnie - używałem swojego skryptu na innej stronie i działał normalnie, bez problemu ściągał zdjęcia. Teraz - nie ma szans. ścieżka w postaci linka http://.... jest raczej dobra

no niestety - w kwestii nagłówka chyba coś nie tak - w źródle strony nie ma nic nowego po naciśnięciu przycisku
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.