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

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

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

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

PHP

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

PEAR

PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

composer

Composerとは、PHP5.3.2以上で使用可能なパッケージ管理ツールです。指定ディレクトリ内だけでパッケージ管理します。

Q&A

解決済

1回答

2890閲覧

PEARのMali_Mimeクラスを使った箇所で、スクリプトがclass not foundエラーとなる

th1209

総合スコア40

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

PHP

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

PEAR

PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

composer

Composerとは、PHP5.3.2以上で使用可能なパッケージ管理ツールです。指定ディレクトリ内だけでパッケージ管理します。

1グッド

0クリップ

投稿2016/05/13 02:02

いつもお世話になっております。
PEARのライブラリを書いたスクリプトを作成しています。
Mail_Mimeを使った箇所で、Class not foundとなり、スクリプトがエラーで終了してしまいます。

本番環境でのみ上記現象が発生し、
なかなか原因がわからず困っている状態です...。

行った操作、確認済みの内容を以下に記載しますので、
どなたかヒント頂けないでしょうか?
よろしくお願いいたしますm(_ _ )m

確認した内容

  • PEARライブラリは、composerを使ってインストールしている
  • PEARライブラリは、スクリプトの先頭でautoload.phpをrequireして一括読み込みしている。
  • 他のPEARライブラリの実行箇所は失敗しないので、requireに失敗しているということはなさそう。
  • スクリプトは、githubにリポジトリをあげている。ローカルと本番環境の両方で以下動作を行ったところ、本番環境のみMail_Mimeを使った箇所で、Class not foundとなる(ローカルだとエラーにならない)。
    • 任意のパスにcdして、スクリプトをgit cloneする
    • composer installでライブラリを一括ダウンロード(composer.lockファイルを使ってバージョン固定)
    • スクリプト実行

phpのバージョン

ローカル:PHP 5.5.31 (cli) (built: Jan 8 2016 08:33:30)
本番環境:PHP 5.5.30 (cli) (built: Oct 1 2015 09:29:18)

composer.jsonファイルの中身

{ "require-dev": { "pear/http_request2": "*", "pear/mail": "*", "pear/mail_mime": "*", "mustangostang/spyc": "*", "phpunit/phpunit": "*", "mockery/mockery": "*" } }

エラーが出ている箇所のソース

<?php /** * メールでKPI情報を通知する */ class MailMessageNotifier implements MessageNotifier { const DEFAULT_FROM_ADDRESS = "hogehoge@gmail.com"; const DEFAULT_HEAD_CHARSET = "UTF-8"; const DEFAULT_HTML_CHARSET = "UTF-8"; protected $from; protected $bodyParam; /** * @param array|null $params * @return void */ public function __construct($params = null){ $this->from = isset($params['from']) ? $params['from'] : self::DEFAULT_FROM_ADDRESS; $this->bodyParam = isset($params['bodyParam']) ? $params['bodyParam'] : array("head_charset" => self::DEFAULT_HEAD_CHARSET ,"html_charset" => self::DEFAULT_HTML_CHARSET); } /** * @param array $destInfoArray * @param array $messageInfoArray * @return void */ public function notifyMessage(array $destInfoArray,array $messageInfoArray){ foreach($destInfoArray as $eachDestInfo){ $this->sendMail( $eachDestInfo['address'], $messageInfoArray['subject'], $messageInfoArray['htmlMessage']); } } /** * @param string $to * @param string $subject * @param string $message */ public function sendMail($to, $subject, $message){ /** * 以下の箇所でMali_Mime使っているのですが、エラーになります。 * ついでに、同じPEARのMailクラスはエラーにならないみたいです...。 */ //必要なオブジェクトの構築 $mailObj = \Mail::factory("mail"); $mimeObj = new \Mail_Mime(PHP_EOL); //メール本文の構築 $mimeObj->setHtmlBody($message); $mailBody = $mimeObj->get($this->bodyParam); //メールヘッダの構築(件名はphp.iniの設定に依存せず、必ずUTF-8でエンコーディングする) $defaultEncoding = mb_internal_encoding(); mb_internal_encoding('UTF-8'); $mailHeader = $mimeObj->headers(array( "To" => $to, "From" => $this->from, "Subject" => \mb_encode_mimeheader($subject) )); mb_internal_encoding($defaultEncoding); //メールの送信 $mailObj->send($to,$mailHeader,$mailBody); } }
kei344👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

「Mail_mime」とすべきところが「Mail_Mime」になっているのが原因だと思います。
(centos上で確認済み)
開発環境ではファイル名の大文字小文字が区別されない状態になっているのではないでしょうか。
windowsユーザーなのでそのへんの詳しいところは分からないです、すみません。

php

1$mimeObj = new \Mail_Mime(PHP_EOL); // before 2$mimeObj = new \Mail_mime(PHP_EOL); // after

投稿2016/05/13 06:02

編集2016/05/13 06:03
nnssn

総合スコア1221

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

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

th1209

2016/05/13 06:28

nnssn様 教えていただきありがとうございます。 実際に試したところ、アドバイスいただいた通りの原因でした! 「そもそもPHPがクラス名の大文字小文字を区別しない仕様だということを知らなかったり」、「ネット上で上がっているサンプルコードで、私のように"Mail_Mime"としているものがあがっていたり」と、自分では絶対に気がつけなかったと思います...。 やはり、公式ドキュメントをきちんと読まなかったことが悪かったですね(笑) 気をつけたいと思います。 教えていただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問