
Lolipopサーバー(Perl Ver. 5.010001 (5.10.1))で 標準インストールされていない
Email::MIMEをユーザーディレクトリにコピーして使おうとしていますが
エラーで使えず困っています。
過去に CGIと同じディレクトリに外部モジュール(単体 pm)を設置して利用したことがありますが
今回 Email::MIME は pmファイル単体ではないので、ディレクトリ単位で
別ディレクトリに設置したところエラーになります。
今まで外部単体モジュールしか利用したことがないのですが、今回ディレクトリ単位で
別ディレクトリにコピーして利用する場合のサンプルや説明が探せません。
実際のコードを載せようとしましたが gooのセキュリティポリシーで
コードが弾かれるようで載せられないので問題部分だけ倍角で記述します。
use lib ’../../lib’;
use Email::MIME;
でエラーが出てしまいます。
Emailモジュールディレクトリは
usr---- bin--- sample---- sample.pl
|--- lib--- Email---- MIME.pm
|---- その他の関連 .pmファイル&フォルダ
にコピーしています。
ちなみに MIME.pmと関連ファイル/ディレクトリを 同じディレクトリにコピーして(属性:755)
use lib qw(./);
としてみましたがエラーは解消しません。
# use Email::MIME;
とコメントアウトすればエラーは出ません。(MIME関連コードはまだ未記述です)
Windows/local では Email::MIME をインストールしてしまったので
確かめられません。
use FimdBin;
use lib ”$FindBin::/lib”;
とか、フルパスでも試してみましたが、エラーは消えません。
ざっと見たところでは、MIME.pm 中で use宣言されている他のモジュールは
全て存在するか、内部モジュールとして使用可能です。
どうすれば外部に置いた Email::MIME が使えるようになるか、
あるいはディレクトリ下の .pmモジュール利用の
サンプルや説明ページを教えていただけないでしょうか。
No.3ベストアンサー
- 回答日時:
○ 500 Internal Server Error
というのは「エラーがあった」ことしかわかりません。
修正のヒントになりません。
具体的にどんなエラーになっているのか確認しましょう。
・サーバーのエラーログを解析する
・サーバーにSSH等でログインして、CGIをコマンドとして実行してみる
・デバッグ中は use CGI::Carp qw(fatalsToBrowser); を書いておく
# Lolipopは使ってないので、それぞれの具体的なやり方は別途確認してください。
○一般論として。
.pmを置くだけで使えるようになるとは限りません。
コンパイルして実行ファイルを作るとか、設定ファイルに適切な内容を書くなどのインストール作業が必要な場合があります。
付属のドキュメントを読んで正しくインストールしましょう。
○ https://metacpan.org/pod/Email::MIME
の Dependencies を見れば、 Email::MIMEの他にも各モジュールも必要だということがわかります。
それらがインストールされているか確認しましょう。
cpanmコマンドでインストールすると楽です。
何度もありがとうございます。
契約プランの関係で SSHは使えないので、
エラーをフェッチできる KCatch.pmというモジュールを使って
USE KCatch
という一行を加えたところ 以下のようなエラーが表示されたので
サーバーのEncode のバージョンが古いと思われます。
[ContentType.pm:7:die] Encode version 2.87 required--this is only version 2.68 at ../../lib/Email/MIME/ContentType.pm line 7.
BEGIN failed--compilation aborted at ../../lib/Email/MIME/ContentType.pm line 7.
----
Encodeの Ver2.87を同一ディレクトリにコピーして見ましたが
今度は
[DynaLoader.pm:223:die] Encode object version 2.68 does not match bootstrap parameter 2.87 at /usr/local/perl/5.10/lib/5.10.1/x86_64-linux-thread-multi/DynaLoader.pm line 223.
[Creator.pm:9:die] Encode object version 2.68 does not match bootstrap parameter 2.87 at /usr/local/perl/5.10/lib/5.10.1/x86_64-linux-thread-multi/DynaLoader.pm line 223.
Compilation failed in require at ../../lib/Email/MIME/Creator.pm line 9.
-----
などとなってしまいました。
ちょっとサンデープログラマの手には余ってきたので、Email::MIME を諦めて違うモジュールを
使ってみようかと思っています。
・・・単にメールサーバーの受信メールを削除・フォルダ移動する目的なので。
No.2
- 回答日時:
そもそも、エラーはそれが原因なのですか?
具体的なエラーメッセージが無いと判断でません。
osamuyさん、kmeeさん
ご回答ありがとうございます。
まだご指摘の点 完全確認できていませんが わかっている部分だけ
とりあえず追加します。
カレントディレクトリは
opendir(DIRHANDLE, './');
で配下のファイル・ディレクトリ名を確認したところでは、
実行ディレクトリ(usr/bin/sample)で間違いないと思います。
@INC の値は
use FindBin;
use lib "$FindBin::Bin/lib";
use lib '/home/users/0/sub.jp-booklovers/web/usr/lib';
print join \"\n\", @INC", $em;
などとして確認しようとしましたが、空白が帰ってきます。
>上位パスのトラバーサル不可とか
カレントディレクトリ配下にコピーして useでそのディレクトリを
相対的に指定してもエラーになったので???です。
>具体的なエラーメッセージが無いと判断でません。
エラーは "500 INTERNAL SERVER ERROR" です。
>そもそも、エラーはそれが原因なのですか?
# use Email::MIME;
とするとエラーは出ないので、探せないモジュールを指定しているのが
原因と判断しています。
サポートにも聞いてみます(サポート対象外 と言われる可能性大?)
とにかく、Email::MIMEのように複数の関連 .pmファイルが
階層ディレクトリに存在するモジュールを外部モジュールとして
指定するサンプルコードが欲しいのですが・・・
英文ページ含めてもう少し検索してみようと思います。
No.1
- 回答日時:
まずは、お使いのCGI環境でカレントディレクトリがどこになってるか、実行時の検索パス(環境変数やperl内部変数@INC)がどんな値になってるかを調査してみては。
CGI環境だと、上位パスのトラバーサル不可とかいろいろありそうなので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- Windows 10 2件の中断されたアクション 予期しないエラーのため、ファイルを削除できません。 このエラーが再発する 1 2022/03/27 19:33
- PostgreSQL PostgreSQLで"pg_dumpall -f data.sql"を使ってバックアップしたデータ 2 2022/09/19 08:14
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- その他(プログラミング・Web制作) pythonをjupiter notebookからmecabで頻出の高い単語の抽出について(Runt 1 2022/12/17 18:08
- その他(開発・運用・管理) 【至急】.htaccessによるディレクトリ単位でのリダイレクト 2 2023/08/10 13:46
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- PHP ファイルアップロードに関してのセキュリティについてアドバイスお願い致します 1 2023/08/20 00:25
- UNIX・Linux Ubuntu でinvalid filenameとなるファイルをコピーする方法 3 2023/06/08 22:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで相対パスの書き方を...
-
XML-DOMについて
-
requireのファイルの置き場所
-
ディレクトリパスの取得について
-
月の第一週とは
-
エクセルで毎月第2週日の水曜日...
-
週2回のペースって だいたい何...
-
[Excel] ある日の曜日が当月の"...
-
c言語の質問です。 ある月のカ...
-
VBA。複数のChangeイベントをま...
-
毎○曜日って、使いますか?
-
よくある 『 第○(1・2・3・4・...
-
DBを10件毎に表示ページング...
-
なぜエラー?
-
日本語問題 昨日は何曜日ですか...
-
毎週同じ曜日にラブホに行くと...
-
西暦・月からカレンダーを表示
-
「戻る」と入力したデータが消...
-
6月の第2 第4火曜日は何日...
-
確認画面
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで相対パスの書き方を...
-
C# FTPサーバ カレントディレ...
-
ディレクトリパスの取得について
-
上位階層のディレクトリパスを...
-
ローカルでは動くのに・・・ロ...
-
Perl の外部モジュールの利用方法
-
FORMのFILEでフォルダ(ディレ...
-
ネットサーフレスキュー[Web裏...
-
Pythonのstatsmodelsでカルマン...
-
ファイルをディレクトリ分配の...
-
シェルスクリプトの条件式の書き方
-
ActivePerlでのCGI設定
-
Windows漢字フォルダ名の扱い(...
-
URIとURLの違いは何ですか?
-
月の第一週とは
-
エクセルで毎月第2週日の水曜日...
-
毎○曜日って、使いますか?
-
週2回のペースって だいたい何...
-
[Excel] ある日の曜日が当月の"...
-
よくある 『 第○(1・2・3・4・...
おすすめ情報