質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4548閲覧

phpのフォームで添付ファイルが開けない

nosonosolife

総合スコア42

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/10/25 08:55

http://qiita.com/KanaeYou/items/b096f8be1f5bbc5448fa
上記のサイトを参考にして、画像やテキストファイルが送信できるフォームのphpを作成しているのですが、
メールに添付したファイルが破損しているのか開けない状態になってしまいます。
原因は何でしょうか。ご回答よろしくお願いいたします。

PHP

1<?php 2// SETUP 3mb_language( "japanese" ); 4mb_internal_encoding( "UTF-8" ); 5date_default_timezone_set('Asia/Tokyo'); 6 7$field_penname = $_POST['Penname']; 8$field_pref = $_POST['Pref']; 9$field_message = $_POST['Message']; 10$date = date("Y/m/d D H:i:s"); 11 12$to_email = 'メールアドレス'; 13$from_email= 'メールアドレス'; 14$from_name = 'メールアドレス'; 15$subject = '投稿通知'; 16 17$body = '[投稿日時] '.$date."\n"; 18$body .= 'ペンネーム : '.$field_penname."\n"; 19$body .= '都道府県 : '.$field_pref."\n"; 20$body .= "\n"; 21$body .= '■メッセージ'."\n"; 22$body .= $field_message."\n"; 23 24$attach_file = $_FILES['upfile']['name']; 25 26// send the email 27if (isset($_POST["Penname"])) { 28sendmail_jpn($to_email, $subject, $body, $from_email,$from_name, $attach_file); 29} 30sleep(1); 31 32echo "送信完了"; 33 34//関数----------------------------------- 35 36function sendmail_jpn($to, $subject, $message, $from_email,$from_name, $filepath) 37{ 38$file_ext = pathinfo($filepath, PATHINFO_EXTENSION); 39 if ($file_ext == 'pdf') { 40 $mime_type = 'application/pdf'; 41 } elseif ($file_ext == 'jpg' || $file_ext == 'jpeg') { 42 $mime_type = 'image/jpeg'; 43 } elseif ($file_ext == 'gif') { 44 $mime_type = 'image/gif'; 45 } elseif ($file_ext == 'png') { 46 $mime_type = 'image/png'; 47 } else { 48 $mime_type = 'application/octet-stream'; 49 } 50 51// 添付ファイルのエンコード 52$filename = basename( $filepath ); 53 54// マルチパートなので、パートの区切り文字列を指定 55$boundary = '----=_Boundary_' . uniqid(rand(1000,9999) . '_') . '_'; 56 57// 件名のエンコード 58$subject = mb_convert_encoding($subject, 'ISO-2022-JP', 'UTF-8'); 59$subject = mb_encode_mimeheader_ex($subject); 60 61// 本文のエンコード 62$message = mb_convert_encoding($message, 'ISO-2022-JP', 'UTF-8'); 63 64// toをエンコード 65// $to = mb_convert_encoding($mail['to']['name'], "SJIS", "UTF-8"); 66$to = "=?ISO-2022-JP?B?" . base64_encode($to) . '?= <' . $to . '>'; 67 68// fromをエンコード 69// $from = mb_convert_encoding($mail['from']['name'], "SJIS", "UTF-8"); 70$from = "=?ISO-2022-JP?B?" . base64_encode($from_name) . '?= <' . $from_email . '>'; 71 72// 添付ファイルのエンコード 73$filename = mb_convert_encoding($filename, 'ISO-2022-JP', 'UTF-8'); 74$filename = "=?ISO-2022-JP?B?" . base64_encode($filename) . "?="; 75 76// ヘッダーの指定 77$head = ""; 78$head .= "From: {$from}\n"; 79$head .= "MIME-Version: 1.0\n"; 80$head .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"\n"; 81$head .= "Content-Transfer-Encoding: 7bit"; 82 83$body = ""; 84 85// 本文 86$body .= "--{$boundary}\n"; 87$body .= "Content-Type: text/plain; charset=ISO-2022-JP;" . 88"Content-Transfer-Encoding: 7bit\n"; 89$body .= "\n"; 90$body .= "{$message}\n"; 91$body .= "\n"; 92 93// 添付ファイルの処理 94$body .= "--{$boundary}\n"; 95$body .= "Content-Type: {$mime_type}; name=\"{$filename}\"\n" . 96"Content-Transfer-Encoding: base64\n" . 97"Content-Disposition: attachment; filename=\"{$filename}\"\n"; 98$body .= "\n"; 99 100//$fp = fopen( $filepath, "r" ) or die("Error on mailing. (attachment file cannot open)"); 101//$contents = fread( $fp, filesize($filepath) ); 102//fclose( $fp ); 103$f_encoded = chunk_split(base64_encode($contents)); //添付ファイルをbase64エンコードする 104$body .= "{$f_encoded}\n"; 105$body .= "\n"; 106 107if (mail($to, $subject, $body, $head)) { 108echo 'sendmail_jpn : OK.'; 109} else { 110echo 'sendmail_jpn : FAILURE.'; 111} 112} 113 114// mb_encode_mimeheaderのバグ対策用 115function mb_encode_mimeheader_ex($text, $split_count = 34) { 116$position = 0; 117$encorded = ''; 118 119while ($position < mb_strlen($text, 'ISO-2022-JP')) { 120if ($encorded != '') { 121$encorded .= "\r\n "; 122} 123$output_temp = mb_strimwidth($text, $position, $split_count, '', 'ISO-2022-JP'); 124$position = $position + mb_strlen($output_temp, 'ISO-2022-JP'); 125$encorded .= "=?ISO-2022-JP?B?" . base64_encode($output_temp) . "?="; 126} 127 128return $encorded; 129} 130?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$attach_file = $_FILES['upfile']['tmp_name'];
では


すみません、脊髄で書き込んじゃいました。
qiitaの記事見ましたが、これはアップロード処理をしてから、そのパスを$attach_fileに入れる方法を取ってますね。
先にmove_uploaded_fileしてから、そのアップロードしたディレクトリとファイル名をパスに代入してください。
move_uploaded_fileについては「php アップロード」とかで検索したら山ほど出てくると思います。

投稿2016/10/25 09:20

編集2016/10/25 09:30
takepieee

総合スコア686

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問