Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]$mail->AddAttachment, phpmail
Wykrywacz
post 14.03.2006, 13:48:11
Post #1





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


Jak ustawić w
  1. <?php
  2. $mail->AddAttachment 
  3. ?>
tak aby pobierał dowolne pliki narazie mam coś takiego
  1. <?php
  2. $mail->AddAttachment("$uploadfile"); 
  3. ?>
gdzie
  1. <?php
  2. $uploadfile
  3. ?>
to
  1. <?php
  2.  $uploadfile = basename($_FILES['plik']['name']);
  3. ?>


Przy wysyłaniu wywala mi błąd Stringa
Kod
Language string failed to load: file_accesslicense.txt


Jak zrobił bo niewiem defakto jak tego stringa zbudować, dla dowolnych rozszeżeń dla pliku.

Ten post edytował Wykrywacz 15.03.2006, 12:24:36
Go to the top of the page
+Quote Post
DeyV
post 14.03.2006, 14:21:37
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




sprawdź, czy podajesz poprawną ścieżkę do pliku w AddAttachment($uploadfile);

ps. zmiennych nie trzeba podawać w cudzysłowach.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
kszychu
post 14.03.2006, 15:01:37
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


  1. <?php
  2.  
  3. // nie tak
  4. $uploadfile = basename($_FILES['plik']['name']);
  5. // tylko tak, o ile dobrze pamiętam
  6. $uploadfile = basename($_FILES['plik']['tmp_name']);
  7.  
  8. ?>

Chodzi o to, że uploadowane pliki są zapisywane na serwerze w tymczasowej lokalizacji, zazwyczaj /tmp z losowo wygenerowaną nazwą. Nazwa ta, a ściślej pełna ścieżka do pliku trzymana jest właśnie w tmp_name. W name masz oryginalną nazwę pliku.
Wyświetl sobie print_r($_FILES) a dowiesz się więcej o strukturze tablicy $_FILES.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
Wykrywacz
post 14.03.2006, 15:08:26
Post #4





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


Już pokazuje pełne powiązanie
najpierw formularz:
  1. <input type="hidden" name="MAX_FILE_SIZE" value="300000" /><input TYPE="file" NAME="plik" >


Idzie to do php
  1. <?php
  2. $plik=$HTTP_POST_FILES['plik'];
  3. ?>

poczym wsadzam to
  1. <?php
  2. $uploaddir = '/archiwum/';
  3. $uploadfile = basename($_FILES['plik']['name']);
  4. $tmp_name = $_FILES["plik"]["tmp_name"][$key];
  5.  $name = $_FILES["plik"]["name"][$key];
  6.  move_uploaded_file($tmp_name, "data/$name");
  7. ?>


Poczym ląduje to w phpmail
$mail->AddAttachment($uploadfile);
Go to the top of the page
+Quote Post
kszychu
post 14.03.2006, 15:10:36
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Ale odrobina konsekwencji: jeśli używasz $_FILES to nie mieszaj do tego starej nazwy tej tablicy czyli $HTTP_POST_FILES.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
Wykrywacz
post 14.03.2006, 15:53:17
Post #6





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


Pozostałość po poprzedniej wersji z mail().

Dobra podmieniłem
  1. <?php
  2. $uploadfile = basename($_FILES['plik']['tmp_name']);
  3. $tmp_name = $_FILES["plik"]["tmp_name"][$key];
  4.  $name = $_FILES["plik"]["name"][$key];
  5. ?>


teraz wywala mi
Kod
Language string failed to load: file_accessphpbevajC
Go to the top of the page
+Quote Post
kszychu
post 14.03.2006, 16:20:29
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Ty wysyłasz tam kilka plików jednocześnie? Bo trójwymiarowa tablica $_FILES to właśnie sugeruje. Co oznacza $_FILES['plik']['name'][$key], co to za tajemniczy $key?


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
Athlan
post 14.03.2006, 16:22:39
Post #8





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Ja się wtrącę.

  1. <?php
  2. move_uploaded_file($tmp_name, "data/$name");
  3. ?>

a nie lepiej zastosować tutaj funkcję copy() ?


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
Go to the top of the page
+Quote Post
Wykrywacz
post 14.03.2006, 17:05:15
Post #9





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


A już się przyznaje. [$key]
Kopiowałem już nie pamiętam czy z jakiegoś przykładu od nospora czy od kogoś innego.

Niemam pojęcia do czego to jest naprawde jestem początkujący tongue.gif , ale staram się.

Teraz niemam szans sprawdzić funkcji copy(), bo mi kompa zabrali.

Czy trójwymiarowa Tablica tworzona jest przez to że są trzy
  1. <?php
  2. ["plik"]["tmp_name"][$key];
  3. ?>


