Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]phpmailer + skalowanie załacznika
fcppl
post 19.03.2014, 13:03:41
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

Ostrzeżenie: (0%)
-----


witam,

Stworzyłem za pomocą phpmailer prosty formularz z możliwością dodania załącznika. Wszystko mi działa OK.

Chce dorobić żeby podczas dołączenia zdjęcia został podczas wysyłania automatycznie skalowany do ustalonego rozmiaru (pomniejszony) - zdjęcia pomniejszone będą wysłane na mój e-mail.
Teraz mam problem bo ludzi wysyłają b.duże zdjęcia i nie dość ze rozmiar jest duży to jeszcze zajmują po kilka MB.

Szukałem na forum jednak potrzebuję pomocy.

moj kod:

  1. <?php
  2.  
  3. if (isset($_POST["submit"])) {
  4.  
  5. $plik_tmp = $_FILES['plik']['tmp_name'];
  6. $plik = $_FILES['plik']['name'];
  7.  
  8. $name = strip_tags($_POST['name']);
  9. $address = strip_tags($_POST['address']);
  10. $email = strip_tags($_POST['email']);
  11. $message = strip_tags($_POST['message']);
  12.  
  13. require("phpmailer/class.phpmailer.php");
  14. $mail = new PHPMailer();
  15. $mail->PluginDir = "phpmailer/";
  16. $mail->From = 'xxx';
  17. $mail->FromName = 'test';
  18. $mail->Host = "smtp.wp.pl";
  19. $mail->Mailer = "smtp.wp.pl";
  20. $mail->Username = "xxx";
  21. $mail->Password = "xxx";
  22. $mail->SMTPAuth = true;
  23. $mail->SetLanguage("pl", "phpmailer/language/");
  24. $mail->Subject = 'test;
  25. $mail->CharSet = 'utf-8';
  26. $mail->IsHTML(true);
  27. $mail->Body = 'wiadomość z załącznikiem';
  28. $mail->AddAddress("test@test.pl");
  29. $mail->AddAttachment($plik_tmp, $plik);
  30. $mail->MsgHTML("
  31. <p>Adres: <strong>$name</strong> </p>
  32. <p>Osoba: <strong>$address</strong> </p>
  33. <p>Adres e-mail: <strong>$email</strong> </p>
  34. <p>tresc: <strong>$message</strong> </p>
  35. ");
  36. if (!$mail->Send())
  37. {
  38. echo '<p>Wystąpił błąd! Nie wysłano reklamacji.</p>';
  39. } else {
  40. $mail->ClearAddresses();
  41. $mail->ClearAttachments();
  42. echo '<p>Wiadomość została wysłana poprawnie.</p>';
  43. }
  44. }
  45. ?>
Go to the top of the page
+Quote Post
nospor
post 19.03.2014, 13:08:20
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No ale z czym problem? W kodzie co podales nigdzie nie ma kodu odpowiedzialnego za zmniejszanie zdjecia.... W necie masz pelno kodow php do robienia miniatur.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
fcppl
post 19.03.2014, 13:11:55
Post #3





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

Ostrzeżenie: (0%)
-----


problem mam taki ze miniaturke mi robi i zapisuje na serwerze, ale na meila wysyła originalne duze zdjecie.

uzylem ten kod"

  1. $plik_tmp = $_FILES['image']['tmp_name'];
  2. $plik_nazwa = $_FILES['image']['name'];
  3.  
  4. $save_file = $plik_nazwa;
  5.  
  6.  
  7. if(is_uploaded_file($plik_tmp)) {
  8. move_uploaded_file($plik_tmp, ''.$save_file.'');
  9. echo "wszystko poszlo ok";
  10.  
  11.  
  12.  
  13. $img = imagecreatefromjpeg(''.$save_file.'');
  14.  
  15. $width = imagesx($img);
  16. $height = imagesy($img);
  17.  
  18.  
  19. $width_mini = 250; // szerokosc obrazka
  20. $height_mini = 170; // wysokosc obrazka
  21. $img_mini = imagecreatetruecolor($width_mini, $height_mini);
  22.  
  23.  
  24. imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $width_mini , $height_mini, $width , $height);
  25.  
  26.  
  27. imagejpeg($img_mini, "min-".$save_file."", 80); // utworzona miniaturka liczba (80) oznacza jakos obrazka od 0 do 100
  28. imagedestroy($img);
  29. imagedestroy($img_mini);
  30.  
  31. }
