Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Walidacja uploadu obrazka
Forum PHP.pl > Forum > PHP
japek
Witam, czy da sie przed dodaniem obrazka na serwer sprawdzić jego szerokość i format aby przepuszczał tylko jpg bmp i gif'y? kombinowałem troche z getimagewidth ale coś nie idzie no i nie wiem jak sprawdzić rozszerzenie pliku sad.gif
Po dodaniu na serwer to już coś tam działa ale chciałbym przez upload'em aby zapobiec ładowania byle czego. Pozdrawiam
hwao
co do rozszerzenia
  1. <?php
  2. $sFile = 'costam.costa.jpg';
  3. $sEx = array_pop( explode( '.', $sFile ) );
  4. echo $sEx;
  5. ?>


Co do wielkosci to
  1. <?php
  2. $aInfo = getimagesize( $_FILES['nameInputa']['tmp_name'] );
  3. echo '<pre>'.print_r( $aInfo, true ).'</pre>';
  4. ?>
NuLL
Czlowieku - co ty za bzdety wklejasz questionmark.gif Przeciez to co wkleiles skaluje obrazek blink.gif

I zastosuj bbCode w swoim poscie.
Bizard
czlowieku x2 -wiesz , dopisalem tam ze ma to po swojemu przerobic , a wystarczylo by tam zmienic 4 linijki a byl by dobry skrypt o który mu chodzilo...haha.gif
NuLL
Cytat(Bizard @ 2006-03-24 20:14:49)
czlowieku x2 -wiesz , dopisalem tam ze ma to po swojemu przerobic , a wystarczylo by tam zmienic 4 linijki a byl by dobry skrypt o który mu chodzilo...haha.gif

