Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]walidacja załącznika
Forum PHP.pl > Forum > Przedszkole
jaroslavmo
Użyłem php mailer do wysyłania emaila, chciałbym zrobić walidację wielkości pliku po stronie serwera.

stowrzyłem taki warunek

  1.  
  2. $maxsize = 2*1024*1024
  3.  
  4. if(isset($_Files['file']['name'])) {
  5.  
  6. if($_FILES['file']['size'] > $maxsize) {
  7. echo 'zbyt duży plik';
  8.  
  9. } else {
  10. $mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);
  11. }
  12.  
  13. }
  14.  
  15.  
  16.  


mimo tego mail się wysyła bez załącznika, ale wysyła. Chciałbym to zmienić.
Poniżej cały mój kod php





  1.  
  2.  
  3.  
  4. <?php
  5. ini_set('display_errors', '1');
  6. ini_set('display_startup_errors', '1');
  7.  
  8. $honeypot = $_POST['honey'];
  9. $nameU = $_POST['name'];
  10. $email = $_POST['email'];
  11. $content = $_POST['message'];
  12. $phoneU = $_POST['phone'];
  13. $fileUpload = $_POST['file'];
  14.  
  15. use PHPMailer\PHPMailer\PHPMailer;
  16. use PHPMailer\PHPMailer\SMTP;
  17. use PHPMailer\PHPMailer\Exception;
  18.  
  19. require 'autoload.php';
  20.  
  21. if ($_SERVER["REQUEST_METHOD"] == "POST") {
  22. // robot detection
  23. $honeypot = trim($_POST["honey"]);
  24.  
  25. if(!empty($honeypot)) {
  26. echo "NO SPAM!";
  27. }
  28.  
  29. $mail = new PHPMailer; //From email address and name
  30. $mail->From = $email ;
  31.  
  32. $mail->FromName = $nameU; //To address and name
  33. $mail->addAddress("jaroslaw.mor@gmail.com", "Vomo");//Recipient name is optional
  34.  
  35. $mail->isHTML(true);
  36. $mail->Subject = "Zapytanie ze strony www";
  37. $mail->Body = "Telefon:$phoneU<br><br>Treść wiadomośći:<br>$content";
  38. $mail->AltBody = "Telefon:$phoneU\n$content";
  39.  
  40. $maxsize = 2*1024*1024;
  41.  
  42.  
  43.  
  44. if(isset($_Files['file']['name'])) {
  45.  
  46. if($_FILES['file']['size'] > $maxsize) {
  47. echo 'zbyt duży plik';
  48.  
  49. } else {
  50. $mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);
  51. }
  52.  
  53. }
  54.  
  55.  
  56.  
  57. if(!$mail->send())
  58. {
  59. echo "Mailer Error: " . $mail->ErrorInfo;
  60. }
  61. else
  62. {
  63. header("Location: sent.html");
  64. exit();
  65. }
  66.  
  67. }
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  

nospor
ZNajdz 10 roznic

$_Files
$_FILES
jaroslavmo
Dzięki za wskazówkę, poprawiłem ale niestety nadal tak samo.
nospor
To sprawdz co dokladnie dostajesz w $_FILES

print_r($_FILES);
exit;
jaroslavmo
Cytat(nospor @ 21.03.2022, 18:07:28 ) *
To sprawdz co dokladnie dostajesz w $_FILES

print_r($_FILES);
exit;




Array ( [uploded-file] => Array ( [name] => Tropico 5 V1.10 Trainer +6.rar [type] => application/octet-stream [tmp_name] => /tmp/www/mork/phpqbDtSk [error] => 0 [size] => 4585995 ) ) 1
nospor
No i chyba juz widzisz ze twoje file to uploded-file a nie file

$_FILES['uploded-file']
jaroslavmo
By nie tworzyć nowego wątku, zapomniałem że miał być więcej niż jeden załącznik. Uwzględniając poprzednie wskazówki pętlę do załączników.

Stworzyłem pętle załączniki widzi i nie zgłasza problemu, jak kodu od walidacji nie ma, wysyła wiadomość ze załącznikami.

  1.  
  2. for ($i=0; $i < count($attachments) ; $i++) {
  3. $fileTmpName = $_FILES['uploaded-file']["tmp_name"][$i];
  4. $filename = $_FILES['uploaded-file']["name"][$i];
  5. move_uploaded_file($fileTmpName, "uploads/" . $filename);
  6. $mail-> AddAttachment("uploads/". $filename);
  7. }
  8.  
  9.  




Natomiast ten fragment

  1.  
  2. if(filesize($filename) > $maxsize) {
  3. $message ="plik jest zbyt duży";
  4. }
  5.  