Go to the top of the page
+Quote Post
nospor
post 19.03.2014, 13:14:52
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
problem mam taki ze miniaturke mi robi i zapisuje na serwerze, ale na meila wysyła originalne duze zdjecie.
To tak ciezko bylo od razu to napisac??

Skoro miniaturke zapisujesz o tu:
imagejpeg($img_mini, "min-".$save_file."", 80);
czyli pod nazwą: "min-".$save_file.""
no to masz wlasnie ją załączac a nie uplodowany plik. W czym problem?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
fcppl
post 19.03.2014, 16:44:23
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

Ostrzeżenie: (0%)
-----


dzięki za wskazówki.

Działa mi już prawie wszystko OK, ale nie potrafię zrobić żeby skalować jednocześnie dwa pliki. Kombinuje, ale efektów brak.

Taki mam kod do skalowania jednego pliku:

  1. <?php
  2.  
  3. if (isset($_POST["submit"])) {
  4. $plik_tmp = $_FILES['plik']['tmp_name'];
  5. $plik_nazwa = $_FILES['plik']['name'];
  6.  
  7.  
  8. $save_file = $plik_nazwa;
  9. if(is_uploaded_file($plik_tmp)) {
  10. move_uploaded_file($plik_tmp, ''.$save_file.'');
  11. $img = imagecreatefromjpeg(''.$save_file.'');
  12. $width = imagesx($img);
  13. $height = imagesy($img);
  14. $width_mini = 1024;
  15. $height_mini = 768;
  16. $img_mini = imagecreatetruecolor($width_mini, $height_mini);
  17. imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $width_mini , $height_mini, $width , $height);
  18. imagejpeg($img_mini, $save_file."", 80);
  19. imagedestroy($img);
  20. imagedestroy($img_mini);
  21. }
  22.  
  23.  
  24. $name = strip_tags($_POST['name']);
  25. $address = strip_tags($_POST['address']);
  26. $email = strip_tags($_POST['email']);
  27. $message = strip_tags($_POST['message']);
  28.  
  29.  
  30. require("phpmailer/class.phpmailer.php");
  31. $mail = new PHPMailer();
  32. $mail->PluginDir = "phpmailer/";
  33. $mail->From = 'xxx';
  34. $mail->FromName = 'test';
  35. $mail->Host = "xxx";
  36. $mail->Mailer = "xxx";
  37. $mail->Username = "xxx";
  38. $mail->Password = "xxx";
  39. $mail->SMTPAuth = true;
  40. $mail->SetLanguage("pl", "phpmailer/language/");
  41. $mail->Subject = 'xxx';
  42. $mail->CharSet = 'utf-8';
  43. $mail->IsHTML(true);
  44. $mail->Body = 'xxx';
  45. $mail->AddAddress("xxx");
  46. $mail->AddAttachment($save_file);
  47.  
  48. $mail->MsgHTML("
  49. <p>Adres: <strong>$name</strong> </p>
  50. <p>Osoba: <strong>$address</strong> </p>
  51. <p>Adres e-mail: <strong>$email</strong> </p>
  52. <p>Opis: <strong>$message</strong> </p>
  53. ");
  54. if (!$mail->Send())
  55. {
  56. echo '<p>Wystąpił błąd! Nie wysłano reklamacji.</p>';
  57. } else {
  58. $mail->ClearAddresses();
  59. $mail->ClearAttachments();
  60. echo '<p>Wiadomosc została wysłana poprawnie.</p>';
  61. }
  62.  
  63. }
  64. ?>


