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

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

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

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

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

Q&A

解決済

3回答

8011閲覧

パスワード付のzipファイルがサーバー上で作成できないです。

Kuriaki

総合スコア85

PHP

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

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

0グッド

0クリップ

投稿2016/12/07 03:16

問題がわかりにくいかもしれませんが、こちらで説明させて頂きます。
フォームで入力欄があって、そこに入力したものを送信すると、サーバー上にcsvファイルとzipファイルが作成されて、zipファイル添付のメールが飛んで、メール本文のurlをクリックするとzipファイルがダウンロードされ、ダウンロードしたファイルを開くにはパスワードが必要で、そのパスワードは入力欄で入力した数値という仕組みです。
現在、エラーがでていまして、うまく行かないです。エラー文ではそのようなものは存在しませんとのことで、zipファイルがサーバー上で作られていない。下にコード貼ります。
エラー文をご覧ください↓↓
Warning: file_get_contents(text.zip) [function.file-get-contents]: failed to open stream: No such file or directory in /home/blotag/www/ryu/csv/send.php on line 72
送信完了

説明が下手ですみません。
回答よろしくお願いいたします。

php

1$ShiftJIS = array($_POST['moji'], date("Y年/m月/d日 H時i分s秒")); 2 mb_convert_variables('Shift_JIS', 'UTF-8', $ShiftJIS); 3 4chmod('../csv', 766); 5 6$csv = fopen('text.csv', 'w'); 7 fputcsv($csv, $ShiftJIS); 8 fclose($csv); 9 10chmod('../csv',755 ); 11 12 13exec('zip -P $moji text.zip text.csv '); 14 15 16 17 18 mb_language("Japanese"); 19 mb_internal_encoding("UTF-8"); 20 21 22 23 24 25$filepath = "http://blotag.sakura.ne.jp/ryu/csv/text.zip"; 26$boundary = "__BOUNDARY__"; 27 28$additional_headers = "Content-Type: multipart/mixed;boundary=\"" . $boundary . "\"\n"; 29$additional_headers .= "From:xxxxxxxx.co.jp"; 30 31$message = "--" . $boundary . "\n"; 32 33$message .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n\n"; 34 35$message .= "http://blotag.sakura.ne.jp/ryu/csv/text.zip\n"; 36$message .= "--" . $boundary . "\n"; 37 38$message .= "Content-Type: application/zip\n"; 39$message .= "Content-Disposition: attachment; filename=\"text.zip\n"; 40$message .= "Content-Transfer-Encoding: base64\n"; 41$message .= "\n"; 42$message .= chunk_split(base64_encode(file_get_contents('text.zip')))."\n"; 43 44$message .= "--" . $boundary . "--"; 45 46 47 48$to = "xxxxxx.co.jp"; 49$subject = "hey"; 50$send_mail = mb_send_mail($to, $subject, $message, $additional_headers); 51 if ( $send_mail ) { 52 echo "送信完了"; 53 }else { 54 echo "メールを送信できませんでした。"; 55 }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/12/07 03:20

パスワードなしでも作成できないのではないですか?
Kuriaki

2016/12/07 03:56

パスワード情報を$mojiじゃなくて 普通に123にしたら、正常に動きました。$mojiはそのinputの変数なんです。変数にしたらうまくいかないですね。
guest

回答3

0

ベストアンサー

パスワード情報を$mojiじゃなくて 普通に123にしたら、正常に動きました。$mojiはそのinputの変数なんです。変数にしたらうまくいかないですね。

php

1exec('zip -P $moji text.zip text.csv ');

php

1exec("zip -P $moji text.zip text.csv ");

シングルクォーテーションの中で、変数は展開されません。

投稿2016/12/07 04:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Kuriaki

2016/12/07 04:10

本当ですね! ダブルにしたら展開されました! 回答ありがとうございます。
退会済みユーザー

退会済みユーザー

2016/12/07 04:13

補足ですが、$moji にバックスラッシュなどの文字がある場合、エラーになります。 $moji は escapeshellarg() でエスケープしましょう。
Kuriaki

2016/12/07 04:35

補足ありがとうございます。 勉強になりました。
guest

0

exec('zip -P $moji text.zip text.csv ');

このコマンドでファイルを作った時、ファイルはどこに出来ているでしょうか?
恐らくcsvフォルダの中に作ろうとしているのだと思いますが、実際にそのフォルダの中ではなく、別の場所に出来てしまっているのではありませんか?

exec('zip -P $moji ../csv/text.zip text.csv ');

のように作成先を置きたい場所に指定してみてください。

※追記
phpファイルはcsvフォルダの中にあるみたいなので上のコマンドでもcsvフォルダのなかにzipファイルができるっぽいですね、失礼しました。

投稿2016/12/07 03:27

編集2016/12/07 03:33
hitsujimeeee

総合スコア486

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

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

退会済みユーザー

退会済みユーザー

2016/12/07 03:37

ちなみに呼び出し方に依存するので 絶対パス推奨
guest

0

[function.file-get-contents] : failed to open stream: No such file or directory in /home/blotag/www/ryu/csv/send.php on line 72

訳:(エラーメッセージくらい読みましょう。)

/home/blotag/www/ryu/csv/send.phpの72行目に記載されているfile-get-contents関数でエラー
ファイルがオープンできませんでした。 指定されたファイルまたはディレクトリが存在しませんでした。

このコマンドは正常終了し、text.zipが作成されているのでしょうか?

exec('zip -P $moji text.zip text.csv ');

投稿2016/12/07 03:22

Y.H.

総合スコア7914

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

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

Kuriaki

2016/12/07 03:52

すみません、確認したところ、csvしか作成されていないのです。 zipファイルはどこにもないです。
Y.H.

2016/12/07 04:13 編集

違ったか… execute()の次の行にexit;を入れるとブラウザにエラーメッセージが表示されませんか? (「zipコマンドが見つかりません」みたいな) Webサーバーの実行ユーザーではzipコマンドにpathが通ってないのだと思います。 execute()で指定しているzipコマンドをFullPathで指定してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問