Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wysyłania plików do serwera
Forum PHP.pl > Forum > PHP
artur81
Mam taki oto formularz
  1. <form enctype="multipart/form-data" name="posting" action="upload_naprawiony.php?a=upload" method="post">
  2. <input type="file" size="30" name="upload_picture"><input type="hidden" name="MAX_FILE_SIZE" value="<? echo $maxFileSize ?>"><br /><textarea name="tekst" rows="10" columns= "30">Tutaj wpisz tekst komunikatu</textarea><br />
  3. <font size="1">Podaj odbiorcę pliku</font><input name="odbiorca" type ="text"> <br />
  4. <input type="submit" value="Wyślij plik" name="picture_send" class="but">
  5. </form>

do tego skrypt go obsługujący
  1. <?php
  2.  
  3. $maxFileSize = 2621440; //maksymalna wielko&para;c' pliku w bajtach
  4. $uploadFolder = 'naprawione/'; //folder, do którego be;d&plusmn; kopiowane pliki
  5. $acceptMIME = array('application/arj', 'application/winrar', 'application/zip', 'application/vnd.ms-excel',); //akceptowane typy plików (MIME Types)
  6.  
  7. if($_GET['a'] == 'upload')
  8. {
  9. $picture = $_FILES['upload_picture'];
  10. if(empty($picture['error']))
  11. {
  12. $check = 0;
  13. foreach($acceptMIME as $key => $value)
  14. {
  15. if($picture['type'] == $value)
  16. {
  17. $check = 1;
  18. break;
  19. }
  20. }
  21. if($check)
  22. {
  23. $send_picture = @move_uploaded_file($picture['tmp_name'], $uploadFolder.'/'.$picture['name']);
  24. if(!$send_picture) {$errorMsg = 'Błąd podczas kopiowania pliku do wyznaczonego folderu!';}
  25. else {
  26.  
  27. /////////////// dodawanie do bazy ////////////////////////////
  28. $nazwa_pliku=$picture['name'];
  29. $tekst=addslashes($_POST['tekst']);
  30. $login=$zalogowany;
  31. $rozmiar=$picture['size'];
  32. $odbiorca_pliku=$_POST['odbiorca'];
  33.  
  34. require_once('./polacz_z_baza.php');
  35. if ($nazwa_pliku && $tekst && $login && $rozmiar && $odbiorca_pliku) {
  36. $zapytanie = "INSERT INTO pliki_naprawione (id, login, nazwa_pliku, rozmiar, tekst, odbiorca)
  37. VALUES ('', '$login' , '$nazwa_pliku', '$rozmiar', '$tekst', '$odbiorca_pliku')";
  38. $wynik = mysql_query ($zapytanie);
  39. }
  40.  
  41. if (mysql_affected_rows()==1) {
  42. $info ='<div align="center"><font size="1">Udało się dodać opis!!!</font></div>';
  43. } else
  44. {
  45. $info ='<div align="center><font size="1">Wystąpił nieoczekiwany błąd i opis nie został dodany!</font></div>'; }
  46.  
  47. /////////////// koniec dodawania do bazy ////////////////////
  48.  
  49. $errorMsg = '<div align ="center"><font size="1">Kopiowanie pliku zakończone sukcesem!</font></div>';
  50. header ("Location: http://adreswsieci/upload_naprawiony.php");}
  51. }
  52. else $errorMsg = '<div align ="center"><font size="1">Nieprawidłowy typ pliku!</font></div>';
  53. }
  54. else
  55. {
  56. switch($picture['error'])
  57. {
  58. case 1 :
  59. $errorMsg = '<div align ="center"><font size="1">Rozmiar pliku przekracza maksymalny dopuszczalny rozmiar ustawiony w konfigur
    acji php (php.ini)!</font></div>'
    ;
  60. header ("Location: http://adreswsieci/upload_naprawiony.php");
  61. break;
  62. case 2 :
  63. $errorMsg = '<div align ="center"><font size="1">Rozmiar pliku przekracza maksymalny dopuszczalny rozmiar ustawiony w skrypcie
    !</font></div>'
    ;
  64. header ("Location: http://adreswsieci/upload_naprawiony.php");
  65. break;
  66. case 3 :
  67. $errorMsg = '<div align ="center"><font size="1">Plik nie został wysłany w całości!</font></div>';
  68. header ("Location: http://adreswsieci/upload_naprawiony.php");
  69. break;
  70. case 4 :
  71. $errorMsg = '<div align ="center"><font size="1">Żaden plik nie został wysłany</font></div>';
  72. header ("Location: http://adreswsieci/upload_naprawiony.php");
  73. break;
  74. }
  75. }
  76. }
  77. ?>


Kiedy wysyłam pliki z firefoksa: przechodzą dwa typy xls i zip (były one standardowo ustawione w typach MIME obsługiwanych przez serwer) arj i rar nie przechodzą (te dodawałem sam i są widziane jako typy użytkownika). Nie sądzę żebym coś zrąbał.
Nazwy wpisałem takie jak widać w skrypcie a w polach extensions dałem ich rozszerzenia czyli rar i arj. Nie działa i nie jestem w stanie znaleźć przyczyny błędu.
Najdziwniejsze jest jednak to że sprawdzałem ten sam skrypt w ie 6 sp2 i o dziwo oprócz tych dwóch typów wymienionych nie przechodzą również zipy, formularz puszcza tylko pliki excela. Tutaj mnie zamurowało. Co jest z tym formularzem nie tak? Czy ie sam jeszcze dodaje coś do formularza?

----edit----
Do wstawiania kodu HTML służy tag [ html ] exclamation.gif!
Poprawiłem, ale już ostatni raz. Prosze używać poprawnego bbCode'u.
~mike_mech
mike
1. Powysyłaj sobie pliki bez żadnych bajerów i sprawdź z jakim typem mime przeglądarki rzeczywistości wysyłają pliki. Dla przykładu IE wysyła pliki .jpg z typem image/pjpeg. Może gdzieś jakieś przekłamania się pojawiają.
2. Sprawdzasz czy typ mime znajduje się w tablicy akceptowanych typów za pomoce pętli. Bleee. A nie lepiej in_array() :?:

----edit----
A zamiast tego switch'a do komunikatów nie lepiej:
  1. <?php
  2.  
  3. // ...
  4. $arrWarnings = array();
  5. $arrWarnings[ 1 ] = 'Rozmiar pliku przekracza maksymalny dopuszczalny rozmiar ustawiony w konfiguracj
    i php (php.ini)!'
    ;
  6. $arrWarnings[ 2 ] = 'Rozmiar pliku przekracza maksymalny dopuszczalny rozmiar ustawiony w skrypcie!';
  7. $arrWarnings[ 3 ] = 'Plik nie został wysłany w całości!';
  8. $arrWarnings[ 4 ] = 'Żaden plik nie został wysłany';
  9.  
  10. $errorMsg = '<div align ="center"><font size="1">' . $arrWarnings[ $picture['error'] ] . '</font></div>';
  11. // ...
  12.  
  13. ?>


----edit 2----
Ustawiasz zmienną $errorMsg a potem dajesz przekierowanie. Co Ci to da :?:
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.