Zrobiłem w form drugie pole "<input type="file" name="plik1" />" próbowałem dodać do php, ale w załączniku wysyła tylko pierwszy jpg. Problem mam z przerobieniem skryptu od skalowania, bo bez tego działają mi normalnie dwa lub więcej załączników.
Go to the top of the page
+Quote Post
nospor
post 19.03.2014, 16:46:04
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




POkaz kod jak dodajesz oba pola i je przetwarzasz. SKad mamy wiedziec gdzie robisz blad?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
fcppl
post 19.03.2014, 17:33:57
Post #7





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

Ostrzeżenie: (0%)
-----


Generalnie chyba mam wszystko źle bo nie potrafię przerobić kody od skalowania żeby działało na dwa załączniki.
Z tego kodu poniżej mimo, że w form wybiorę inne jpg zapisuje mi dwa pliki na serwerze jednak są one jednakowe i na meila tez mam dwa załączniki, ale takie same.

  1. <?php
  2.  
  3. if (isset($_POST["submit"])) {
  4. $plik_tmp = $_FILES['plik']['tmp_name'];
  5. $plik_nazwa = $_FILES['plik']['name'];
  6. $plik_nazwa1 = $_FILES['plik1']['name'];
  7.  
  8. $save_file = $plik_nazwa;
  9. $save_file1 = $plik_nazwa1;
  10.  
  11. if(is_uploaded_file($plik_tmp)) {
  12. move_uploaded_file($plik_tmp, ''.$save_file.'');
  13. move_uploaded_file($plik_tmp, ''.$save_file1.'');
  14. $img = imagecreatefromjpeg(''.$save_file.'');
  15. $width = imagesx($img);
  16. $height = imagesy($img);
  17. $width_mini = 100;
  18. $height_mini = 100;
  19. $img_mini = imagecreatetruecolor($width_mini, $height_mini);
  20. imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $width_mini , $height_mini, $width , $height);
  21. imagejpeg($img_mini, $save_file."", 80);
  22. imagejpeg($img_mini, $save_file1."", 180);
  23. imagedestroy($img);
  24. imagedestroy($img_mini);
  25. }
  26.  
  27.  
  28. $name = strip_tags($_POST['name']);
  29. $address = strip_tags($_POST['address']);
  30. $email = strip_tags($_POST['email']);
  31. $message = strip_tags($_POST['message']);
  32.  
  33.  
  34. require("phpmailer/class.phpmailer.php");
  35. $mail = new PHPMailer();
  36. $mail->PluginDir = "phpmailer/";
  37. $mail->From = 'xxx';
  38. $mail->FromName = 'test';
  39. $mail->Host = "xxx";
  40. $mail->Mailer = "xxx";
  41. $mail->Username = "xxx";
  42. $mail->Password = "xxx";
  43. $mail->SMTPAuth = true;
  44. $mail->Subject = "test";
  45. $mail->CharSet = 'utf-8';
  46. $mail->IsHTML(true);
  47. $mail->Body = 'xxx';
  48. $mail->AddAddress("xxx");
  49. $mail->AddAttachment($save_file);
  50. $mail->AddAttachment($save_file1);
  51. $mail->MsgHTML("
  52. <p>Adres doręczenia: <strong>$name</strong> </p>
  53. <p>Osoba do kontaktu: <strong>$address</strong> </p>
  54. <p>Adres e-mail: <strong>$email</strong> </p>
  55. <p>Dokładny opis uszkodzenia: <strong>$message</strong> </p>
  56. ");
  57. if (!$mail->Send())
  58. {
  59. echo '<p>Wystąpił błąd! Nie wysłano.</p>';
  60. } else {
  61. $mail->ClearAddresses();
  62. $mail->ClearAttachments();
  63. echo '<p>Tresc została wysłana poprawnie.</p>';
  64. }
  65.  
  66. }
  67. ?>
Go to the top of the page
+Quote Post
Turson
post 19.03.2014, 18:05:03
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


No no skalować musisz każdy załącznik w pętli
Go to the top of the page
+Quote Post
nospor
post 19.03.2014, 18:42:18
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




move_uploaded_file($plik_tmp, ''.$save_file.'');
move_uploaded_file($plik_tmp, ''.$save_file1.'');
Przeciez o tu, przenosisz ten sam plik pod dwie rozne lokalizacje...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
fcppl
post 19.03.2014, 23:23:42
Post #10





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

