Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][PHP]upload plików i podwójne rozszerzenie
Forum PHP.pl > Forum > Przedszkole
pablo_83
witam mam problem przy dodawaniu zdjęć, do nazwy jest dodawane drugi raz rozszerzenie, nie wiem gdzie zrobiłem błąd proszę o pomoc.
Upload odbywa się w CodeIgniterze przy pomocy jego biblioteki upload i stworzeniu miniatur za pomocą biblioteki GD2
  1. function news_edit() {
  2. if(Site_user::_check_perm('news_edit')) {
  3. $this->load->model('News');
  4. $id = $this->uri->segment(3);
  5. IF(isset($id) and is_numeric($id)) {
  6. $ar = $this->News->get_news_by_id($id)->result_array();
  7. $data['foto_url'] = $ar[0]['news_foto_url'];
  8. //------------------UPLOAD---------------------------------------
  9. $this->load->library('upload');
  10. $config['upload_path'] = 'system/files/';
  11. $config['allowed_types'] = 'gif|jpg|png';
  12. $config['max_size'] = '5000';
  13. $config['max_width'] = '10024';
  14. $config['max_height'] = '10768';
  15. // przypisanie konfiguracji
  16. $this->upload->initialize($config);
  17.  
  18. //------------------KONIEC---------------------------------------
  19.  
  20. $data["streszczenie"] = array('name' => 'streszczenie', 'rows'=> 4, 'cols'=> 50);
  21. $data['tresc'] = array('name' => 'tresc', 'rows' => 8, 'cols' => 50);
  22.  
  23. $rules['streszczenie'] = "required|max_length[250]|xss_clean";
  24. $rules['tresc'] = "required|xss_clean";
  25.  
  26. $this->validation->set_rules($rules);
  27.  
  28. if ($this->validation->run() == FALSE) {
  29. IF(strlen($this->input->post('streszczenie')) > 0) {
  30. $data['streszczenie']['value'] = $this->input->post('streszczenie');
  31. $data['tresc']['value'] = $this->input->post('tresc');
  32. $data['foto'] = $ar[0]['news_miniatura_url'];
  33.  
  34. }
  35. else {
  36. $data['streszczenie']['value'] = $ar[0]['news_streszczenie'];
  37. $data['tresc']['value'] = $ar[0]['news_text'];
  38. $data['foto'] = $ar[0]['news_miniatura_url'];
  39.  
  40. }
  41. $this->response['content'] = $this->load->view('elements/news_edit', $data, True);
  42. }else if (!$this->upload->do_upload()) {
  43.  
  44. $this->News->update_news($id, array('news_streszczenie' => $this->input->post('streszczenie'), 'news_text' => $this->input->post('tresc'), 'news_date' => time(), 'user_id'=>$this->session->userdata('id')));
  45. $this->response['content'] = 'Zmiany zapisane<META HTTP-EQUIV="Refresh" CONTENT="1; URL='.site_url('site_admin').'">';
  46. }else if($this->upload->do_upload()) {
  47. $foto = 'system/files/'.$this->upload->data();
  48. //-------------- Tworzenie miniatury i zmiana wielkości obrazu na 'przyjazną'
  49. if(file_exists($foto)) {
  50.  
  51. Site_admin::resize($foto); // ------ zmiana samej wielkości obrazu
  52.  
  53. $this->load->library('image_lib');
  54. $config['image_library'] = 'GD2';
  55. $config['source_image'] = $foto;
  56. $config['new_image'] = 'system/miniatury/'.$this->upload->data();
  57. $config['create_thumb'] = FALSE;
  58. $config['maintain_ratio'] = TRUE;
  59. $config['width'] = 90;
  60. $config['height'] = 90;
  61. $this->image_lib->initialize($config);
  62. $this->image_lib->resize();
  63. }
  64.  
  65. $this->News->update_news($id, array('news_streszczenie' => $this->input->post('streszczenie'), 'news_text' => $this->input->post('tresc'),'news_foto_url' => $foto,'news_miniatura_url' => $config['new_image'], 'news_date' => time(), 'user_id'=>$this->session->userdata('id')));
  66. $this->response['content'] = 'Zmiany i plik zapisane<META HTTP-EQUIV="Refresh" CONTENT="5; URL='.site_url('site_admin').'">';
  67.  
  68. }
  69. }
  70. else {
  71. $this->response['content'] = 'Niepoprawny URL';
  72. }
  73.  
  74. }else {
  75. $this->response['content'] = 'Nie masz uprawnień do tego widoku';
  76. }
  77. $this->load->view('index', $this->response);
  78. }

funkcja do zmiany wielkości obrazu
  1. function resize($foto) {
  2. include 'config.php';
  3. $this->load->library('image_lib');
  4. // konfiguracja
  5. $config['image_library'] = 'GD2';
  6. //pobranie pliku do zmiany rozmiaru z danej lokalizacji
  7. $config['source_image'] = $foto;
  8. //zapis pliku po zmianie rozmiaru, nadpisanie pierwotnego
  9. $config['new_image'] = $foto;
  10. //jeśli true dodanie do nazwy "thumb"
  11. $config['create_thumb'] = FALSE;
  12. $config['maintain_ratio'] = TRUE;
  13. $config['width'] = $width;
  14. $config['height'] = $height;
  15. // przypisanie konfiguracji
  16. $this->image_lib->initialize($config);
  17. // wykonanie
  18. $this->image_lib->resize();
  19.  
  20. }


Nie wiem gdzie mam błąd, po zapisie ścieżka do pliku wygląda np. tak: system/files/DSC034853.JPG.JPG
everth
Prawdopodobnie kod nie wykrywa końcówek. Tutaj jest obejście z użyciem basename i pathinfo. U ciebie (nie wiem jak to jest w CodeIgniterze) mogłoby wyglądać tak:
  1. $foto_prefix = pathinfo($photo);
  2. $config['new_image'] = $foto_prefix['filename'];
pablo_83
działo się coś innego, podwójnie wykonywał się upload przez co drugi plik dostawał dodatkowe rozszerzenie
nie wiem dlaczego ale działo się przez tą linijkę:
  1. else if($this->upload->do_upload()) {

to jest nr 46 w moim pierwszym poście.

Tak jakby przez tą instrukcję upload zostawał drugi raz wykonywany i tworzył plik z dwoma rozszerzeniami, a miniatury były tworzone na tym pliku stąd miały ten sam błąd.
dzięki za zainteresowanie
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.