wywołuje ostrzeżenie

Cytat
Warning: filesize(): stat failed for oświadczenie-o-przekazaniu-praw-majatkowych.pdf in /home/mork/public_html/vomo/mailer.php on line 55 Array ( [uploaded-file] => Array ( [name] => Array ( [0] => Klauzule informacyjne i okna zgody - wzór.pdf [1] => oświadczenie-o-przekazaniu-praw-majatkowych.pdf ) [type] => Array ( [0] => application/pdf [1] => application/pdf ) [tmp_name] => Array ( [0] => /tmp/www/mork/phpSW91R4 [1] => /tmp/www/mork/phpOAykxZ ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 148245 [1] => 56805 ) ) )



całość kodu

  1.  
  2.  
  3. <?php
  4. ini_set('display_errors', '1');
  5. ini_set('display_startup_errors', '1');
  6.  
  7. $honeypot = $_POST['honey'];
  8. $nameU = $_POST['name'];
  9. $email = $_POST['email'];
  10. $content = $_POST['message'];
  11. $phoneU = $_POST['phone'];
  12. //$fileUpload = $_POST['file'];
  13.  
  14. use PHPMailer\PHPMailer\PHPMailer;
  15. use PHPMailer\PHPMailer\SMTP;
  16. use PHPMailer\PHPMailer\Exception;
  17.  
  18. require 'autoload.php';
  19.  
  20. if ($_SERVER["REQUEST_METHOD"] == "POST") {
  21. // robot detection
  22. $honeypot = trim($_POST["honey"]);
  23.  
  24. if(!empty($honeypot)) {
  25. echo "NO SPAM!";
  26. }
  27.  
  28. $mail = new PHPMailer; //From email address and name
  29. $mail->From = $email ;
  30.  
  31. $mail->FromName = $nameU; //To address and name
  32. $mail->addAddress("jaroslaw.mor@gmail.com");//Recipient name is optional
  33.  
  34. $mail->isHTML(true);
  35. $mail->Subject = "Zapytanie ze strony www";
  36. $mail->Body = "Telefon:$phoneU<br><br>Treść wiadomośći:<br>$content";
  37. $mail->AltBody = "Telefon:$phoneU\n$content";
  38. $maxsize = 2*1024*1024;
  39. $attachments = $_FILES['uploaded-file']["name"];
  40. $acceptedFormats = array("doc", " docx" , "pdf" , "txt" , "odt", "zip", "7z", "rar", "jpg", "jpeg");
  41. $uploadedFile = $_FILES['uploaded-file']['tmp_name'];
  42.  
  43.  
  44.  
  45. for ($i=0; $i < count($attachments) ; $i++) {
  46. $fileTmpName = $_FILES['uploaded-file']["tmp_name"][$i];
  47. $filename = $_FILES['uploaded-file']["name"][$i];
  48. move_uploaded_file($fileTmpName, "uploads/" . $filename);
  49. $mail-> AddAttachment("uploads/". $filename);
  50.  
  51.  
  52. }
  53.  
  54.  
  55.  
  56. if (isset($attachments)) {
  57.  
  58. if(filesize($filename) > $maxsize) {
  59. $message ="plik jest zbyt duży";
  60. }
  61.  
  62.  
  63. else if (!in_array(pathinfo($fileTmpName, PATHINFO_EXTENSION), $acceptedFormats)) {
  64. $message ="nieprawidłowy format pliku";
  65.  
  66. } else {
  67. $message = '';
  68.  
  69. }
  70. }
  71.  
  72.  
  73.  
  74. if(!$mail->send())
  75. {
  76. echo "Mailer Error: " . $mail->ErrorInfo;
  77. die();
  78. }
  79. else
  80. {
  81. //header("Location: sent.html");
  82.  
  83. print_r($_FILES);
  84.  
  85. die();
  86. }
  87.  
  88.  
  89.  
  90.  
  91. }
  92.  
nospor
1) Walidacja ma byc w petli a nie poza nia. No to chyba dosc logiczne. Poza petla to ty co najwyzej ostatni element mozesz zwalidowac

