Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pobieranie za pomocą file i zmiana rozszerzenia pliku w locie
Forum PHP.pl > Forum > Przedszkole
kuna11
Pobieram plik za pomocą file:

  1. $file = file::loadByShortUrl($shortUrl);
  2.  
  3. static function loadByShortUrl($shortUrl)
  4. {
  5. $db = Database::getDatabase(true);
  6. $row = $db->getRow('SELECT * FROM file WHERE shortUrl = ' . $db->quote($shortUrl));
  7. if (!is_array($row))
  8. {
  9. return false;
  10. }
  11.  
  12. $fileObj = new file();
  13. foreach ($row AS $k => $v)
  14. {
  15. $fileObj->$k = $v;
  16. }
  17.  
  18. return $fileObj;
  19. }
  20.  
  21. public function getFilenameExcExtension()
  22. {
  23. $filename = $this->originalFilename;
  24.  
  25. return basename($filename, '.' . $this->extension);
  26. }


A nagłówki wyglądają tak:

  1. header("Expires: 0");
  2. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  3. header("Content-type: " . $this->fileType);
  4. header("Pragma: public");
  5. header("Content-Disposition: attachment; filename=\"" . str_replace("\"", "", $this->originalFilename) . "\"");
  6. header("Content-Description: File Transfer");


Czy ktoś może mi powiedzieć, jak to przerobić aby rozszerzenie pobieranego pliku było takie jak zawartość kolumny extension w bazie ?
freemp3
Przecież masz zrobione łączenie nazwy z rozszerzeniem w metodzie getFilenameExcExtension.
Ponad to po co w tej metodzie tworzysz oddzielną zmienną? Lepiej będzie jak podasz w parametrze bezpośrednio nazwę pliku.
kuna11
W takim razie to nie działa, bo jak pobieram plik to on nie pobiera rozszerzenia z bazy, tylko takie jakie jest przy pliku, a ja mam pliki bez rozszerzeń (na serwerze) i dopiero w bazie jest zapisane odpowiednie rozszerzenie pliku, ale jednak jak mówie to nie działa i ciągle pobiera mi pliki bez żadnego rozszerzenie a ja chciałbym aby sprawdzić rozszerzenie w kolumnie extension i potem dodać je do:

  1. header("Content-Disposition: attachment; filename=\"" . str_replace("\"", "", $this->originalFilename) . ".txt\"");


Tylko nie wiem do końca jak to wykonać :/
freemp3
Wszystko działa tylko Ty w podanej przez siebie linijce pobierasz wyłącznie nazwę pliku, bez rozszerzenia. Chodziło mi o to, żebyś zastąpił to metodą getFilenameExcExtension i powinno być ok.
kuna11
Zrobiłem tak jak mówiłeś:

  1. header("Content-Disposition: attachment; filename=\"" . str_replace("\"", "", $this->getFilenameExcExtension) . "\"");


ale niestety nie jest ok, bo pliki mam zapisane jak już mówiłem na dysku bez rozszerzeń i ze zmienianą nazwą (nazwą jest suma kontrlona), czyli plik załóżmy

informacje.txt jest zapisany jako 34982304923494398439823 bez rozszerzenia i właśnie tak mi się pobiera tym sposobem który mi podałeś, a moim sposobem

którego używam aktualnie pobiera się już odpowiednia nazwa pliku (informacje) ale rozszerzenie nie jest dodawane...


freemp3
Spróbuj tak:
  1. header("Content-Disposition: attachment; filename=\"" . str_replace("\"", "", $this->originalFilename . $this->extension) . "\"");
kuna11
Wielkie dzięki za Twoją pomoc exclamation.gif
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.