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

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

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

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

2回答

915閲覧

PHPで受け取ったメールに添付された画像の縮小方法

u-sukesan

総合スコア156

PHP

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2019/03/19 13:54

編集2019/03/19 14:01

前提・実現したいこと

現在forwardにてメールをPHPに転送し
処理をして画像の保存やDBへの保存を行なっています。

しかし画像が受け取ったまま格納しているためあるサイズ以上なら縮小して格納したい
画像保存箇所だと思うのですが、「フォームで受け取った画像を縮小して」という方法であれば$_FILEなどを加工して・・とわかるのですが
どれが$_FILEに当たるのか、わからず質問致しました。

①例えば横幅が600px以上であれば600pxにしようとする場合、どのように追記すればよろしいでしょうか

②追加で質問です。たまにメールに添付された画像(保存した画像)がHTMLで表示すると横向きのまま表示されます。
おそらくスマホで横向き取った画像だと思うのですが、こういうのは受け取った時に直せるのでしょうか?

該当のソースコード

$params['include_bodies'] = true; $params['decode_bodies'] = true; $params['decode_headers'] = true; $params['input'] = file_get_contents("php://stdin"); // 標準入力 $params['crlf'] = "\r\n"; $structure = Mail_mimeDecode::decode($params); $CHARSET_TO="UTF-8"; $localprefix = dirname(__FILE__)."/../"; $path = "img/"; switch(strtolower($part->ctype_primary)){ case "text": $charset = $part->ctype_parameters['charset']; if ( $charset ) { $charset_from = $charset; } else { $charset_from = 'auto'; } $body = mb_convert_encoding( $part->body, $CHARSET_TO, $charset_from ); switch(strtolower($part->ctype_secondary)){ case "plain":   //処理 break; case "html":        //処理 break; } break; case "image": $filename = $part->d_parameters['filename']; $filetype = $part->ctype_primary; if(!empty($part->headers ['content-id'])){ $key = 'cid:'.trim($part->headers ['content-id'],"<>"); }else{ $key = $filename; if(!empty($html)){       //処理 } } //フォルダを作成 $diaryfolder = $localprefix.$path; if(!file_exists($diaryfolder)){ mkdir($diaryfolder,0777,true);} chmod($diaryfolder, 0777); // 画像ファイル自体はファイル保存。    //おそらくここで画像縮小してごにょごにょだと思うのですが $image_path = $diaryfolder. $filename; if($fp = fopen($image_path, 'w')){ $length = strlen($part->body); fwrite($fp, $part->body, $length); fclose($fp); chmod($image_path, 0644); } break; case "multipart":     //処理 break; }

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

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

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

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

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

guest

回答2

0

$_FILESはおっしゃる通り入力フォームから送信されたファイルの情報が保管されます。
既にサーバー上に置かれたファイルであれば、そのファイルを直に操作することになります。

画像などのファイルの操作はPHP拡張のGDライブラリでしょうか。

投稿2019/03/19 13:59

編集2019/03/19 14:01
m.ts10806

総合スコア80850

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

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

u-sukesan

2019/03/19 14:06

ありがとうございます。 フォームで受け取った時はGDで処理しております。 が、今回はGDでできれば、理解しやすいのですが、そうでない場合はその方法すらわからない感じです。 もし可能であれば600px以下に縮小したファイルとさらに縮小したサムネイルも複製でできればとも考えておりますので、なおさらGDだとベストです
u-sukesan

2019/03/19 14:06

質問の答えになっておりますでしょうか?
m.ts10806

2019/03/19 21:23

私が何か質問したわけではないので。まず私が提示した記事やphpマニュアルで仕様を確認し、やってみては?
m.ts10806

2019/03/19 23:31

私はさらっと書いてるので気づいてないかもしれませんが $_FILEではなく$_FILESです。 決められているものの誤字は間違いなく記述するようにしてください。
u-sukesan

2019/03/20 05:50

大変失礼いたしました。 しっかり見てみます。 誤字指摘もありがとうございます。
guest

0

ベストアンサー

$image_pathに画像ファイルのパスが入っていると思います。
$_FILEであれば可能ということなので、
画像ファイルを保存した後に同様の処理を$image_pathに対して実行すれば大丈夫でしょう。

投稿2019/03/19 23:10

tabuu

総合スコア2449

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

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

m.ts10806

2019/03/20 00:53

質問者さんが間違えられたままなのでそのまま持ってこられたのだと思いますが、$_FILEではなく$_FILESですね。
tabuu

2019/03/20 05:14

何も考えずにコピペしていました。訂正ありがとうございます。
u-sukesan

2019/03/20 05:50

なるほど、そう言うことですね、チャレンジしてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問