2)
if(filesize($filename) > $maxsize) {
A co to ma byc? przeciez $filename to nazwa pliku a nie sciezka do pliku. Komunikat bledy wyraznie ci o tym mowi. Poza tym, rozmiar przeciez masz nadal w $_FILES. Czemu z tego nie korzystasz? Czemu nafle przy petli stwierdziles ze bedziesz uzywal czegos innego? Co sie zminilo? No nic sie niezmienilo
jaroslavmo
zmieniłem to trochę, błędami nie sypie ale nawet jeśli waga któregoś ze załączników przekracza 2mb to i tak maila wysyła tyle że bez załączników

kod odpowiedzialny za załącznik:

  1.  
  2. if(isset($_FILES['uploaded-file'])) {
  3.  
  4. for ($i = 0; $i < count($_FILES['uploaded-file']['name']); $i++) {
  5.  
  6. if ($_FILES['uploaded-file']['error'] !== UPLOAD_ERR_OK) continue;
  7. $fileTmpName = $_FILES['uploaded-file']["tmp_name"][$i];
  8. $filename = $_FILES['uploaded-file']["name"][$i];
  9.  
  10.  
  11.  
  12. if($_FILES['uploaded-file']["name"]['size'][$i] > $maxsize) {
  13. exit('plik jest zbyt duży');
  14. } else {
  15.  
  16. move_uploaded_file($fileTmpName, "uploads/" . $filename);
  17. $mail-> AddAttachment("uploads/". $filename);
  18.  
  19. }
  20.  
  21.  
  22.  
  23.  
  24. }//loop end
  25.  
  26. }//isset end
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33. }//post end
  34.  




całość

  1.  
  2. <?php
  3. ini_set('display_errors', '1');
  4. ini_set('display_startup_errors', '1');
  5.  
  6. $honeypot = $_POST['honey'];
  7. $nameU = $_POST['name'];
  8. $email = $_POST['email'];
  9. $content = $_POST['message'];
  10. $phoneU = $_POST['phone'];
  11. //$fileUpload = $_POST['file'];
  12. $honeypot = trim($_POST["honey"]);
  13.  
  14. use PHPMailer\PHPMailer\PHPMailer;
  15. use PHPMailer\PHPMailer\SMTP;
  16. use PHPMailer\PHPMailer\Exception;
  17.  
  18. require 'autoload.php';
  19.  
  20. if ($_SERVER["REQUEST_METHOD"] == "POST") {
  21.  
  22. $mail = new PHPMailer; //From email address and name
  23. $mail->From = $email ;
  24.  
  25. $mail->FromName = $nameU; //To address and name
  26. $mail->addAddress("jaroslaw.mor@gmail.com");//Recipient name is optional
  27.  
  28. $mail->isHTML(true);
  29. $mail->Subject = "Zapytanie ze strony www";
  30. $mail->Body = "Telefon:$phoneU<br>Treść wiadomośći:<br><br>$content";
  31. $mail->AltBody = "Telefon:$phoneU\n$content";
  32. $maxsize = 2*1024*1024;
  33. $attachments = $_FILES['uploaded-file']["name"];
  34. $acceptedFormats = array("doc", " docx" , "pdf" , "txt" , "odt", "zip", "7z", "rar", "jpg", "jpeg");
  35.  
  36. if(!empty($honeypot)) {
  37. echo "NO SPAM!";
  38. }
  39.  
  40. if(isset($_FILES['uploaded-file'])) {
  41.  
  42. for ($i = 0; $i < count($_FILES['uploaded-file']['name']); $i++) {
  43.  
  44. if ($_FILES['uploaded-file']['error'] !== UPLOAD_ERR_OK) continue;
  45. $fileTmpName = $_FILES['uploaded-file']["tmp_name"][$i];
  46. $filename = $_FILES['uploaded-file']["name"][$i];
  47.  
  48.  
  49.  
  50. if($_FILES['uploaded-file']["name"]['size'][$i] > $maxsize) {
  51. exit('plik jest zbyt duży');
  52. } else {
  53.  
  54. move_uploaded_file($fileTmpName, "uploads/" . $filename);
  55. $mail-> AddAttachment("uploads/". $filename);
  56.  
  57. }
  58.  
  59.  
  60.  
  61.  
  62. }//loop end
  63.  
  64. }//isset end
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71. }//post end
  72.  
  73.  
  74.  
  75.  
  76.  
  77. if(!$mail->send()) {
  78. echo "Mailer Error: " . $mail->ErrorInfo;
  79. exit();
  80. }
  81.  
  82. else {
  83. header("Location: sent.html");
  84.  
  85. exit();
  86. }
  87.  
  88.  
nospor
$_FILES['uploaded-file']["name"]['size'][$i]
jaroslavmo
Cytat(nospor @ 22.03.2022, 22:40:40 ) *
$_FILES['uploaded-file']["name"]['size'][$i]


$FILES w moim warunku wygląda dokładanie tak jak to napisałeś.

nie wiem o co chodzi.

Php to nie moja działka, tak wyszło że musiałem się sam jakoś kombinować, metodą prób i błędów, googla, youtuba i stackoverflow coś wyskrobałem. Jak to k....stwo zacznie działać nikomu nie będę zawracać d.......y o php , bo się więcej tego nie tykam.
nospor
Cytat
$FILES w moim warunku wygląda dokładanie tak jak to napisałeś.

