2016-08-03 6 views
0

ファイルをアップロードしてアップロードしたファイルを添付ファイルとしてメールに送信し、ウェブページからファイルをダウンロードする必要があります。ファイルの内容は、mediumblobデータ型のデータベースに格納されます。ファイルをアップロードして添付ファイルとして送信すると正常に動作します。私がファイルをダウンロードするとき、内容は読み込み可能な形式ではありません。ここでsendfileファイルを添付ファイルとしてアップロードし、ファイルをダウンロードします

PD9waHANCg0KLy8gTWFrZSBhIE15U1FMIENvbm5lY3Rpb24NCiRob3N0PSJUZWthbGFkYi5kYi45 
MTM1MTgyLmhvc3RlZHJlc291cmNlLmNvbSI7DQokdXNlcj0iVGVrYWxhZGIiOw0KJHBhc3N3b3Jk 

は、私は問題がすでにセットのヘッダにあると思い

<?php 
session_start(); 
// Read POST request params into global vars 
include_once "db.php"; 

$name1=mysql_real_escape_string(stripslashes($_POST['name1'])); 
$subject1=mysql_real_escape_string(stripslashes($_POST['subject1'])); 
$email1=$_POST['email1']; 
$phone=$_POST['phone']; 
$username=mysql_real_escape_string($_SESSION['sess_user4']); 
    $to = "[email protected]"; 
$from=$_POST['email1']; 
$fileatt  = $_FILES['fileatt']['tmp_name']; 
$fileatt_type = $_FILES['fileatt']['type']; 
$fileatt_name = mysql_real_escape_string($_FILES['fileatt']['name']); 
$fileatt_size = $_FILES['fileatt']['size']; 
$aa=filesize($fileatt); 
$headers = "From: $from"; 
if (is_uploaded_file($fileatt)) { 
    // Read the file to be attached ('rb' = read binary) 
$name1=mysql_real_escape_string(stripslashes($_POST['name1'])); 
    $file = fopen($fileatt,'r'); 
    $content = fread($file,filesize($fileatt)); 


fclose($file); 
$message="Name:$name1\n\n 
      Email:$email1\n 
      Subject:$subject1\n 
      Phone No:$phone"; 
    // Generate a boundary string 
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 


    // Add the headers for a file attachment 
    $headers .= "\nMIME-Version: 1.0\n" . 
       "Content-Type: multipart/mixed;\n" . 
       " boundary=\"{$mime_boundary}\""; 

    // Add a multipart boundary above the plain message 
    $message = "This is a multi-part message in MIME format.\n\n" . 
      "--{$mime_boundary}\n" . 
      "Content-Type: text/html; charset=\"iso-8859-1\"\n" . 
      "Content-Transfer-Encoding: 7bit\n\n" . 
      stripslashes($message). "\n\n"; 

    // Base64 encode the file data 
    $content = chunk_split(base64_encode($content)); 

    // Add file attachment to the message 
    $message .= "--{$mime_boundary}\n" . 
       "Content-Type: {$fileatt_type};\n" . 
       " name=\"{$fileatt_name}\"\n" . 
       //"Content-Disposition: attachment;\n" . 
       //" filename=\"{$fileatt_name}\"\n" . 
       "Content-Transfer-Encoding: base64\n\n" . 
       $content . "\n\n" . 
       "--{$mime_boundary}--\n"; 

} 

// Send the message 
$ok = @mail($to, $subject, $message, $headers); 
if ($ok) { 
    echo "<script>window.open('display.php','_self')</script>"; 
} else { 
    echo "<p>Mail could not be sent. Sorry!</p>"; 
} 
$query = "INSERT INTO register (name,type,size,content,name1,email1,subject1,phone,username) VALUES ('$fileatt_name','$fileatt_type','$fileatt_size','$content','$name1','$email1','$subject1','$phone','$username')"; 

mysql_query($query) or die('Error, query failed'); 

?> 

download.php

<html> 
     <head> 
      <title>Download File From MySQL Database</title> 
      <meta http-equiv="Content-Type" content="text/html; 
        charset=iso-8859-1"> 
     </head> 
     <body> 
     <?php 
    include_once "db.php"; 
    if(isset($_GET['id'])) { // if id is set then get the file with the id from database 
    $id = $_GET['id']; 
$content = chunk_split(base64_decode($content)); 
    $query = "SELECT name, type, size, content FROM register WHERE id = $id"; 
    $result = mysql_query($query) or die('Error, query failed'); 
    list($name, $type, $size, $content) = mysql_fetch_array($result); 
    header("Content-length: $size"); 
    header("Content-type: $type"); 
    header("Content-Disposition: attachment; filename=$name"); 
    echo $content; exit; 
    } 
    $query = "SELECT id, name FROM register"; 
    $result = mysql_query($query) or die('Error, query failed'); 
    if(mysql_num_rows($result) == 0) 
    { 
    echo "Database is empty"; 
    } 
    else 
    { 
    while(list($id, $name) = mysql_fetch_array($result)) 
    { 
    ?> 
    <a href="download.php?id=<?php echo $id;?>"><?php echo $name; ?></a> 
    <?php 
    } 
    } 
    ?> 
    </body> 
    </html> 

答えて

0

upload.phpコード

あると内容が表示されます。 このコードを試してください:

<?php 
include_once "db.php"; 
if (isset($_GET['id'])) { // if id is set then get the file with the id from database 
    $id = $_GET['id']; 
    $query = "SELECT name, type, size, content FROM register WHERE id = $id"; 
    $result = mysql_query($query) or die('Error, query failed'); 
    list($name, $type, $size, $content) = mysql_fetch_array($result); 
    header("Content-length: $size"); 
    header("Content-type: $type"); 
    header("Content-Disposition: attachment; filename=$name"); 
    echo base64_decode(str_replace("\n", "", $content)); 
    exit; 
} else { 
?> 
<html> 
<head> 
    <title>Download File From MySQL Database</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
</head> 
<body> 
<?php 
$query = "SELECT id, name FROM register"; 
$result = mysql_query($query) or die('Error, query failed'); 
if (mysql_num_rows($result) == 0) { 
    echo "Database is empty"; 
} 
else { 
    while (list($id, $name) = mysql_fetch_array($result)) { 
     ?> 
     <a href="download.php?id=<?php echo $id; ?>"><?php echo $name; ?></a> 
     <?php 
    } 
} 
} 
?> 
</body> 
</html> 
+0

上記のコードも追加すると問題は同じです。アップロードされたファイルは内容を読み取るが、ダウンロードされたファイルは次のように内容を読み取る。 UEsDBBQABgAIAAAAIQDfpNJsWgEAACAFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA – user6582683

+0

あなたはBASE64でファイルをエンコードしたように、私はここで不足している唯一のことは、base64でDECODE –

+0

だと思いますし、コースを外れ、あなたはchunk_splitを元に戻す必要がある。私はそれdownload.phpにBASE64デコードを使用している場合は、新しい行 –

関連する問題