Avatar billede dk-andersson Nybegynder
07. december 2010 - 14:40 Der er 9 kommentarer og
1 løsning

Gem $_FILES i session

Hey

Jeg tænkte på om det er muligt at gemme en $_FILES i en session og så vedhæfte den direkte der fra i en mail.

Det vil sige at jeg slet ikke upload den til min server men sender den direkte til en email i stedt for.???
Avatar billede jakobdo Ekspert
07. december 2010 - 14:55 #1
Den skal uploades direkte...
Men når filen er uploadet, så findes filen jo i: $_FILES['FILNAVN']['tmp_name'] og den kan du sagtens vedhæfte direkte i en email.

Der kan dog være nogle sikkerhedsindstillinger på din server, som gør du skal flytte filen først med move_uploaded_file()
Avatar billede dk-andersson Nybegynder
07. december 2010 - 15:08 #2
Kan jeg så gemme $_FILES['file']['tmp_name'] i en session og vedhæfte den i en mail senere "hvis min server tillader det" og ellers bruge funktion move_uploaded_file() senere??

men $_FILES['file']['tmp_name'] heder noget mærkeligt og har ikke jpg efter navn??
Avatar billede jakobdo Ekspert
07. december 2010 - 15:19 #3
Hvorfor vil du gemme filen i en session ?

Du kan få filens "fine" navn via: $_FILES['file']['name']
Avatar billede jakobdo Ekspert
07. december 2010 - 15:35 #4
Hent dette lib: http://swiftmailer.org/download

og test denne kode:

<?php
if(isset($_POST['send'])){
  require_once 'lib/swift_required.php';

  $transport = Swift_MailTransport::newInstance();
  $mailer = Swift_Mailer::newInstance($transport);

  //Create the message
  $message = Swift_Message::newInstance()

  //Give the message a subject
  ->setSubject('Min vedhæftning')

  //Set the From address with an associative array
  ->setFrom(array('jdo@example.com' => 'John Doe'))

  //Set the To addresses with an associative array
  ->setTo(array($_POST['mail']))

  //Give it a body
  ->setBody('Her er din fil!')

  //And optionally an alternative body
  ->addPart('<q>Her er din fil!</q>', 'text/html')

  //Optionally add any attachments
  ->attach(Swift_Attachment::fromPath($_FILES['file']['tmp_name'])->setFilename($_FILES['file']['name']));
  ;
  //Send the message
  $result = $mailer->send($message);
}
?>
<html>
<head>
<title>Mail Upload</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
Email: <input type="text" name="mail" /><br />
File: <input type="file" name="file" /><br />
<input type="submit" value="Send" name="send" />
</form>
</body>
</html>

PS: Den er ikke sikker, så den kan misbruges, men koden virker på min server. :o)
Avatar billede dk-andersson Nybegynder
07. december 2010 - 16:14 #5
Ja det er sådan noget i den stil jeg ønsker...

grunden til at jeg vil gemme tmp_name og name i session er at brugeren skal have mulighed for at tilføje flere filer inden der send en mail.

Og så til sidste tilføje alle filer som ligger i session. Kan dette virker eller skal jeg gemme den i en database eller??
Avatar billede dk-andersson Nybegynder
07. december 2010 - 16:41 #6
Og så er grunden til at jeg ikke vil upload filerne til server at jeg ikke ønsker at have en masse filer til at ligger på min server... derfor vil jeg finde en måde at undgå dette på ved at vente med at send mail til brugeren er helt færdig med at tilføj de filer som de ønsker at send til mig. Og så send dem.

Håber at dette giver mening
Avatar billede jakobdo Ekspert
07. december 2010 - 19:22 #7
Jeg ved desværre ikke om session er "stort" nok til at håndtere hele filer.
Filer vil jo hurtigt fylde "meget".
Jeg tror måske hellere du kunne gøre noget ala:

Når en bruger går i gang, så opret et temp dir, f.eks.

mkdir("dit_upload_dir/".session_id());

Upload filerne dertil.

Når emailen er sendt, så slet mappen.

Dermed vil du ikke have en masse filer liggende.
Du kunne også gøre det at du angiver et tidspunkt og så laver et oprydningsscript, som så sletter mapper ældre end 1-2 timer eller lign...
Avatar billede dk-andersson Nybegynder
07. december 2010 - 19:52 #8
Jeg er også kommet frem til at session ikke er helt stor nok så tænker at lave en tmp mappe med navnet session_id_time/

Hvis du vil have point så smid et svar
Avatar billede jakobdo Ekspert
07. december 2010 - 19:56 #9
Svar!
Avatar billede jakobdo Ekspert
07. december 2010 - 20:11 #10
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester