Rename uploadowanych plików na serwerze – nie działa

Większości plikom, które wrzucamy na serwer od użytkownika, zmieniamy nazwę. Dlaczego? Żeby nazwy się nie powtarzały (przez co nie nadpisywały) oraz miały jakiś styl nazwy lub pseudolosowy.

Problem z jakim ostatnio się spotkałem był na szczęście prosty do rozwiązania. Ale od początku…Jest formularz, do którego podajemy obrazek. Przyjmowałem dane od niego, ba! nawet obrazki skalowałem. Wszystko ok, dopóki nie miałem ich wyświetlić (nazwy plików z rozszerzeniem zapisywane były w bazie). Po prostu nie wyświetlały się, choć były na dysku. Szybki przegląd kodu, porównanie danych i znalazł się winowajca.

Było nim rozszerzenie, a dokładniej jego wielkość. O ile dla Windowsa jpg czy JPG to to samo, to dla linuxa już nie. Obrazek, który miał rozszerzenie JPG nie był odczytywany prawidłowo jako parametr funkcji rename.

Co więc możemy zrobić? Pod wyłuskaniu rozszrzenia wykorzystujemy funkcję strtolower aby „zmniejszyć” znaki.

  1. $image_extension = explode(".", $image);
  2. $image_extension = array_pop($image_extension);
  3. $image_extension = strtolower($image_extension);
  4.  
  5. $converted_image_name = $image_name . "." . $image_extension;
  6. $converted_image_name = strtolower($converted_image_name);
  7. rename($image_to_rename, $path_image . '/' . $converted_image_name);
  8. rename($thumbnail_to_rename, $path_image . '/s/' . $converted_image_name);

W ten sposób zabezpieczamy się przed tego typu niespodziewankami :)