Uploader zdjęć php slashuje nazwy zdjęć i sypie polskie znaki

0

Chciałem was zapytać tylko, czy nie spotkaliście się z problemem dodawania ukośników gdy w nazwie zdjęcia pojawia się cudzyslów '', ja wiem że są specjalne funkcje do tego, ale czy to normalne że uploader slashuje zdjęcia i zamienia polskie znaki na '?'. Dzisiaj zauważyłem że ścieżki zapisane w tabeli są ok, ale zapisane zdjęcia są innej nazwy ; /. Czy to normalne w funkcji php do uploadowania zdjeć?

0

Slashe, o których mowa, są dodawane przed znakami specjalnymi po to, aby traktować je jako zwykłe znaki, a nie symbole. Nie bez powodu stosuje się to przy wprowadzaniu danych do baz SQL, gdzie dodatkowy apostrof czy cudzysłów może spowodować nieprawidłową interpretację zapytania, a co za tym idzie - uszkodzenie bazy danych.

Prawdopodobnie Twój problem polega na tym, że dodajesz slashe do nazwy plików przed ich zapisaniem. Powinieneś najpierw zapisać plik na serwerze, następnie dodać slashe do nazwy i wtedy dodać rekord do bazy danych.

Zamiana polskich znaków na "?" wynika zapewne z nieprawidłowo ustawionego kodowania na stronie lub źle skonfigurowanej lokalizacji na serwerze. (Polecam przeczytać trochę o localach: https://wiki.archlinux.org/index.php/Locale).

0

W bazie wszystko zapisuje się ok. Tylko zdjęcia na serwerze mają dziwne znaki : /

0

Czy mógłbyś udostępnić fragment kodu tego uploadera?

0

function create_img($weight1,$height1, $weight2, $height2, $save_normal, $save_min, $save_nominal){

			

        function cropImage($nw, $nh, $source, $stype, $dest) {
         $size = getimagesize($source);
         $w = $size[0];
          $h = $size[1];

				if((INT)$nh == 1) 
				{
				
				(INT)$dz1= (INT)$nw * (INT)$h;
				$nh = (INT)$dz1 / (INT)$w;
				}


          switch($stype) {
              case 'gif':
              $simg = imagecreatefromgif($source);
              break;
              case 'jpg':
              $simg = imagecreatefromjpeg($source);
              break;
              case 'png':
              $simg = imagecreatefrompng($source);
              break;
          }

          $dimg = imagecreatetruecolor($nw, $nh);
          $wm = $w/$nw;
          $hm = $h/$nh;
          $h_height = $nh/2;
          $w_height = $nw/2;

          if($w> $h) {
              $adjusted_height = $h / $wm;
              $half_height = $adjusted_height / 2;
              $int_height = $half_height - $h_height;

              imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
              
          } elseif(($w <$h) || ($w == $h)) {
              $adjusted_height = $h / $wm;
              $half_height = $adjusted_height / 2;
              $int_height = $half_height - $h_height;

              imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
          } else {
              imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
          }

          imagejpeg($dimg,$dest,100);
}
        
        //mimniatorka i zdjecie
		
		$i = rand(0,9);		
		$i2 = rand(0,9);
$i3 = rand(0,9);
$i4 = rand(0,9);
$i5 = rand(0,9);
$i6 = rand(0,9);
		$ran=$i.$i2.$i3.$i4.$i5.$i6;
		
            if(isset($_FILES['plik']))
            {       
                switch($_FILES['plik']['error'])
                {
                    case 0:
                        if ($_FILES['plik']['type'] == "image/jpeg" || $_FILES['plik']['type'] == "image/gif" )
                        {
                           move_uploaded_file($_FILES['plik']['tmp_name'], $save_normal.$ran.$_FILES['plik']['name']);

							$name_img= $ran.$_FILES['plik']['name'];
			cropImage($weight1, $height1, "$save_normal".$ran.$_FILES['plik']['name']."", "jpg", $save_nominal.$ran.$_FILES['plik']['name']);
			cropImage($weight2, $height2, "$save_normal".$ran.$_FILES['plik']['name']."", "jpg", $save_min.$ran.$_FILES['plik']['name']);

															                      $this->filep  = $ran.$_FILES['plik']['name'];
															                       
																			
         
                        
                        } 
                        
                        if( $_FILES['plik']['type'] == "image/png")
                        {
                        	 move_uploaded_file($_FILES['plik']['tmp_name'], $save_normal.$ran.$_FILES['plik']['name']);

							$name_img= $ran.$_FILES['plik']['name'];
			cropImage($weight1, $height1, "$save_normal".$ran.$_FILES['plik']['name']."", "png", $save_nominal.$ran.$_FILES['plik']['name']);
			cropImage($weight2, $height2, "$save_normal".$ran.$_FILES['plik']['name']."", "png", $save_min.$ran.$_FILES['plik']['name']);
  	
                        	
                        	
                       
															                      $this->filep  = $ran.$_FILES['plik']['name'];
				
								}	                        	
        
                             echo "	<script> $('.comunity').css('visibility','visible');$('.alarm-com').html('Nie dozwolone rozszerzenie pliku');$('.gifloading').css('visibility','hidden');$('.offalarm').css('visibility','visible');  return false; </script>";
                        return false;
                        break;
                    case 1:
                         echo "	<script> $('.comunity').css('visibility','visible');$('.alarm-com').html('Za duży plik .ini');$('.gifloading').css('visibility','hidden'); $('.offalarm').css('visibility','visible'); return false; </script>";
                        return false;
                        break;
                    case 2:
                         echo "	<script> $('.comunity').css('visibility','visible');$('.alarm-com').html('Za duży plik');$('.gifloading').css('visibility','hidden'); $('.offalarm').css('visibility','visible'); </script>";
                        return false;
                        break;
                    case 3:
                         echo "	<script> $('.comunity').css('visibility','visible');$('.alarm-com').html('Nie pełny plik');$('.gifloading').css('visibility','hidden'); $('.offalarm').css('visibility','visible');return false; </script>";
                        return false;
                        break;
                    case 4:
                         echo "	<script> $('.comunity').css('visibility','visible');$('.alarm-com').html('Nie wybrano miniaturki');$('.gifloading').css('visibility','hidden'); $('.offalarm').css('visibility','visible'); </script>";
                        break;                    
                    default:
                         echo "	<script> $('.comunity').css('visibility','visible');$('.alarm-com').html('Wystąpił błąd ładowania pliku');$('.gifloading').css('visibility','hidden');$('.offalarm').css('visibility','visible'); return false; </script>";
                }
            }
}

0

A czasami nie chodzi o wysyłanie pliku na serwer? ;D w $save_nominal i reszcie są ścieżki zapisu ale bez nazwy pliku : ) nazwe pliku pobiera z oryginalnego uploadowanego pliku i dopisuje losowe liczby.