Mam do Ciebie mala prosbe - nie pisz nic wiecej jak nie wiesz co piszesz.
japek
  1. <?php
  2. $obrazek=$_GET["upload"];
  3. $szerokosc=imagesx($obrazek);
  4. if ($szerokosc>400) {
  5. $obrazek=FALSE;
  6. ?>


Taką walidacje zrobiłem no i wywala błąd "supplied argument is not a valid Image resource" co jest źle? chce zablokować możliwość wstawienia większego obrazka niz 400 pix.

Upload jest z formularza
  1. <input type="file" name="upload">
Vengeance
$obrazek=$_GET["upload"];

przy plikach stosuje się $_FILES a nie $_GET
poczytaj o tym na php.net/upload
japek
Ale mi chodzi o ten error "supplied argument is not a valid Image resource" a co do GET a FILES to wiem tylko z get chciałem walidacje przed wrzucaniem zdjęcia do bazy, zresztą ten sam error jest jak sprawdzam po dodaniu do bazy :/ juz tyle kombinowałem i dalej nic - oczywiście dodawać zdjęcia i wyświetlać to luz ale chce aby nie dodawał większych niż x pix.
Balon
blad Ci wywala bo sprawdza wymiary czegos co nie istnieje...
japek
dlatego pisze o tym ale juz sobie poradziłem bo tu widze o porade ciężko. Chciałem walidacje przez dodaniem na serwer, jednak chyba sie nie da więc zrobiłem po dodaniu.

EOT
Prph
  1. <?php
  2.  
  3.  
  4. if(isset($_POST['submit']))
  5. {
  6. $boolError = false;
  7. $arrFile = $_FILES['photo_filename'];
  8.  
  9. if(empty($arrFile['name']))
  10. {
  11. $strErrorMsg .= ERROR_GALLERY_PHOTO_FILE;
  12. $boolError = true;
  13. }
  14.  
  15. if($arrFile['size'] > 102400)
  16. {
  17. $strErrorMsg .= ERROR_GALLERY_PHOTO_SIZE;
  18. $boolError = true;
  19. }
  20.  
  21. if(!$boolError)
  22. {
  23. $strSummary = addslashes($_POST['photo_name']);
  24. $intAlbumId = $_POST['album_id'];
  25.  
  26. if($arrFile['error'] > 0)
  27. {
  28. switch($arrFile['error'])
  29. {
  30. case 1:
  31. $strErrorMsg .= ERROR_GALLERY_PHOTO_SIZE;
  32. break;
  33.  
  34. case 2:
  35. $strErrorMsg .= ERROR_GALLERY_PHOTO_SIZE;
  36. break;
  37.  
  38. case 3:
  39. $strErrorMsg .= ERROR_GALLERY_PHOTO_BROKEN;
  40. break;
  41.  
  42. case 4:
  43. $strErrorMsg .= ERROR_GALLERY_PHOTO_EMPTY;
  44. break;
  45. }
  46. app_redirect(PATH_SERVER.'?load_module=gallery&action=photo_add&album_id='.$_POST['album_id'].'&msg='.$strErrorMsg);
  47. }
  48.  
  49. $arrFile['name'] = str_replace('ą', 'a', $arrFile['name']);
  50. $arrFile['name'] = str_replace('ę', 'e', $arrFile['name']);
  51. $arrFile['name'] = str_replace('ó', 'o', $arrFile['name']);
  52. $arrFile['name'] = str_replace('ł', 'l', $arrFile['name']);
  53. $arrFile['name'] = str_replace('ż', 'z', $arrFile['name']);
  54. $arrFile['name'] = str_replace('ź', 'z', $arrFile['name']);
  55. $arrFile['name'] = str_replace('ń', 'n', $arrFile['name']);
  56. $arrFile['name'] = str_replace('ć', 'c', $arrFile['name']);
  57. $arrFile['name'] = str_replace('ś', 's', $arrFile['name']);
  58.  
  59. $strPath = PATH_GALLERY.$intAlbumId.'/';
  60.  
  61. $strFileName = change_file_name($arrFile['name'], $strPath);
  62. $resDir = opendir($strPath);
  63.  
  64. if(!$resDir)
  65. {
  66. $strErrorMsg .= ERROR_GALLERY_PHOTO_OPEN_DIR;
  67. app_redirect(PATH_SERVER.'?load_module=gallery&action=photo_add&album_id='.$_POST['album_id'].'&msg='.$strErrorMsg);
  68. }
  69.  
  70. $strDest = $strPath.$strFileName;
  71.  
  72. $strDestMin = $strPath.'min/'.$strFileName;
  73.  
  74. if(is_uploaded_file($arrFile['tmp_name']))
  75. {
  76. if(!move_uploaded_file($arrFile['tmp_name'], $strDest))
  77. {
  78. $strErrorMsg .= ERROR_GALLERY_PHOTO_COPY;
  79. app_redirect(PATH_SERVER.'?load_module=gallery&action=photo_add&album_id='.$_POST['album_id'].'&msg='.$strErrorMsg);
  80. }
  81.  
  82. ?>


Framgemt mojego starego kodu. Na poczatku sprawdza czy przeslano plik. Nastepnie sprawdza Errory - te dodane przez php. Pozniej zamienia polskie na zwykle znaki. Na koncu przenosi do odpowiedniego katalogu.
huntercs
zamiast usywać polskie znaki, spacje i inne specjanle znaki wolę tworzyć unikalne nazwy np.:
  1. <?php
  2. $filename = md5(uniqid(rand(), true));
  3. ?>

czy coś w tym stylu
Prph
Przyznam, że naprawdę dobre smile.gif
Mozna przyjąć, że nigdy nazwa nie będzie taka sama?
huntercs
jest takie prawdopobobieństwo więc najlepiej zorbić prostą rekurencyjną funkcje:
  1. <?php
  2. function GetUniqueName();
  3. {
  4. $filename = md5(uniqid(rand(), true));
  5. if(file_exists($filename)) GetUniqueName();
  6. else return $filename;
  7. }
  8. $name=GetUniqueName();
  9. ?>

i nazwy będą unikatowe guitar.gif
Prph
Czemu rekurencja? Nie lepiej na do-while?
huntercs
nie smile.gif, generalnie chodzi o to że za pierwszym razem będzie już losował unikatową nazwę (małe prawdopodobieństwo że już taka istnieje), później sprawdza czy przypadkiem nie istnieje już plik o takiej nazwie i zwraca nazwę, nie potrzebne do while(), a pozatym można zapoznać się z rekurencją rolleyes.gif
Prph
Wlasnie dlatego do-while. w warunku dajesz czy plik istnieje a w ciele petli zmieniasz nazwe winksmiley.jpg W idealnym przypadku wykona sie dokladnie raz.

Rekurencja moim zdaniem wprowadza troche zamieszania. Cale szczescie, ze to jest tak banalny przyklad jej wykorzystania, ze nie trtzeba wysilac tego glowy. Mialem w poprzednim semestrze wyklady z Ady i tam facet pokazywal nam rekurencje - tamte byly hardcorowe winksmiley.jpg

Pozostaje przy do-while winksmiley.jpg

Pozdrawiam, Adrian.
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.