Avatar billede gizmo1234 Nybegynder
06. december 2003 - 11:49 Der er 20 kommentarer og
1 løsning

Mail form - Hjælp

Hej.
Jeg har brugt delfs.dk's mailform, men kan ikke få den til at virke. Her er koden:

<html>
<head>
  <LINK REL="StyleSheet" HREF="style.css" TYPE="text/css">
</head>
<body bgcolor="#95B0CA">
<font face="verdana" size="1" color="#333333">
<?php
// Hvis formen er submitted
if ($_GET['send']){
   
    // Definér $boundary
    // boundary er en unik streng der identifiserer vores email
    $boundary = uniqid("");
   
    // Hvis filtypen genkendes af browseren, sætter vi mime-typen til filtypen
    if ($_FILES['filen']['type']) {
        $mimeType = $_FILES['filen']['type'];
       
    // Ellers, sætter vi mime-type til ukendt
    } else {
        $mimeType =  "application/unknown";
    }
   
    // Læs filen ind i en variable
    $fil_var = fread(fopen($_FILES['filen']['tmp_name'],"r"),filesize($_FILES['filen']['tmp_name']));
   
    // Gør filen læsevenlig for email-klienten
    $fil_var = base64_encode($fil_var);
   
    // Split filkoden op i linier med 76 tegn i hver
    $fil_var = chunk_split($fil_var);
   
    // Følgende lille stykke klarer det meste mht. headers, der fortæller email-klienten hvad der er på vej

    // Vi sætter vores unikke streng ind her
    $body  = "\n--$boundary\n";
   
    // Vi fortæller at følgende stump er af typen text/plain samt
    // hvilket tegnsæt vi bruger
    $body .= "Content-type: text/plain; charset=iso-8859-1\n";
    $body .= "Content-transfer-encoding: 8bit\n\n";
   
    // Vi sætter body-texten ind her
    $body .= $_POST['body_text']."\n\n";
   
   
    // Slut på brødteksten
    $body .= "--$boundary\n";
   
    // Så er det filens tur
    // Vi fortæller lige mime-typen og filnavnet
    $body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
   
    // Fortæller at vi vil have filen hæftet ved - ikke direkte i mailen.
    // Vil du gerne have den direkte i mailen, ændres 'attachment' til 'inline'
    // Bemærk: Bl.a. OE viser _også_ filen i selve mailen selvom du angiver 'attachment'
    $body .= "Content-disposition: attachment; filename=".$_FILES['filen']['name']."\n";
   
    // Klienten skal have at vide at meddelelsen er encoded med base64
    $body .= "Content-transfer-encoding: base64\n\n";
   
    // Vi sætter filkoden ind
    $body .= $fil_var."\n\n";
   
    // Vi slutter af med den samme unikke streng som vi startede med
    $body .= "--$boundary--";
   
    // Vi definerer from-headeren
    $headers  = "From: ".$_POST['fra']."<x@z.com>\n";
   
    // Vi fortæller hvilken type indhold mailen indeholder
    // samt emailens unikke id-streng
    $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
   
    // Hvis mailen bliver sendt afsted problemfrit
    if (mail("dennis@laxy.dk", "Emnet", $body, $headers)) {
        echo "Mailen er sendt!";
       
    // Hvis ikke skriver vi lige en fejlmeddelelse
    } else {
        echo "Der opstod en fejl, og mailen blev ikke sendt!";
    }

// Hvis ikke formen er submitted, vis formen
} else {
    echo  "<form action='".basename($PHP_SELF)."?send=1' enctype='multipart/form-data' method='post'>\n";
    echo  "<table>\n";
    echo  "<tr><td>Fra:</td><td><input type='text' name='fra'></td></tr>\n";
    echo  "<tr><td>Fil:</td><td><input type='file' name='filen'></td></tr>\n";
    echo  "<tr><td>Body:</td><td><textarea name='body_text'></textarea></td></tr>\n";
    echo  "<tr><td></td><td><input type='submit' value='Send'></td></tr>\n";
    echo  "</table>\n</form>\n";
}
?>


