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>
上記のコードも追加すると問題は同じです。アップロードされたファイルは内容を読み取るが、ダウンロードされたファイルは次のように内容を読み取る。 UEsDBBQABgAIAAAAIQDfpNJsWgEAACAFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA – user6582683
あなたはBASE64でファイルをエンコードしたように、私はここで不足している唯一のことは、base64でDECODE –
だと思いますし、コースを外れ、あなたはchunk_splitを元に戻す必要がある。私はそれdownload.phpにBASE64デコードを使用している場合は、新しい行 –