Czy to nie o to chodzi. I czy dobrze że daje tu tablice 3 wymiarową jeżeli jest inaczej niż myśle wyżej.

Dobra już wiem, do czego to jest
  1. <?php
  2. ($tmp_name, "data/$name");
  3. ?>

jeżeli msię nie myle to jest właśnie to co trzeba wsadzić do
  1. <?php
  2. $mail->AddAttachment
  3. ?>

Tyle że jak wsadziłem tam wczesnie samo
  1. <?php
  2. $tmp_name
  3. ?>
czyli
  1. <?php
  2. $mail->AddAttachment("$tmp_name"); 
  3. ?>


To wywalało błąd
Kod
CODE  
Language string failed to load: file_accessl


Jak napisałem zbyt chaotycznie to powiedzcie jakoś to poprawie
Go to the top of the page
+Quote Post
nospor
post 14.03.2006, 17:09:11
Post #10





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




Cytat
a nie lepiej zastosować tutaj funkcję copy() ?
nie. ta funkcja sluzy do innego celu. do uplodu slluzy move_uploaded_file(). polecam manuala
http://pl.php.net/manual/pl/function.move-uploaded-file.php
ta funkcja sprawdza wiele rzeczy po drodze

Cytat
A już się przyznaje. [$key]
Kopiowałem już nie pamiętam czy z jakiegoś przykładu od nospora
Mnie prosze wto nie mieszac


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

"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
kszychu
post 14.03.2006, 17:14:21
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Usuń [$key], zostaw samo $_FILES['plik']['name'], analogicznie z tmp_name


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
Wykrywacz
post 15.03.2006, 09:56:57
Post #12





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


Zrobiłem
  1. <?php
  2. $uploadfile = basename($_FILES['plik']['name']);
  3. $tmp_name = $_FILES["plik"]["tmp_name"];
  4.  $name = $_FILES["plik"]["name"];
  5.  move_uploaded_file($tmp_name, $uploadfile);
  6. ?>

  1. <?php
  2.  $mail->AddAttachment($uploadfile);
  3. ?>


No i dalej wywala, usunołem [$key]
Jeżeli w zmienie $name na $tmp_name czyli
  1. <?php
  2. $uploadfile = basename($_FILES['plik']['tmp_name']);
  3. $tmp_name = $_FILES["plik"]["name"];
  4.  $name = $_FILES["plik"]["tmp_name"];
  5. ?>

to wywala mi znaczkami czyli
Kod
Language string failed to load: file_accessphplhefJF

Teoretycznie tak powinno być jeżeli sugerowac się tym co mówicie i co pisze w Manualu.
Ale przy poprzedniej wersji przynajmiej wywala błąd i pisze o jaki plik chodzi czyli
Kod
Language string failed to load: file_accesslicense.txt


zastanawiam się czy finalnie poprostu przy samej instrukcji $mail->AddAttachment jest dobrze bo wygląda tak:
  1. <?php
  2. $mail->AddAttachment($uploadfile);
  3. ?>
i tu mam wątpliwość czy poprostu czegoś nie brakuje bo we wszystkich manulach pokazują coś takiego
Kod
$mail->AddAttachment("/var/tmp/file.tar.gz");         // add attachments
$mail->AddAttachment("/tmp/image.jpg", "new.jpg");    // optional name

Mniej lub więcej. Ale tu mam różne pliki o różnych nazwach czyli nie na sztywno a wszędzie pokazują na sztywno....
Go to the top of the page
+Quote Post
kszychu
post 15.03.2006, 09:59:17
Post #13





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


A usuń basename() z linii
$uploadfile = basename($_FILES['plik']['tmp_name']);
Tam powinna być pełna ścieżka a nie sama nazwa pliku.

-----edit----------
Z tego co widzę, to składnia powinna być taka:
  1. <?php
  2.  
  3. $mail->AddAttachment($tmp_name, $name);
  4.  
  5. ?>


Spróbuj.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
Wykrywacz
post 15.03.2006, 12:26:54
Post #14





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


Mam jeszcze jedno zrobiłem sobie pętle
  1. <?php
  2. if ($mail->AddAttachment($tmp_name,$name) == 0)
  3. {
  4. echo '<br />' ;
  5. }
  6. else $mail->AddAttachment($tmp_name,$name);
  7. ?>


Poto że jeżeli w formularzu, nie zostanie załączony plik żeby nie wyświetlał komunikatu
Kod
Language string failed to load: file_access

Czyli innymi żeby olewał to w tym momenci.

Niestety wyświetla
Go to the top of the page
+Quote Post
nospor
post 15.03.2006, 12:35:40
Post #15





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