Może podam przykąłd co robi mam nazwę np: Łukasz'sa'.jpg to on zapisuej na serwerze -
?ukasz'/sa'/.jpg i jest problem bo w bazie zapisuje inaczej i na serwerze inaczej i miniaturek nie widać!

1

Whoops, niedopatrzyłem :)
W takim razie spróbuj użyć funkcji stripslashes (http://php.net/manual/en/function.stripslashes.php) tam, gdzie jest zapisywany plik. Powinien on usunąć zbędne slashe.

Jest to dość dziwne zachowanie, wydaje mi się że PHP nie powinien samodzielnie escape'ować znaków specjalnych..
Swoją drogą, nie lepiej (i bezpieczniej!) byłoby generować samemu unikalne nazwy znaków? Albo chociaż wyrzucać wszystkie znaki nie-alfanumeryczne? :)

0

Teraz spróbowałem na własnym serwerze ;D tam jest wszystko : ), więc niestety to wina serwera chyba, trzeba będzie napisać się spytać : ) Ale coś czuje że będe musiał zrobić inny zabieg, mianowicie usuwać przez php ze zdjęć te dziadowskie ''.

0

magic quotes pewnie - używasz jakieś archaicznej wersji php? (wszysto starsze od 5.4 jest archaiczne)

0

a co? Magic qutoes nie jest używany w nowszych? Wczoraj właśnie się dowiedziałem że to magic qutoes i już sobie poradziłem. Rzeczywiście wersja php na tym serwerze to 5.3 : ( jestem przerażony : ( Nie sprawdziłem tego przed zakupem. Na moim lokalnym to ja mam 5.4.

0

magic quotes to przede wszystkim ktoś po narkotykach chyba wymyślił, a ci co mają to DOMYŚLNIE WŁĄCZONE ćpali to samo co twórca tego mechanizmu

A ogólnie:

This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.

1 użytkowników online, w tym zalogowanych: 0, gości: 1