Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwny problem z pobranym przez skrypt php plikiem
Forum PHP.pl > Forum > PHP
blackstone
Mam dziwny problem z plikiem zdjęciowym który chce pobrać przez plik php do downloadu. Wydaje się że plik zdjęciowy ściąga się poprawnie ale gdy chce go otworzyć nagle okazuje że nie działa bo prawdopodbnie jest w złym formacie ( o czym informuje program do ogladania zdjęć). Gdy zajrzeć do właściwości pobranej fotki, to wszystko wydaje się być wporządku. Tymczasem gdy ten sam plik otworze w folderze serwera ( mówimy na razie o zwykłym webservie na windows) tym samym programem do otwierania zdjęć, to wtedy działa bez zarzutu. Poniżej fragment kodu jakiego używam do downloadowania plików. Czy to możliwe by podczas downloadu plik jakoś był uszkadzany? Z góry dzięki za odpowiedzi!

  1.  
  2.  
  3. $filetype=filetype($file);
  4.  
  5. $filename=basename($file);
  6.  
  7. header("Content-Type: ".$filetype);
  8.  
  9. header ("Content-Length: ".filesize($file));
  10.  
  11. header ("Content-Disposition: attachment; filename=".$filename);
  12.  
  13. readfile($file);
  14.  
batman
Otwórz pobrany plik edytorem tekstowym i sprawdź zawartość pliku. Możliwe, że skrypt gdzieś się wywala i zamiast obrazu zapisuje do pliku komunikat błędu. Poza tym zajrzyj do logów, powinieneś znaleźć tam jakieś informacje na temat ewentualnych błędów.

Jeśli miałbym zgadywać, to stawiałbym, że zmienna $file zawiera niepoprawną ścieżkę do pliku.
trueblue
Nagłówek Content-Type powinien zawierać mime pliku, a nie typ (który obecnie w Twoim przypadku ma wartość "file").
Sam go więc "uszkadzasz" stosując filetype zamiast mime-content-type.
blackstone
Dziwna sprawa. Sprawdziłem edytorem tekstowym plik i jedyna informacja to "CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), default quality". Trochę przed i dalej jest cała masa różnych znaczków. Co do ścieżki to sprawdziłem plik za pomocą is_file() i zwracał prawdę wykrywając plik. Co do typefile to zmieniłem chwilowo na funkcje mime_content_type lecz wtedy wyskakiwało mi " Call to undefined function mime_content_type()" . Sprawdziłem za pomocą phpversion() swoją wersje php i mam 5.3.20 a w dokumentacji ta funkcja powinna być od dostępna od php 4.3.0. Taka sytuacja smile.gif nie kojarze o co chodzi, zwłaszcza z tym mine-em. Miał ktoś coś takiego?
batman
trueblue ma rację, filetype jest tutaj winowajcą. Spróbuj czegoś takiego
Kod
<?php
header('Content-Transfer-Encoding: Binary');
header('Content-Type: application/octet-stream');
header('Content-disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: '.filesize($file));
readfile($file);

Pisane z głowy, więc mógł wkraść się jakiś błąd.
blackstone
Dzięki.Niestety efekt ten sam. Lecz wydaje mi się że problem może być gdzieś w ustawieniach serwera gdyż kiedyś sam zrobiłem downloader na podstawie tego co w necie i działało.
trueblue
Wrzuć gdzieś pobrany plik i załącz tutaj link.
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.