• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:問い合わせフォームに添付ファイルをつけたい)

問い合わせフォームに添付ファイルをつけたい

このQ&Aのポイント
  • 問い合わせフォームには、添付ファイルを送る機能を追加したいです。
  • 現在、問い合わせフォームで添付したファイルは受信側に届かない状況です。
  • PHPのコードを修正したり、ライブラリを変更しても解決しないため、他の方法が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

アップロードされたファイルは $_POSTじゃなくて$_FILESです。 ファイルへのパスなどは print_r($_FILES); で確認してください。

iewmmxnb99bb63
質問者

お礼

kosukejlampnetさんご回答ありがとうございます。 早速以下のとおり修正して実行してみました。 $attachfile = $_FILE['upfile']['tmp_name']; //添付ファイルパス が、やはり本文、題名のみ届く状況です。 print_r($_FILES);で見たところ Array ( [upfile] => Array ( [name] => AB001_L.jpg [type] => image/jpeg [tmp_name] => /var/tmp/phpCoFIyt [error] => 0 [size] => 54607 ) ) と出てきていますが、これはアップロードまでは完了しているのでしょうか? [tmp_name] => /var/tmp/phpCoFIytは調べたところ 仮にアップロードされるパスとありますがよくわからずに調査続行中です;; たびたびすみませんがご教授いただけましたら幸いです。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.5

さらに追記 $mail->setFrom($from,$fromname); となっていますが、$fromに$_POST['name']をセットしているんですね(まるでトラップだ・・・)。このあたりも含めてキチンと書き直してみてください。 なお、添付ファイルは$_FILESのtmp_nameから直接ではなく、いったんmb_uploaded_fileで(元のファイル名と同じ拡張子の)別のファイルにしてからの方がいいかもしれません。拡張子がないファイル名で添付するとメーラが悩む可能性があるので。 #というか「添付されない」のではなく、メーラ側でそういう状況になってませんか?

iewmmxnb99bb63
質問者

補足

自己解決しました。ありがとうございました。

すると、全ての回答が全文表示されます。
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

ANo.3です。 headers already sentになるということは、ソースがBOM付きのutf-8か何かでしょうか?header以前に「スクリプトがブラウザに何か返している」ということになります。output_bufferingで逃げるようなことえはありません。キチンと原因を究明してください。 #まして、echoのあとにheaderを入れていったいどうしようと #されているんでしょう。動かないのは自明なのですが(汗 こちらでもいろいろ試してはみますが、ソースは最初に提示されたもので間違いないのですよね。下記のリンク先では$_SESSIONになっていますが、$_POST,$_FILEで間違いないですね? (相互リンク) http://www.phppro.jp/qa/3549

すると、全ての回答が全文表示されます。
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

たとえばjpgの画像ファイルを選択して、 <?php header('Content-type: image/jpeg'); readfile($_FILES['upfile']['tmp_name']); とだけ書いたら、画像ファイルが表示されますでしょうか?これが問題なければ添付ファイルの取得自体は出来ています。 JPHPMailerはあまり使ったことがないのですが(昔テストしてみた程度)、 >$mail->setHtmlBody($htmlbody); を(setHtmlBodyでなく)setBodyにしても状況は同じでしょうか? JPHPMailer云々は無関係ですが、setHtmlBodyを使うならsetAltBodyもあった方が・・とは思います。 (蛇足) enctype="multipart/form-data"が必要だったり、テンポラリファイルは$_FILES['upfile']['tmp_name']であることは、マニュアルに書いています。 http://www.php.net/manual/ja/features.file-upload.post-method.php

iewmmxnb99bb63
質問者

お礼

simixさんご回答ありがとうございます。 ■sample_attachmail.phpを <?php header('Content-type: image/jpeg'); readfile($_FILES['upfile']['tmp_name']); ?> として保存したところ Cannot modify header information - headers already sent by とエラーが出ました (文字化けの文字(ひし形に?)も大量に表示されたので 画像の情報かも?) ので、調査したところ ↓ php.iniを output_buffering 1 1 設定しリロードすると何も表示されないという結果になりました。 また上記ソースに組み込む形 if (!$mail->send()){ echo("メールが送信できませんでした。エラー:".$mail->getErrorMessage()); } else { echo("メールが送信されました。"); header('Content-type: image/jpeg'); readfile($_FILES['upfile']['tmp_name']); } でも結果は同じでした。 また>$mail->setHtmlBody($htmlbody);も >$mail->setBody($htmlbody);としてみましたが こちらも何も表示されなくなってしまいました。 もしほかにもお心当たりがありましたら ご教示いただければ幸いです。 ※その他マニュアルの件は申し訳ありません。  徐々に勉強していきたいと思います。

すると、全ての回答が全文表示されます。
  • unacyo
  • ベストアンサー率51% (35/68)
回答No.2

すいません、PHPは判らないのですが、送信フォームのところで気になったのがあったので。 添付ファイルを送るには、FORMタグに、「enctype="multipart/form-data"」が必要です。これが無いと、ファイルが転送されず、それ以外のデータのみが送られます。 なお、このenctypeで送ると、従来と違うフォーマットでデータが送信されますので、「multipart/form-data」でぐぐるなりして、データの分解の仕方を調べたほうが良いです。

iewmmxnb99bb63
質問者

お礼

unacyoさんご回答ありがとうございます。 enctype="multipart/form-data"入れてみました。 php、アパッチ側で設定が必要なんでしょう。 結果変わらずでした。 引き続きmultipart/form-dataで調べてみたいと思います。

すると、全ての回答が全文表示されます。

関連するQ&A