Den sender en mail, hvor teksten som jeg skriver også står deri, og den finder også selve billedet som jeg sender med, men den kan ikke åbne den. Hvis man åbner den står der bare at der ikke er noget eksempel, og det tyder jo på at den ikke har sendt billedet ordentlig med, men jeg ved ikke hvordan jeg skal fixe det.

Den kommer med følgende fejl når jeg trykker send:

Warning: open_basedir restriction in effect. File is in wrong directory in /usr/www/laxy_dk/dennis/test/foto/txtfiler/txtbestilling.php on line 25

Warning: fopen("/tmp/phpfvtxNS", "r") - Operation not permitted in /usr/www/laxy_dk/dennis/test/foto/txtfiler/txtbestilling.php on line 25

Warning: Supplied argument is not a valid File-Handle resource in /usr/www/laxy_dk/dennis/test/foto/txtfiler/txtbestilling.php on line 25


Og linie 25 er:

    $fil_var = fread(fopen($_FILES['filen']['tmp_name'],"r"),filesize($_FILES['filen']['tmp_name']));

Hvad gør jeg forkert?
Avatar billede Slettet bruger
06. december 2003 - 15:13 #1
Brug move-uploaded-file() først, og så send resultatet derfra med mail. Der er opsat en sikkerhedsfunktion i PHP, så du ikke kan rode med filer uden for din egen mappe.

http://dk.php.net/manual/en/function.move-uploaded-file.php
Avatar billede gizmo1234 Nybegynder
06. december 2003 - 16:48 #2
Jeg er ikke helt skarp i php, så kan du ikke lige sætte det ind i min kode?
Avatar billede Slettet bruger
06. december 2003 - 17:39 #3
Lav en ny mappe til de uploadede filer. F.eks /usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp

Linie 25 skal erstattes med:

