携帯サイトの会員マイページで
個人の画像をアップできる仕様を制作したいのですが
(ブログやsnsサイトによくある、アバターの代わりに
画像をアップできる仕様です)
どうしてもDBの更新・画像のアップロード、双方ができず
困り果てております。
※メールエラーログをみてみたところ、
メールをトリガーとしてプログラム自体は動作していた
ものの、処理が途中でストップされておりました。
具体的には、下記のような仕様を考えています。
(1)アップしたい画像を添付して携帯メールを送信
(2)メールをトリガーとして画像アップロード&DB更新
プログラム起動
~以下プログラムの中身の動作~
(3)届いたメールアドレス(拡張メールアドレス)から会員ID情報を
取得
(4)会員情報テーブル(sns_user)にマッチする会員IDの列の
image_pathの項目にアップロードした画像のパスが
更新される。
PHP+MySQLで制作中です。
「update テーブル名 set where 条件~」で調べてみたものの、
どうしても分からず質問させていただきました。
どなたかお分かりになられる方がいらっしゃいましたら
ご教授いただけませんでしょうか。
以下ソース内容
// ユーザー&認証コードチェック
if ($user&&$auth_code==getAuthCode($user['id'], $user['auth_string'])) {
// 認証OK
// マルチパートの場合のみメールを解析して画像を取得
if (strtolower($structure->ctype_primary) == "multipart") {
$images = getImage($structure->parts);
}
$image_save_path = null;
// 画像リストの中から1つだけ画像を取得する
foreach ($images as $image) {
// コンテンツタイプのチェック
if ($image['type'] == 'image/jpeg'
|| $image['type'] == 'image/gif'
|| $image['type'] == 'image/png') {
// ファイルとして保存
// 一時ファイルパス
$temp_path = tempnam('/tmp', 'img_');
if ($temp_path == false) {
// error
break;
}
$fp = fopen($temp_path, 'w');
if ($fp == false) {
// error
break;
}
fwrite($fp, $image['body']);
fclose($fp);
// 画像の形式と縦横サイズを取得
list($width, $height, $type) = getimagesize($temp_path);
// 認識できる形式であれば、所定のメソッドで開く
$ext = ".jpg";
$imageSource = null;
if ($type == IMAGETYPE_GIF) {
$imageSource = imagecreatefromgif($temp_path);
$ext = ".gif";
} else if ($type == IMAGETYPE_JPEG) {
$imageSource = imagecreatefromjpeg($temp_path);
} else if ($type == IMAGETYPE_PNG) {
$imageSource = imagecreatefrompng($temp_path);
$ext = ".png";
}
// 一時ファイルを消す
unlink($temp_path);
if ($imageSource) {
// ファイル名決定
$path = tempnam($image_dir, '');
$image_save_path = $path . $ext;
// 画像をケータイディレクトリへファイル保存
imagejpeg($imageSource, $image_save_path);
imagedestroy($imageSource);
break;
}
}
}
if ($image_save_path) {
// 差出人取得
$from = getFrom($structure->headers['from']);
$params = array();
$params[] = $user['id'];
$params[] = $image_save_path;
// データベースへ接続する
//
if ($db = connectDB($db_user, $db_pass, $db_name, $db_host, true)) {
$sql = "update sns_users set
image_path = '$image_save_path'
where id = '" . mysql_real_escape_string( $_SESSION['id'] ) . "'";
execQuery($db, $query, $params);
}
}
$query = "select * from sns_users where id = ''";
$result = mysql_query( $query );
$user = mysql_fetch_array( $result );
// データベースを閉じる
closeDB($db);
}
?>
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんにちは。
乗りかかった船ですので、余計なお世話とは思いつつ、
自分なら こうするという方法を書きます。
まず、問題箇所の切り分け。
・メールをトリガとし、PostfixからPHPスクリプトが起動されているか
・そのPHPスクリプトのほうでエラーが出てとまっていないか
(実際のところはPHPのエラーログが出てるので、
PHPスクリプトには渡っていて、
そのPHPスクリプトがエラー出して止まっているんだろうとは思います)
PHPスクリプトのほうを 極めてシンプルなものにして、
ちゃんと Postfixから そのPHPスクリプトが起動されている事を確認する。
↑は例のテキストファイル書き出しだけでいいんです。
mcryptでWarning出てるので、そこらへんだとは思うのですが、
この質問のソースに書かれていない部分でmcryptを使っている部分はないでしょうか?
とりあえず、その部分を除外して実行してみる。
とりあえず、思いつくのは こんなトコですかねぇ。。。
No.2
- 回答日時:
こんにちは。
>そのような方にご回答いただけて本当に幸いです!
すみません。そこまで 大層なもんではないです。
自分が作ったときは、Postfixを軽くいじった程度で 何の問題もなく動いてしまったので、
トラブルが起きたときの対処というものは分かりません。
>所定のファイルにエラーログをはきださせる方法がわからなかったので
これも そんな大層なもんでもなく、 $fp = fopen("ErrorLog.txt" , "w"); です。
お高いツールを使うと処理の流れをトレースしたり、ピンポイントで止めたり、変数とかを表示できたりするらしいですが、
そんなものがないのと他の方法が思いつかない(知らない)ので、こんなやり方をしています。
基本的に自分のやり方は 思いつきの自己流ですので、あまり参考にはならないんじゃないかとも思いますが。。
Postfixで受けたメールを全てPHPに丸投げし、
PHP側で $source = file_get_contents("php://stdin"); で受け取って、
PEAR/Mail/mimeDecode で解析し、
その後の処理をしているだけです。
ちなみに、↑は全てを受け取ってしまっているので、迷惑メールが来放題です。
「Unable to initialize module」に関しては、以下のが参考になるんじゃないかと思いました。
http://bluenotes.justblog.jp/technote/2007/11/ph …
正直、自分が遭遇した事のないトラブルに関しては、
自分もググってみるぐらいしかできません。
メールログに関しては、見たところ特に問題は起きていないような感じがしました。
ほとんど、参考にならない事しか言えなくて申し訳ないです。
> ほとんど、参考にならない事しか言えなくて申し訳ないです。
とんでもございません!お教えいただきまして本当に感謝しております。
> メールログに関しては、見たところ特に問題は起きていないような感じがしました。
「途中でストップしている」のではなく、正常に動いているのですかね。。
「Unable to initialize module」
URL、ありがとうございました。参考にさせていただきます。
しかし問題はメール転送処理にある可能性が高いかもしれませんね。
再度見直してみます。
ありがとうございました。
No.1
- 回答日時:
はじめまして。
その手のものは似たようなものを作った事がありますが、
とりあえず、「処理が途中でストップされておりました。」は、
何が原因で止まってたのかは分かりませんか?
メールがトリガなので、画面に表示させることはできないでしょうが、
原因の分析に必要なデータは、
そのスクリプトの中でテキストファイルを作り、
随時テキストファイルに追記していけば、
どこで止まったのか、おおよその位置が把握できます。
あまりにも初歩的なことで見落としてないかと一瞬思ったのですが、
GDは入ってますよね?
早速ご回答いただきまして誠にありがとうございます
> その手のものは似たようなものを作った事がありますが、
そのような方にご回答いただけて本当に幸いです!
所定のファイルにエラーログをはきださせる方法がわからなかったので
phpのログ(tail -n10 /var/log/phplog)を見てみたところ、
下記のエラーがでておりました。
PHP Warning: PHP Startup: mcrypt: Unable to initialize module
Module compiled with module API=20050922, debug=0, thread-safety=0
PHP compiled with module API=20060613, debug=0, thread-safety=0
These options need to match
in Unknown on line 0
また、maillogは下記になります。
postfix/smtpd[20732]: connect from XXXXXXXX-04.ezweb.ne.jp[59.135.39.238]
postfix/smtpd[20732]: 87ABD7500A2: client=XXXXXXXX-04.ezweb.ne.jp[59.135.39.238]
postfix/cleanup[20736]: 87ABD7500A2: message-id=<XXXXXXXXXXX@XXXXXXX.ezweb.ne.jp(エンコードされたメールアドレス)>
postfix/qmgr[19312]: 87ABD7500A2: from=<mail@ezweb.ne.jp(投稿者の携帯メールアドレス)>, size=6788, nrcpt=1 (queue active)
postfix/smtpd[20732]: disconnect from XXXXXX.ezweb.ne.jp[59.135.39.238]
postfix/local[20737]: 87ABD7500A2: to=<abc-2_a64417@abc.jp(投稿メールの受け取り先メールアドレス)>, relay=local, delay=0.14, delays=0.05/0.01/0/0.09, dsn=2.0.0, status=sent (delivered to command: /usr/bin/php /var/www/html/postdiary.php)
postfix/qmgr[19312]: 87ABD7500A2: removed
postfix/anvil[20734]: statistics: max connection rate 1/60s for (smtp:59.135.39.238)
postfix/anvil[20734]: statistics: max connection count 1 for (smtp:59.135.39.238)
postfix/anvil[20734]: statistics: max cache size 1
※ところどころXXXとしてあり、分かりにくく誠に申し訳ありません。
> GDは入ってますよね?
GDは入っております。実は掲載させていただいたものと
同じようなプログラムで、メールで画像をアップする仕様は
同サーバー環境でうまく動きましたので問題ないかと思います。
エラーログの内容が複雑で分からないのですが、
mcryptのモジュールを初期化できない の意味なのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP 掲示板を資料を参考にして開発中ですが、画像がアップされません? 1 2022/11/21 06:44
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- PHP 'member_picture/'に/がありますが 、「スラッシュ」は必要でしょうか? 1 2022/11/27 04:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アップロード画像数でCSSを分け...
-
【PHP】サーバー上で TIFFをJPE...
-
★PHP★画像アップロードの際に余...
-
PythonのTkinter詳しい方へ。画...
-
C#とJavaで、MP3タグの画像を表...
-
C# Excelファイルへの画像挿入。
-
透過PNGが透過されない!!
-
Illustratorで文字と画像を流し...
-
GDの画像変換でサーバーに負荷
-
PHP + MySQL で画像データ表示
-
エクセルでカレンダーマクロの...
-
PHPで半透明画像を作りたい
-
VBSの「MsgBox」について
-
imageフォルダに、画像をリサイ...
-
PostgreSQLのラージオブジェク...
-
<img src="http://x.y.com/cgi-...
-
VBAでJPGサイズ変更
-
PHPによる画像の生成による色の...
-
こちらはただの直列処理ですか?
-
フォントの色を変えるには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの「MsgBox」について
-
拡張子php画像をjpg画像等に変...
-
透過PNGが透過されない!!
-
アップロード画像数でCSSを分け...
-
imageフォルダに、画像をリサイ...
-
VBAでJPGサイズ変更
-
Illustratorで文字と画像を流し...
-
VBAのコードを教えてください
-
C# Excelファイルへの画像挿入。
-
php,mysqlにて画像パス保存/表...
-
GDI+を使ったビット数とDPIの扱い
-
SQLiteに画像を格納したい
-
ListViewコントロールでサムネ...
-
★PHP?★画像を縦横比を変えずに...
-
ビットマップ画像を読み込むプ...
-
phpで画像がどうしても文字化け...
-
PHPで吐き出した画像にリンクを...
-
phpMyAdminに画像を保存できない
-
OpenGLで描いて画像ファイル出力
-
手作業で埋め込んだ、UserForm1...
おすすめ情報