Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]$mail->AddAttachment
Forum PHP.pl > Forum > Przedszkole
Wykrywacz
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.
DeyV
sprawdź, czy podajesz poprawną ścieżkę do pliku w AddAttachment($uploadfile);

ps. zmiennych nie trzeba podawać w cudzysłowach.
kszychu
  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.
Wykrywacz
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);
kszychu
Ale odrobina konsekwencji: jeśli używasz $_FILES to nie mieszaj do tego starej nazwy tej tablicy czyli $HTTP_POST_FILES.
Wykrywacz
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
kszychu
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?
Athlan
Ja się wtrącę.

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

a nie lepiej zastosować tutaj funkcję copy() ?
Wykrywacz
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
nospor
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
kszychu
Usuń [$key], zostaw samo $_FILES['plik']['name'], analogicznie z tmp_name
Wykrywacz
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....
kszychu
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.
Wykrywacz
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
nospor
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. ?>
Wykrywacz
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 ?
nospor
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
Wykrywacz
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. ?>
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.