Ja to dokladnie wiem. Ja ci podalem ten kawalek kodu gdzie wlasnie masz blad i masz poprawic.
jaroslavmo
Ok, poradziłem sobie z załącznikiem i działało a teraz mam taki dziwny problem że każdy załącznik, nawet jeśli jest mniejszy od maxsize to i tak pokazuje że plik jest zbyt duży i wykonuje się instrukcja dla zbyt dużego pliku.





  1.  
  2.  
  3.  
  4. <?php
  5. //Import PHPMailer classes into the global namespace
  6. //These must be at the top of your script, not inside a function
  7. use PHPMailer\PHPMailer\PHPMailer;
  8. use PHPMailer\PHPMailer\SMTP;
  9. use PHPMailer\PHPMailer\Exception;
  10.  
  11. //Load Composer's autoloader
  12. require 'autoload.php';
  13.  
  14. //Create an instance; passing `true` enables exceptions
  15. $mail = new PHPMailer(true);
  16. $honeypot = $_POST['honey'];
  17. $user_name = $_POST['name'];
  18. $user_email = $_POST['email'];
  19. $user_message = $_POST['message'];
  20. $user_phone = $_POST['phone'];
  21. $honeypot = trim($_POST["honey"]);
  22. $max_size = 2 * 1024 * 1204; //2mb
  23. $attachment = $_FILES['uploaded-file'];
  24.  
  25. if ($_SERVER["REQUEST_METHOD"] == "POST") {
  26.  
  27.  
  28. if(!empty($honeypot)) {
  29. echo "NO SPAM!";
  30. } else {
  31.  
  32. $mail = new PHPMailer; //From email address and name
  33. $mail->isMail();
  34.  
  35. //sender
  36. $mail->From = $user_email;
  37. $mail->FromName = $user_name;
  38.  
  39. //recipient
  40. $mail->addAddress("jaroslaw.mor@gmail.com");
  41.  
  42.  
  43. //mail subject
  44. $mail->Subject = "Zapytanie ze strony www";
  45.  
  46.  
  47. $mail->isHTML(true);
  48. //body mail
  49. $mail->Body = "Telefon:$user_phone<br><br>Treść wiadomośći:<br>$user_message";
  50. $mail->AltBody = "Telefon:$user_phone\n$content";
  51.  
  52. //attachment
  53. if(isset($attachment)) {
  54.  
  55. for ($i = 0; $i < count($_FILES['uploaded-file']['name']); $i++) {
  56. if ($_FILES['uploaded-file']['error'][$i] !== UPLOAD_ERR_OK) continue;
  57. $file_TmpName = $_FILES['uploaded-file']["tmp_name"][$i];
  58. $file_name = $_FILES['uploaded-file']["name"][$i];
  59.  
  60. if ($_FILES['uploaded-file']['size'][$i] > $maxsize) {
  61.  
  62. $message = urlencode("załącznik przekorczył limit 10MB");
  63. header("Location:".$_SERVER['HTTP_REFERER']. '#file-size-error');
  64. die();
  65.  
  66. }
  67.  
  68. else{
  69. move_uploaded_file($fileTmpName, "uploads/" . $filename);
  70. $mail-> AddAttachment("uploads/". $filename);
  71. }
  72. }//for
  73. }//isset
  74.  
  75. if(!$mail->send()) {
  76. echo "Mailer Error: " . $mail->ErrorInfo;
  77. exit();
  78. }
  79.  
  80. else {
  81. header("Location: sent.html");
  82.  
  83. exit();
  84.  
  85. }//if send else
  86.  
  87. }//honey else end
  88.  
  89. }//post end
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
nospor
Znajdz 10 roznic

$maxsize
$max_size

Zapoznaj sie prosze i zastosuj do tego tematu
Temat: Jak poprawnie zadac pytanie oraz przygotowac srodowisko pracy

Jak zobacze jeszcze jeden post z powodu nie istniejacych zmiennych, to bede zamykal wink.gif
jaroslavmo
Cytat(nospor @ 27.03.2022, 14:58:24 ) *
Znajdz 10 roznic

$maxsize
$max_size

Zapoznaj sie prosze i zastosuj do tego tematu
Temat: Jak poprawnie zadac pytanie oraz przygotowac srodowisko pracy

Jak zobacze jeszcze jeden post z powodu nie istniejacych zmiennych, to bede zamykal wink.gif


dzięki link pomógł we wykryciu kolejnego babola, teraz wszystko działa smile.gif
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.