Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Pobieranie zdjęcia po kliknięciu
Woijtek338
post
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




header("Content-type: image/jpeg");
? (IMG:style_emoticons/default/smile.gif)

Tak przy okazji... http://www.webmaster-toolkit.com/mime-types.shtml
Go to the top of the page
+Quote Post
Woijtek338
post
Post #3





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


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 
Go to the top of the page
+Quote Post
by_ikar
post
Post #4





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Jak używasz firebuga podejrzyj nagłówki jakie dostajesz.
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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...
Go to the top of the page
+Quote Post
Woijtek338
post
Post #6





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Rid
post
Post #7





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Woijtek338
post
Post #8





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
thek
post
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.
Go to the top of the page
+Quote Post
Woijtek338
post
Post #10





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 14:35