Ostrzeżenie: (0%)
-----


Ostatnie pytanie. Wszystkie wcześniejsze "usterki" już rozwiązałem

Zmieniłem skrypt do skalowania na IMagick (kod poniżej). Wszystko mi działa idealnie, ale mam taki problem. Jeżeli nie wybiorę zdjęcia w formularzu wtedy cały skrypt się wysypuje. Spowodowane jest to tym ze brakuje img i skrypt zgłasza błąd.

Mnie interesuje jak zrobić żeby w momencie jak ktoś nie załączy fotki skrypt normalnie działał i pominął ta cześć kodu która jest odpowiedzialna za skalowanie.



  1. <?php
  2. if (isset($_POST["submit"])) {
  3. $plik_tmp = $_FILES['plik']['tmp_name'];
  4. $plik_nazwa = $_FILES['plik']['name'];
  5.  
  6.  
  7. $path=$plik_tmp;
  8. $photo=new Imagick($path);
  9. $photo->ThumbnailImage(1024,749,true);
  10. $photo->setImageCompressionQuality(10);
  11. $new_path=$_SERVER['DOCUMENT_ROOT'] . $plik_nazwa;
  12. $photo->writeImage($plik_nazwa);
  13.  
  14.  
  15.  
  16. $name = strip_tags($_POST['name']);
  17. $address = strip_tags($_POST['address']);
  18. $email = strip_tags($_POST['email']);
  19. $message = strip_tags($_POST['message']);
  20.  
  21. require("phpmailer/class.phpmailer.php");
  22. $mail = new PHPMailer();
  23. $mail->PluginDir = "phpmailer/";
  24. $mail->From = 'xxx';
  25. $mail->FromName = 'test';
  26. $mail->Host = "xxx";
  27. $mail->Mailer = "xxx";
  28. $mail->Username = "xxx";
  29. $mail->Password = "xxx";
  30. $mail->SMTPAuth = true;
  31. $mail->SetLanguage("pl", "phpmailer/language/");
  32. $mail->Subject = 'xxx';
  33. $mail->CharSet = 'utf-8';
  34. $mail->IsHTML(true); /
  35. $mail->Body = 'wiadomość';
  36. $mail->AddAddress("xxx");
  37. $mail->AddAttachment($plik_nazwa);
  38. $mail->MsgHTML("
  39. <p>Adres:<strong>$name</strong> </p>
  40. <p>Osoba:<strong>$address</strong> </p>
  41. <p>Adres<strong>$email</strong> </p>
  42. <p>Dokładny<strong>$message</strong> </p>
  43. ");
  44. if (!$mail->Send())
  45. {
  46. echo '<p>Wystąpił błąd! Nie wysłano.</p>';
  47. } else {
  48. $mail->ClearAddresses();
  49. $mail->ClearAttachments();
  50. echo '<p>Wiadomosc została wysłana poprawnie.</p>';
  51. }
  52. }
  53. ?>
Go to the top of the page
+Quote Post
Turson
post 20.03.2014, 10:05:05
Post #11





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. if(!empty($_FILES['plik']['tmp_name'])){
  2. $plik_tmp = $_FILES['plik']['tmp_name'];
  3. $plik_nazwa = $_FILES['plik']['name'];
  4.  
  5.  
  6. $path=$plik_tmp;
  7. $photo=new Imagick($path);
  8. $photo->ThumbnailImage(1024,749,true);
  9. $photo->setImageCompressionQuality(10);
  10. $new_path=$_SERVER['DOCUMENT_ROOT'] . $plik_nazwa;
  11. $photo->writeImage($plik_nazwa);
  12. }

z AddAttachment tak samo

Ten post edytował Turson 20.03.2014, 11:11:52
Go to the top of the page
+Quote Post
fcppl
post 20.03.2014, 13:25:04
Post #12





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

Ostrzeżenie: (0%)
-----


wszystko działa idealnie. dzięki za pomoc.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 03:59