Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Multi upload - Uploadify
Forum PHP.pl > Forum > PHP
tomall
Witam
Mam skrypt Uploadify, za pomocą którego umieszczam hurtowo zdjęcia na serwerze. (opcja multi).
Po stronie PHP, wygląda to tak:
- skrypt przekazuje tablicę z plikami $_FILES,
- zdjęcia umieszczane są w wybranym folderze,
- następnie tworzone są miniatury i umieszczane w innym folderze,
- następnie linki zapisywane są w bazie.
Operacja powtarzana jest po przesłaniu każdego z plików.
Wszystko działa prawidłowo za wyjątkiem, pierwszego zdjęcia z listy uploadu.

np.
zdjęcia powinny być umieszczone w katalogu: /foto/folder/zdjęcie2.jpg
to pierwsze zdjęcie znajduje się w katalogu: /foto/zdjęcie1.jpg
pozostałe zdjęcia umieszczane są już prawidłowo.
W bazie danych również przy pierwszym zdjęciu nie jest zapisywana informacja o katalogu.

Wygląda na to, że skrypt nie działa prawidłowo tylko przy pierwszej iteracji.
  1. if (!empty($_FILES)) {
  2. $tempFile = $_FILES['Filedata']['tmp_name'];
  3. $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
  4. $targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
  5. $sciezka = explode('/', $_REQUEST['folder']);
  6. $plik = $_FILES['Filedata']['name'];
  7.  
  8. if(move_uploaded_file($tempFile, $targetFile)) {
  9. $targetThumb = $_SERVER['DOCUMENT_ROOT'].'/lyzwy/thumbs/'.$sciezka[3].'/'.$plik;
  10. $max_width=146;
  11. $max_height=134;
  12. $img = getimagesize($targetFile);
  13. if($img[0]>$img[1])
  14. {
  15. $scale=$img[0]/$max_width;
  16. }
  17. else
  18. {
  19. $scale=$img[1]/$max_height;
  20. }
  21. $w = floor($img[0]/$scale);
  22. $h = floor($img[1]/$scale);
  23. $thumb = imagecreatetruecolor($w, $h);
  24. imagecopyresampled($thumb, imagecreatefromjpeg($targetFile), 0, 0, 0, 0, $w, $h, $img[0], $img[1]);
  25. imagejpeg($thumb, $targetThumb, 80);
  26. ImageDestroy(imagecreatefromjpeg($targetFile));
  27. ImageDestroy($thumb);
  28. }
  29.  
  30.  
  31. $db = connect();
  32. $zapytanie = $db -> query("INSERT INTO zdjecia VALUES ('$sciezka[3]', '$plik', now())");
  33. echo "1";
  34. }
monsta
Pokaz kod calej petli. Ponieważ z tego co pokazałeś jasno nie wynika gdzie znajduje się błąd.
tomall
Powyższy kod to cała pętla, nie ma w niej nic więcej.

Nie zaczyna się ona od WHILE, ponieważ wywoływana jest w momencie kiedy plik przesłany jest na serwer i zmienna $_FILES przestaje być pusta. if (!empty($_FILES)) Zatem kod wykona się za każdym razem kiedy plik pojawi się na serwerze i powstanie dla niego $_FILES. Uploadify kolejkuje pliki, ponieważ posiada funkcję multiuploadu:


  1. <script type='text/javascript'>// <![CDATA[
  2. $(document).ready(function() {
  3. $('#uploadify').uploadify({
  4. 'uploader': 'uploader/uploadify.swf',
  5. 'script': 'uploader/uploadify.php',
  6. 'folder': 'foto/',
  7. 'cancelImg': 'uploader/cancel.png',
  8. 'queueID' : 'fileQueue',
  9. 'auto' : false,
  10. 'multi' : true,
  11. 'fileDesc': 'JPG Image Files (*.jpg)',
  12. 'fileExt': '*.jpg;*.jpeg',
  13.  
  14.  
  15. onError: function(a,b,c,d) {
  16. if(d.status == 404)
  17. alert('Błąd skryptu');
  18. else if(d.type === "HTTP")
  19. alert('error'+d.type+":"+d.status);
  20. else if(d.type ==="File Size")
  21. alert(c.name+''+d.type+'Limit: '+Math.round(d.sizeLimit/1024)+'KB');
  22. else
  23. alert('error'+d.type+":"+d.text);
  24. },
  25. onComplete: function(a,b,c,d,e) {
  26. if(d!=='1')
  27. alert(d);
  28. }
  29.  
  30. });
  31. });
  32. // ]]></script>


oraz w body:

  1. <div id="fileQueue"></div>
  2. <input type="file" name="uploadify" id="uploadify" />
  3. <a href="java script:$('#uploadify').uploadifyUpload();$('#uploadify').uploadifySettings('folder','foto/{$folder}');">Wgraj</a>
  4. <p><a href="java script:jQuery('#uploadify').uploadifyClearQueue()">Anuluj wszystkie</a></p>
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.