przed zalaczeniem pliku do maila, sprawdź, czy plik zostal zaloczony w formularzu i jesli tak, to dopiero potem zalączaj do maila. a jak sprawdzic czy plik zalączono do formularza?przyjrzyj sie tablicy $_FILES gdy nic nie zalaczysz i gdy zalaczysz i sam sie domysl winksmiley.jpg
  1. <?php
  2. print_r($_FILES);
  3. ?>


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

"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
Wykrywacz
post 15.03.2006, 13:24:06
Post #16





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


Hmm, nie wiem jak się do tego dorwać... Są jakieś różnica... rozwiąże to jak się podszkole jeszcze trochę. Narazie wywaliłem komunikat o błędach tongue.gif.

Mam chyba ostatnie pytanie(w tym temacie):
Formularz z którego wszystko idzie mam w
  1. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1250">

(jak daje na iso to krzaczy).

No i wszystko jest fajnie, ale po posłaniu tego przez skrypt na skrzynkę przychodzą mi zakrzaczone wiadomości , znaczy się nie koduje ł, ą,ś . ale ó koduje. Chyba na iso 1, jakoś robi.

Myślałem że jak formularz puści już informację zakodowane w windows-1250, ale widze że tego nie robi. Co oznacza że trzeba w skrypcie powtórzyć kodowanie.
Od nospora dostałem
  1. <?php
  2.  var $CharSet = "iso-8859-2";
  3. ?>

przekształciłem to grzecznie na to co mam w formularzu czyli
  1. <?php
  2.  var $CharSet = "windows-1250";
  3. ?>

niestety po w waleniu tego w kod:
  1. <?php
  2. var $CharSet = "windows-1250";
  3.  
  4. $nazwisko=$HTTP_POST_VARS['nazwisko'];
  5. .....(kolejne)
  6. ?>

Niechce mi maili puszczać, ba nawet nie pokazuje errora (do tego mam włączony tongue.gif)

Czy ja to źle wsadzam, czy trzeba to połączyć z jakim class bądz jak smile.gif ?
Go to the top of the page
+Quote Post
nospor
post 15.03.2006, 13:30:29
Post #17





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




Cytat
Od nospora dostałem
Kod php:

<?php
var $CharSet = "iso-8859-2";
?>
Jak tak to czytam jeszcze raz, to widzę że nie zrozumiales tego co ci podalem. ja ci sygnalizowalem, ze jest taka wlasciowosc w klasie PHPMailer, a nie ze ty taki kod masz wstawic... Tyle wyjaśnien odnośnie kalania mego imienia winksmiley.jpg
Jak ktos ma sily to niech koledze napisze, bo mnie juz wystarczająco wymęczyl smile.gif


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

"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
Wykrywacz
post 15.03.2006, 15:04:11
Post #18





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


OK zrozumiałem o co chodziło dla zainteresowanych
w
Kod
class.phpmailer.php

trzeba było zmienić
  1. <?php
  2.  var $CharSet = "iso-8859-1"
  3. ?>

na interesujące nas kodowanie w moim wypadku na
  1. <?php
  2. windows-1250
  3. ?>

nospor dzięki (przepraszam ze niechcące zniesławienie) winksmiley.jpg

Dla zainteresowanych, podaje poniżej jak wyglą skrypt, który wysyła treść formularza mailem + załącznik przy użyciu klasy phpmail. Może dzięki temu nie będą zadawane te same pytania.

  1. <?php
  2.  
  3. $nazwisko=$HTTP_POST_VARS['nazwisko'];
  4. $temat=$HTTP_POST_VARS['temat'];
  5.  
  6. $uploadfile = $_FILES['plik']['tmp_name'];
  7. $tmp_name = $_FILES["plik"]["tmp_name"];
  8.  $name = $_FILES["plik"]["name"];
  9.  move_uploaded_file($tmp_name, $name);
  10.  
  11.  
  12.  
  13. $temat = 'Jakiś temat';
  14. $zawartosc =  'Nazwisko: '.$nazwisko."\n"
  15. .''.$pauza."\n"
  16. .'Temat:'.$temat."\n";
  17.  
  18.  
  19.  
  20. include('class.phpmailer.php');
  21.  
  22. $mail = new PHPMailer();
  23.  
  24. $mail->From = "$nazwisko@rap.pl";
  25. $mail->FromName = $nazwisko;
  26. $mail->Host = 'nazwa.hosta';
  27.  
  28. $mail->AddAddress('adres.do');
  29.  
  30. $mail->AddAttachment($tmp_name,$name);
  31.  
  32.  $mail->Body = $zawartosc;
  33.  
  34. $mail->Subject = $temat;
  35. $mail->Mailer  = "smtp";
  36.  
  37. if ($mail->Send())
  38.  echo 'Formularz wysłany';
  39. else
  40. echo 'błąd wysyłania';
  41.  
  42. ?>


Ten post edytował Wykrywacz 16.03.2006, 09:50:45
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: 10.07.2025 - 05:47