$upfil=$_FILES['filen']['tmp_name'];
$sendfil='/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/' . basename($_FILES['filen']['tmp_name'];

if (move_uploaded_file($upfil,$sendfil)) {
  $fil_var = file_get_contents($sendfil);
} else {
  $mimeType='text/plain';
  $fil_var='fejl i uploaded fil.'
}


Du kan naturligvis ændre else-blokken til at gøre noget andet.
Avatar billede gizmo1234 Nybegynder
06. december 2003 - 18:01 #4
Der er en parse error i linie 26...

<html>
<head>
  <LINK REL="StyleSheet" HREF="style.css" TYPE="text/css">
</head>
<body bgcolor="#95B0CA">
<font face="verdana" size="1" color="#333333">
<?php
// Hvis formen er submitted
if ($_GET['send']){
   
    // Definér $boundary
    // boundary er en unik streng der identifiserer vores email
    $boundary = uniqid("");
   
    // Hvis filtypen genkendes af browseren, sætter vi mime-typen til filtypen
    if ($_FILES['filen']['type']) {
        $mimeType = $_FILES['filen']['type'];
       
    // Ellers, sætter vi mime-type til ukendt
    } else {
        $mimeType =  "application/unknown";
    }
   
    // Læs filen ind i en variable
    $upfil=$_FILES['filen']['tmp_name'];
    $sendfil='/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/' . basename($_FILES['filen']['tmp_name'];

if (move_uploaded_file($upfil,$sendfil)) {
  $fil_var = file_get_contents($sendfil);
} else {
  $mimeType='text/plain';
  $fil_var='fejl i uploaded fil.'
}
   
    // Gør filen læsevenlig for email-klienten
    $fil_var = base64_encode($fil_var);
   
    // Split filkoden op i linier med 76 tegn i hver
    $fil_var = chunk_split($fil_var);
   
    // Følgende lille stykke klarer det meste mht. headers, der fortæller email-klienten hvad der er på vej

    // Vi sætter vores unikke streng ind her
    $body  = "\n--$boundary\n";
   
    // Vi fortæller at følgende stump er af typen text/plain samt
    // hvilket tegnsæt vi bruger
    $body .= "Content-type: text/plain; charset=iso-8859-1\n";
    $body .= "Content-transfer-encoding: 8bit\n\n";
   
    // Vi sætter body-texten ind her
    $body .= $_POST['body_text']."\n\n";
   
   
    // Slut på brødteksten
    $body .= "--$boundary\n";
   
    // Så er det filens tur
    // Vi fortæller lige mime-typen og filnavnet
    $body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
   
    // Fortæller at vi vil have filen hæftet ved - ikke direkte i mailen.
    // Vil du gerne have den direkte i mailen, ændres 'attachment' til 'inline'
    // Bemærk: Bl.a. OE viser _også_ filen i selve mailen selvom du angiver 'attachment'
    $body .= "Content-disposition: attachment; filename=".$_FILES['filen']['name']."\n";
   
    // Klienten skal have at vide at meddelelsen er encoded med base64
    $body .= "Content-transfer-encoding: base64\n\n";
   
    // Vi sætter filkoden ind
    $body .= $fil_var."\n\n";
   
    // Vi slutter af med den samme unikke streng som vi startede med
    $body .= "--$boundary--";
   
    // Vi definerer from-headeren
    $headers  = "From: ".$_POST['fra']."<x@z.com>\n";
   
    // Vi fortæller hvilken type indhold mailen indeholder
    // samt emailens unikke id-streng
    $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
   
    // Hvis mailen bliver sendt afsted problemfrit
    if (mail("dennis@laxy.dk", "Emnet", $body, $headers)) {
        echo "Mailen er sendt!";
       
    // Hvis ikke skriver vi lige en fejlmeddelelse
    } else {
        echo "Der opstod en fejl, og mailen blev ikke sendt!";
    }

// Hvis ikke formen er submitted, vis formen
} else {
    echo  "<form action='".basename($PHP_SELF)."?send=1' enctype='multipart/form-data' method='post'>\n";
    echo  "<table>\n";
    echo  "<tr><td>Fra:</td><td><input type='text' name='fra'></td></tr>\n";
    echo  "<tr><td>Fil:</td><td><input type='file' name='filen'></td></tr>\n";
    echo  "<tr><td>Body:</td><td><textarea name='body_text'></textarea></td></tr>\n";
    echo  "<tr><td></td><td><input type='submit' value='Send'></td></tr>\n";
    echo  "</table>\n</form>\n";
}
?>


Det her er linie 26:
$sendfil='/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/' . basename($_FILES['filen']['tmp_name'];
Avatar billede Slettet bruger
06. december 2003 - 18:17 #5
Ja, der mangler lige en ) før ;

$sendfil='/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/' . basename($_FILES['filen']['tmp_name']);
Avatar billede gizmo1234 Nybegynder
06. december 2003 - 18:31 #6
Ja, det hjalp, men nu er det på linje 93 den er gal.


<html>
<head>
  <LINK REL="StyleSheet" HREF="style.css" TYPE="text/css">
</head>
<body bgcolor="#95B0CA">
<font face="verdana" size="1" color="#333333">
<?php
// Hvis formen er submitted
if ($_GET['send']){
   
    // Definér $boundary
    // boundary er en unik streng der identifiserer vores email
    $boundary = uniqid("");
   
    // Hvis filtypen genkendes af browseren, sætter vi mime-typen til filtypen
    if ($_FILES['filen']['type']) {
        $mimeType = $_FILES['filen']['type'];
       
    // Ellers, sætter vi mime-type til ukendt
    } else {
        $mimeType =  "application/unknown";
    }
   
    // Læs filen ind i en variable
    $upfil=$_FILES['filen']['tmp_name'];
    $sendfil='/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/' . basename($_FILES['filen']['tmp_name']);

if (move_uploaded_file($upfil,$sendfil)) {
  $fil_var = file_get_contents($sendfil);
} else {
  $mimeType='text/plain';
  $fil_var='fejl i uploaded fil.';

   
    // Gør filen læsevenlig for email-klienten
    $fil_var = base64_encode($fil_var);
   
    // Split filkoden op i linier med 76 tegn i hver
    $fil_var = chunk_split($fil_var);
   
    // Følgende lille stykke klarer det meste mht. headers, der fortæller email-klienten hvad der er på vej

    // Vi sætter vores unikke streng ind her
    $body  = "\n--$boundary\n";
   
    // Vi fortæller at følgende stump er af typen text/plain samt
    // hvilket tegnsæt vi bruger
    $body .= "Content-type: text/plain; charset=iso-8859-1\n";
    $body .= "Content-transfer-encoding: 8bit\n\n";
   
    // Vi sætter body-texten ind her
    $body .= $_POST['body_text']."\n\n";
   
   
    // Slut på brødteksten
    $body .= "--$boundary\n";
   
    // Så er det filens tur
    // Vi fortæller lige mime-typen og filnavnet
    $body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
   
    // Fortæller at vi vil have filen hæftet ved - ikke direkte i mailen.
    // Vil du gerne have den direkte i mailen, ændres 'attachment' til 'inline'
    // Bemærk: Bl.a. OE viser _også_ filen i selve mailen selvom du angiver 'attachment'
    $body .= "Content-disposition: attachment; filename=".$_FILES['filen']['name']."\n";
   
    // Klienten skal have at vide at meddelelsen er encoded med base64
    $body .= "Content-transfer-encoding: base64\n\n";
   
    // Vi sætter filkoden ind
    $body .= $fil_var."\n\n";
   
    // Vi slutter af med den samme unikke streng som vi startede med
    $body .= "--$boundary--";
   
    // Vi definerer from-headeren
    $headers  = "From: ".$_POST['fra']."<x@z.com>\n";
   
    // Vi fortæller hvilken type indhold mailen indeholder
    // samt emailens unikke id-streng
    $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
   
    // Hvis mailen bliver sendt afsted problemfrit
    if (mail("dennis@laxy.dk", "Emnet", $body, $headers)) {
        echo "Mailen er sendt!";
       
    // Hvis ikke skriver vi lige en fejlmeddelelse
    } else {
        echo "Der opstod en fejl, og mailen blev ikke sendt!";
    }

// Hvis ikke formen er submitted, vis formen
else {
    echo  "<form action='".basename($PHP_SELF)."?send=1' enctype='multipart/form-data' method='post'>\n";
    echo  "<table>\n";
    echo  "<tr><td>Fra:</td><td><input type='text' name='fra'></td></tr>\n";
    echo  "<tr><td>Fil:</td><td><input type='file' name='filen'></td></tr>\n";
    echo  "<tr><td>Body:</td><td><textarea name='body_text'></textarea></td></tr>\n";
    echo  "<tr><td></td><td><input type='submit' value='Send'></td></tr>\n";
    echo  "</table>\n</form>\n";
}
?>



else { Er linie 93
Avatar billede Slettet bruger
06. december 2003 - 19:00 #7
Du mangler den sidste } i de linier, jeg sagde, du skulle indsætte ved linie 25.
Avatar billede gizmo1234 Nybegynder
06. december 2003 - 19:51 #8
Jamen så kommer den bare med en ny fejl.

<html>
<head>
  <LINK REL="StyleSheet" HREF="style.css" TYPE="text/css">
</head>
<body bgcolor="#95B0CA">
<font face="verdana" size="1" color="#333333">
<?php
// Hvis formen er submitted
if ($_GET['send']){
   
    // Definér $boundary
    // boundary er en unik streng der identifiserer vores email
    $boundary = uniqid("");
   
    // Hvis filtypen genkendes af browseren, sætter vi mime-typen til filtypen
    if ($_FILES['filen']['type']) {
        $mimeType = $_FILES['filen']['type'];
       
    // Ellers, sætter vi mime-type til ukendt
    } else {
        $mimeType =  "application/unknown";
    }
   
    // Læs filen ind i en variable
    $upfil=$_FILES['filen']['tmp_name'];
$sendfil='/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/' . basename($_FILES['filen']['tmp_name']);

if (move_uploaded_file($upfil,$sendfil)) {
  $fil_var = file_get_contents($sendfil);
} else {
  $mimeType='text/plain';
  $fil_var='fejl i uploaded fil.'
}
   
    // Gør filen læsevenlig for email-klienten
    $fil_var = base64_encode($fil_var);
   
    // Split filkoden op i linier med 76 tegn i hver
    $fil_var = chunk_split($fil_var);
   
    // Følgende lille stykke klarer det meste mht. headers, der fortæller email-klienten hvad der er

på vej

    // Vi sætter vores unikke streng ind her
    $body  = "\n--$boundary\n";
   
    // Vi fortæller at følgende stump er af typen text/plain samt
    // hvilket tegnsæt vi bruger
    $body .= "Content-type: text/plain; charset=iso-8859-1\n";
    $body .= "Content-transfer-encoding: 8bit\n\n";
   
    // Vi sætter body-texten ind her
    $body .= $_POST['body_text']."\n\n";
   
   
    // Slut på brødteksten
    $body .= "--$boundary\n";
   
    // Så er det filens tur
    // Vi fortæller lige mime-typen og filnavnet
    $body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
   
    // Fortæller at vi vil have filen hæftet ved - ikke direkte i mailen.
    // Vil du gerne have den direkte i mailen, ændres 'attachment' til 'inline'
    // Bemærk: Bl.a. OE viser _også_ filen i selve mailen selvom du angiver 'attachment'
    $body .= "Content-disposition: attachment; filename=".$_FILES['filen']['name']."\n";
   
    // Klienten skal have at vide at meddelelsen er encoded med base64
    $body .= "Content-transfer-encoding: base64\n\n";
   
    // Vi sætter filkoden ind
    $body .= $fil_var."\n\n";
   
    // Vi slutter af med den samme unikke streng som vi startede med
    $body .= "--$boundary--";
   
    // Vi definerer from-headeren
    $headers  = "From: ".$_POST['fra']."<x@z.com>\n";
   
    // Vi fortæller hvilken type indhold mailen indeholder
    // samt emailens unikke id-streng
    $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
   
    // Hvis mailen bliver sendt afsted problemfrit
    if (mail("dennis@laxy.dk", "Emnet", $body, $headers)) {
        echo "Mailen er sendt!";
       
    // Hvis ikke skriver vi lige en fejlmeddelelse
    } else {
        echo "Der opstod en fejl, og mailen blev ikke sendt!";
    }

// Hvis ikke formen er submitted, vis formen
else {
    echo  "<form action='".basename($PHP_SELF)."?send=1' enctype='multipart/form-data'

method='post'>\n";
    echo  "<table>\n";
    echo  "<tr><td>Fra:</td><td><input type='text' name='fra'></td></tr>\n";
    echo  "<tr><td>Fil:</td><td><input type='file' name='filen'></td></tr>\n";
    echo  "<tr><td>Body:</td><td><textarea name='body_text'></textarea></td></tr>\n";
    echo  "<tr><td></td><td><input type='submit' value='Send'></td></tr>\n";
    echo  "</table>\n</form>\n";
}
?>


På linie 33 som er:  $fil_var='fejl i uploaded fil.'
Avatar billede Slettet bruger
06. december 2003 - 20:56 #9
Ja, for du har lige slettet det semikolon der stod i slutningen af den linie. Det havde du ellers med i forrige indlæg.
Avatar billede gizmo1234 Nybegynder
07. december 2003 - 00:42 #10
Ja, nu virker det, men jeg får stadig ikke billedet med, så det er faktisk som da vi startede...
Jeg fatter det ikke, jeg har da set mange andre forms gøre det...

Her er koden der kan vise selve formen, og sender en mail med den tekst man skriver, men ikke sender billedet med:

<html>
<head>
  <LINK REL="StyleSheet" HREF="style.css" TYPE="text/css">
</head>
<body bgcolor="#95B0CA">
<font face="verdana" size="1" color="#333333">
<?php
// Hvis formen er submitted
if ($_GET['send']){
   
    // Definér $boundary
    // boundary er en unik streng der identifiserer vores email
    $boundary = uniqid("");
   
    // Hvis filtypen genkendes af browseren, sætter vi mime-typen til filtypen
    if ($_FILES['filen']['type']) {
        $mimeType = $_FILES['filen']['type'];
       
    // Ellers, sætter vi mime-type til ukendt
    } else {
        $mimeType =  "application/unknown";
    }
   
    // Læs filen ind i en variable
    $upfil=$_FILES['filen']['tmp_name'];
$sendfil='/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/' . basename($_FILES['filen']['tmp_name']);

if (move_uploaded_file($upfil,$sendfil)) {
  $fil_var = file_get_contents($sendfil);
} else {
  $mimeType='text/plain';
  $fil_var='fejl i uploaded fil.';
}
   
    // Gør filen læsevenlig for email-klienten
    $fil_var = base64_encode($fil_var);
   
    // Split filkoden op i linier med 76 tegn i hver
    $fil_var = chunk_split($fil_var);
   
    // Følgende lille stykke klarer det meste mht. headers, der fortæller email-klienten hvad der er på vej

    // Vi sætter vores unikke streng ind her
    $body  = "\n--$boundary\n";
   
    // Vi fortæller at følgende stump er af typen text/plain samt
    // hvilket tegnsæt vi bruger
    $body .= "Content-type: text/plain; charset=iso-8859-1\n";
    $body .= "Content-transfer-encoding: 8bit\n\n";
   
    // Vi sætter body-texten ind her
    $body .= $_POST['body_text']."\n\n";
   
   
    // Slut på brødteksten
    $body .= "--$boundary\n";
   
    // Så er det filens tur
    // Vi fortæller lige mime-typen og filnavnet
    $body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
   
    // Fortæller at vi vil have filen hæftet ved - ikke direkte i mailen.
    // Vil du gerne have den direkte i mailen, ændres 'attachment' til 'inline'
    // Bemærk: Bl.a. OE viser _også_ filen i selve mailen selvom du angiver 'attachment'
    $body .= "Content-disposition: attachment; filename=".$_FILES['filen']['name']."\n";
   
    // Klienten skal have at vide at meddelelsen er encoded med base64
    $body .= "Content-transfer-encoding: base64\n\n";
   
    // Vi sætter filkoden ind
    $body .= $fil_var."\n\n";
   
    // Vi slutter af med den samme unikke streng som vi startede med
    $body .= "--$boundary--";
   
    // Vi definerer from-headeren
    $headers  = "From: ".$_POST['fra']."<x@z.com>\n";
   
    // Vi fortæller hvilken type indhold mailen indeholder
    // samt emailens unikke id-streng
    $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
   
    // Hvis mailen bliver sendt afsted problemfrit
    if (mail("dennis@laxy.dk", "Emnet", $body, $headers)) {
        echo "Mailen er sendt!";
       
    // Hvis ikke skriver vi lige en fejlmeddelelse
    } else {
        echo "Der opstod en fejl, og mailen blev ikke sendt!";
    }

// Hvis ikke formen er submitted, vis formen
} else {
    echo  "<form action='".basename($PHP_SELF)."?send=1' enctype='multipart/form-data' method='post'>\n";
    echo  "<table>\n";
    echo  "<tr><td>Fra:</td><td><input type='text' name='fra'></td></tr>\n";
    echo  "<tr><td>Fil:</td><td><input type='file' name='filen'></td></tr>\n";
    echo  "<tr><td>Body:</td><td><textarea name='body_text'></textarea></td></tr>\n";
    echo  "<tr><td></td><td><input type='submit' value='Send'></td></tr>\n";
    echo  "</table>\n</form>\n";
}
?>
Avatar billede Slettet bruger
07. december 2003 - 04:27 #11
Sender den beskeden "Fejl i uploaded fil" med som attachment i stedet for?

Kommer den med nogen fejlmeddelelser?
Avatar billede gizmo1234 Nybegynder
07. december 2003 - 19:00 #12
Ja, den kommer med denne fejl:

Warning: Unable to create '/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/phpRPthfY': No such file or directory in /usr/www/laxy_dk/dennis/test/foto/txtfiler/txtbestilling.php on line 28

Warning: Unable to move '/tmp/phpRPthfY' to '/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/phpRPthfY' in /usr/www/laxy_dk/dennis/test/foto/txtfiler/txtbestilling.php on line 28
Mailen er sendt!

Linie 28 er: if (move_uploaded_file($upfil,$sendfil)) {
Avatar billede Slettet bruger
07. december 2003 - 20:37 #13
Jeg sagde jo:
Lav en ny mappe til de uploadede filer. F.eks /usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp

Ellers virker rettelsen jeg gav dig ikke.

Du kan godt lave mappen med et andet navn, men så skal du rette i linien, hvor $sendfil bliver defineret.
Avatar billede gizmo1234 Nybegynder
07. december 2003 - 22:36 #14
Det har jeg nu også gjort. Jeg har lavet en mappe der hedder tmp som ligger i mappen dennis.laxy.dk/test/foto/txtfiler/, og jeg har prøvet at chmode den til 766, men den kommer alligevel med fejlen:

Warning: Unable to create '/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/phpQ9KBsD': Permission denied in /usr/www/laxy_dk/dennis/test/foto/txtfiler/txtbestilling.php on line 28

Warning: Unable to move '/tmp/phpQ9KBsD' to '/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/phpQ9KBsD' in /usr/www/laxy_dk/dennis/test/foto/txtfiler/txtbestilling.php on line 28
Mailen er sendt!
Avatar billede Slettet bruger
08. december 2003 - 01:15 #15
Prøv at chmode den til 777.

x-bitten på et dir betyder om man kan cd ind i det dir.
Avatar billede gizmo1234 Nybegynder
08. december 2003 - 07:32 #16
Det hjalp lidt, for nu ligger der faktisk nogle filer i tmp mappen når man sender det... De hedder php og så en masse underligt. Men nu kommer den med en ny fejl:

Fatal error: Call to undefined function: file_get_contents() in /usr/www/laxy_dk/dennis/test/foto/txtfiler/txtbestilling.php on line 29


Linie 29:  $fil_var = file_get_contents($sendfil);

Jeg har btw. lige sat points op til 120...
Avatar billede Slettet bruger
08. december 2003 - 14:30 #17
Så er vi nødt til at bruge en anden måde at hente filen ind. file_get_contents() kom først med i PHP 4.3.

Prøv denne:

$fil_var = fread(fopen($sendfil,filesize($sendfil)));
Avatar billede gizmo1234 Nybegynder
08. december 2003 - 14:45 #18
Nu kommer den med følgende fejl:

Warning: fopen("/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/php3y1f6K", "8621") - Invalid argument in /usr/www/laxy_dk/dennis/test/foto/txtfiler/txtbestilling.php on line 29

Warning: Wrong parameter count for fread() in /usr/www/laxy_dk/dennis/test/foto/txtfiler/txtbestilling.php on line 29
Mailen er sendt!

Her er hele koden, så du kan se det i en helhed:

<html>
<head>
  <LINK REL="StyleSheet" HREF="style.css" TYPE="text/css">
</head>
<body bgcolor="#95B0CA">
<font face="verdana" size="1" color="#333333">
<?php
// Hvis formen er submitted
if ($_GET['send']){
   
    // Definér $boundary
    // boundary er en unik streng der identifiserer vores email
    $boundary = uniqid("");
   
    // Hvis filtypen genkendes af browseren, sætter vi mime-typen til filtypen
    if ($_FILES['filen']['type']) {
        $mimeType = $_FILES['filen']['type'];
       
    // Ellers, sætter vi mime-type til ukendt
    } else {
        $mimeType =  "application/unknown";
    }
   
    // Læs filen ind i en variable
    $upfil=$_FILES['filen']['tmp_name'];
$sendfil='/usr/www/laxy_dk/dennis/test/foto/txtfiler/tmp/' . basename($_FILES['filen']['tmp_name']);

if (move_uploaded_file($upfil,$sendfil)) {
$fil_var = fread(fopen($sendfil,filesize($sendfil)));
} else {
  $mimeType='text/plain';
  $fil_var='fejl i uploaded fil.';
}
   
    // Gør filen læsevenlig for email-klienten
    $fil_var = base64_encode($fil_var);
   
    // Split filkoden op i linier med 76 tegn i hver
    $fil_var = chunk_split($fil_var);
   
    // Følgende lille stykke klarer det meste mht. headers, der fortæller email-klienten hvad der er på vej

    // Vi sætter vores unikke streng ind her
    $body  = "\n--$boundary\n";
   
    // Vi fortæller at følgende stump er af typen text/plain samt
    // hvilket tegnsæt vi bruger
    $body .= "Content-type: text/plain; charset=iso-8859-1\n";
    $body .= "Content-transfer-encoding: 8bit\n\n";
   
    // Vi sætter body-texten ind her
    $body .= $_POST['body_text']."\n\n";
   
   
    // Slut på brødteksten
    $body .= "--$boundary\n";
   
    // Så er det filens tur
    // Vi fortæller lige mime-typen og filnavnet
    $body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
   
    // Fortæller at vi vil have filen hæftet ved - ikke direkte i mailen.
    // Vil du gerne have den direkte i mailen, ændres 'attachment' til 'inline'
    // Bemærk: Bl.a. OE viser _også_ filen i selve mailen selvom du angiver 'attachment'
    $body .= "Content-disposition: attachment; filename=".$_FILES['filen']['name']."\n";
   
    // Klienten skal have at vide at meddelelsen er encoded med base64
    $body .= "Content-transfer-encoding: base64\n\n";
   
    // Vi sætter filkoden ind
    $body .= $fil_var."\n\n";
   
    // Vi slutter af med den samme unikke streng som vi startede med
    $body .= "--$boundary--";
   
    // Vi definerer from-headeren
    $headers  = "From: ".$_POST['fra']."<x@z.com>\n";
   
    // Vi fortæller hvilken type indhold mailen indeholder
    // samt emailens unikke id-streng
    $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
   
    // Hvis mailen bliver sendt afsted problemfrit
    if (mail("dennis@laxy.dk", "Emnet", $body, $headers)) {
        echo "Mailen er sendt!";
       
    // Hvis ikke skriver vi lige en fejlmeddelelse
    } else {
        echo "Der opstod en fejl, og mailen blev ikke sendt!";
    }

// Hvis ikke formen er submitted, vis formen
} else {
    echo  "<form action='".basename($PHP_SELF)."?send=1' enctype='multipart/form-data' method='post'>\n";
    echo  "<table>\n";
    echo  "<tr><td>Fra:</td><td><input type='text' name='fra'></td></tr>\n";
    echo  "<tr><td>Fil:</td><td><input type='file' name='filen'></td></tr>\n";
    echo  "<tr><td>Body:</td><td><textarea name='body_text'></textarea></td></tr>\n";
    echo  "<tr><td></td><td><input type='submit' value='Send'></td></tr>\n";
    echo  "</table>\n</form>\n";
}
?>
Avatar billede Slettet bruger
08. december 2003 - 14:59 #19
Jeg havde fået placeret ()-erne forkert og glemt 'r' til fopen.

Her er en erstatning for linie 29 med lidt bedre fejlhåndtering.

$filehandle=fopen($sendfil,'r');
if ($filehandle){
  $fil_var = fread($filehandle,filesize($sendfil));
} else {
  echo "Kunne ikke åbne filen!";
}
Avatar billede gizmo1234 Nybegynder
08. december 2003 - 15:56 #20
Jada, så virker det!
Mange tusinde tak for hjælpen Sandbox! :)
Avatar billede Slettet bruger
08. december 2003 - 18:09 #21
Selv tak.

Det var godt, at jeg fik en undskyldning til at lege lidt med programmering af filuploads, for det har jeg ikke arbejdet med før. Så jeg lærte selv en del af det her. ;-)
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