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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

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

Q&A

解決済

3回答

3486閲覧

作成されたcsvファイルをzipファイルにし,メールに添付して送信したい(エラーが出ている状態)

Kuriaki

総合スコア85

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

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

0グッド

0クリップ

投稿2016/12/06 00:47

編集2016/12/06 02:11

いろいろ検索して、なんとなくコードを書いたのですが、パスエラーが出ています。何が問題でエラーでてるのかがわかりません。
教えていただけたら助かります!
そして、方法とうしてはあってるか間違ってるかもわからなくて、少しでもアドバイスやヒントをいただけないでしょうか

回答よろしくお願いいたします!

php

1 mb_language("Japanese"); 2 mb_internal_encoding("UTF-8"); 3 4 5 6 7 8$zip = new ZipArchive(); 9// ZIPファイルを開く 10$res = $zip->open('text.zip', ZipArchive::OVERWRITE); 11// zipファイルが作れなかったら終了 12if ($res !== true) { 13 echo "zipファイル作成失敗\n"; 14 return; 15} 16// addFileでzipに追加するファイルを指定 17$zip->addFile('text.csv'); 18$zip->close(); 19// ZIPファイルをクローズ 20system('zip -P symfoware text.zip text.csv '); 21 22 23$zip = new ZipArchive(); 24$zip->open('text.zip'); 25//ここにエラーが出ています↓↓updating: text.csv (deflated 78%) 26//Fatal error: Call to undefined method ZipArchive::setPassword() in /home/blotag/www/ryu/csv/send.php on line 53 27$zip->setPassword('symfoware'); 28$im_string = $zip->getFromName("text.csv"); 29$im = imagecreatefromstring($im_string); 30imagejpeg($im, 'text.csv'); 31system('unzip -P symfoware text.zip'); 32 33 mb_language("Japanese"); 34 mb_internal_encoding("UTF-8"); 35 36 37 38 39 40$filepath = "http://blotag.sakura.ne.jp/ryu/csv/text.zip"; 41$boundary = "__BOUNDARY__"; 42 43$additional_headers = "Content-Type: multipart/mixed;boundary=\"" . $boundary . "\"\n"; 44$additional_headers .= "From:xxxxxxx"; 45 46$message = "--" . $boundary . "\n"; 47 48$message .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n\n"; 49$message .= $moji."\n"; 50 51$message .= "--" . $boundary . "\n"; 52 53$message .= "Content-Type: " . mime_content_type('text.zip') . "; name=\"text.zip" . basename($filepath) . "\"\n"; 54$message .= "Content-Disposition: attachment; filename=\"text.zip" . basename($filepath) . "\"\n"; 55$message .= "Content-Transfer-Encoding: base64\n"; 56$message .= "\n"; 57$message .= chunk_split(base64_encode(file_get_contents($filepath)))."\n"; 58 59$message .= "--" . $boundary . "--"; 60 61 62 63$to = "xxxx"; 64$subject = "ハロー"; 65$send_mail = mb_send_mail($to, $subject, $message, $additional_headers); 66 if ( $send_mail ) { 67 echo "送信完了"; 68 }else { 69 echo "メールを送信できませんでした。"; 70 } 71

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

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

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

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

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

guest

回答3

0

ベストアンサー

質問が編集されてまったく別の内容になってますが・・・・
「添付ファイルつきのメールの作り方」は解決したのでしょうか?
zipファイルの作成するときに発生している問題については、別の質問にされたほうがいいです。

//Fatal error: Call to undefined method ZipArchive::setPassword() in /home/blotag/www/ryu/csv/send.php on line 53
$zip->setPassword('symfoware');

英語読めませんか?

致命的エラー: /home/blotag/www/ryu/csv/send.php の53行目でZipArchive::setPassword()メソッドを呼び出していますがそのようなものは存在しません。


###編集前の質問に対する回答は以下

添付するファイルのPATHが$filepath = "text.zip";のようにカレントディレクトリからの相対PATHにになってますが指定の場所に存在するのでしょうか?

パスエラーが出ています

具体的にエラーメッセージをそのまま記載された方がいいと思います。

もし、質問に記載されているPHPファイルと同じディレクトリに存在するのであれば、以下で読み込めると思います。

PHP

1$message .= chunk_split(base64_encode(file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . $filepath)))."\n";

以下部分もfilename=\"text.zip"とfilenameを指定しているにもかかわらずbasename($filepath)を連結しているのはなぜでしょうか? あと$filetypeはtacsheavenさんご指摘のとおりです。

PHP

1$message .= "Content-Type: " . mime_content_type($filetype) . "; name=\"text.zip" . basename($filepath) . "\"\n"; 2$message .= "Content-Disposition: attachment; filename=\"text.zip" . basename($filepath) . "\"\n";

以下でいいのでは?

PHP

1$message .= "Content-Type: " . mime_content_type($filepath) . "; name=\"" . basename($filepath) . "\"\n"; 2$message .= "Content-Disposition: attachment; filename=\"" . basename($filepath) . "\"\n";

なんか少し前に同じ質問がされてますが解決したのではないのでしょうか?
ZIPを添付したメールを送信したいですが、ファイルが添付されていない。

投稿2016/12/06 01:15

編集2016/12/06 02:30
Y.H.

総合スコア7914

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

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

Kuriaki

2016/12/06 01:23

回答ありがとうございます。
guest

0

二つエラーが出てますので順に。

  1. $filetype はたぶん $filename の打ち間違いですね。ここでは添付ファイルが MIME type の何に当たるかが欲しいのですから。

で、$filetypeという変数は未定義なので、mime_content_type() が「文字列が欲しいのに与えられていない」と警告を出しています。

  1. そもそも $filepath が示す 'text.zip' が、存在していません。

http://blotag.sakura.ne.jp/ryu/csv/text.zip
が示すはずの場所に置いていますか?

投稿2016/12/06 01:08

編集2016/12/06 01:09
tacsheaven

総合スコア13703

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

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

Kuriaki

2016/12/06 01:23

回答ありがとうございます。
guest

0

上にあげられた通りなら、

PHP

1$subject = "ハロー"

; が抜けています。
この場合 PHP は、次の行とくっつけて、以下のように書かれていると解釈するので、エラー発生行としては($send_mail = が書かれている)次の行になるのです。

PHP

1$subject = "ハロー"$send_mail = mb_send_mail($to, $subject, $message, $additional_headers);

投稿2016/12/06 00:50

編集2016/12/06 00:54
tacsheaven

総合スコア13703

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

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

Kuriaki

2016/12/06 00:54

これは失礼いたしました。 改めて問題編集いたします。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問