メールをトリガーにするとファイルへのパスが通らない

このQ&Aのポイント
  • メールをトリガーにすると、ファイルへのパスが通らなくなるエラーが発生しています。
  • 直接ブラウザからアクセスした場合は正常に動作するが、メールをトリガーにして実行するとエラーが出力されます。
  • フルパスを指定すればメールトリガーでも正常に動作するが、フルパス指定は避けたいとのことです。
回答を見る
  • ベストアンサー

メールをトリガーにするとファイルへのパスが通らない

以下のソースなのですが、ブラウザより直にアクセスした場合には正常に動作するのですが、Forwardさせたメールをトリガーにして動作させると、なぜかrequireしている二つのファイルへのパスが通らなくなりエラーを出力してしまいます。 Command output: Can't locate ../../../../testconfig.txt in @INC ~(後略)~ どうしてなのでしょうか? /home/~testconfig.txtとフルパスかいてやれば、メールをトリガーにした場合でも正常動作しますが、フルパス指定は避けたいのです。 #!/usr/bin/perl use CGI; use DBI; use HTML::Template; use Jcode; use MIME::Parser; use FindBin; use lib "$FindBin::Bin/my_lib"; use MIME::Lite; require '../../../../testconfig.txt'; #error require './my_lib/sub_function.pl'; #error my $msg = MIME::Lite->new( From => 'webmaster@***.com', To => 'user@***.org', Subject =>'Error message', Type => 'text/plain; charset="iso-2022-jp"', Data => 'This is message text', Encoding => '7bit', ); $msg->send; exit;

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.1

パスが通らない、となるとカレントディレクトリが違うのでしょう。 それを調べて見ては。

perlerz10
質問者

お礼

おかしいなと思い、正常動作している別のプログラムでも同様にカレントディレクトリを取得してみたところ同じ結果に・・・。 じーっと見ました・・・、require してるところの ../ がひとつ多い・・・ ご面倒おかけしました。

perlerz10
質問者

補足

以下のモジュールで調べましたが、メールをトリガーにするとカレントディレクトリが変わってしまっていました。 use Cwd; my $wd = Cwd::getcwd(); ブラウザで直にアクセスした際のカレントディレクトリ /home/***/public_html/cgi-bin/test/pg_v3 メールをトリガーにしてアクセスした際のカレントディレクトリ (一時的にtestconfig.txtまではフルパス指定しました) /home/***/mail/test***.com/test@test***.com 「test@test***.com」は送信したメールの宛先アドレス これまでも同様のメールをトリガーにしたものはやっているのですが、これとほぼ同構成で何の問題もなく動作していたので、今回のはなぜこうなってしまうのか、それが知りたいです。

関連するQ&A

  • MIME::LiteをSMTPで送信すると「ファイル番号が違います。」というリターンが帰って来る。

    MIME::Liteパッケージについての質問です。 現在MIME::Liteパッケージを使用してメールを転送する プログラムを作成しております。 メールは正常に送信できるのですが、MIME::Liteのsendメソッド実行後の"$!"に「ファイル番号が違います。」というメッセージが格納されます。これは何を意味しているのでしょうか?よろしくお願いします。 <コード> #!/usr/bin/perl # パッケージ指定 use Net::SMTP; use Net::POP3; use MIME::Lite; use MIME::Base64; use Jcode; # メールcfgを読み込み require "$ARGV[0]"; # メールサーバを指定 $MAILSERVER = 'hoge'; # コンテナを作成 my $msg = MIME::Lite->new( From => "$FROM", To => "$TO", cc => "$CC", Bcc => "$BCC", Subject => "$SUBJECT", Type => 'multipart/mixed' ); # メッセージを追加 $msg->attach( Type => 'text/plain; charset="iso-2022-jp"', Data => "$MESSAGE" ); # 添付ファイルが指定されているかチェック if (! $FILEPATH eq "" ) { # 添付ファイルが存在するかチェック if (! -e $FILEPATH ) { print "添付ファイル名:$FILEPATH\n"; exit 67; } else { # FILENAMEをGET $NUM = rindex($FILEPATH,'/'); $FILENAME = substr($FILEPATH, $NUM+1); # 添付ファイルを追加 $msg->attach( Type => 'application/octet-stream', Disposition =>'attachment', Encoding => 'Base64', Filename => "$FILENAME", Path => "$FILEPATH" ); } } # メール送信 $msg->send('smtp', $MAILSERVER); if (! "$!" eq "" ) { exit 68; } print "メールの送信が完了しました\n"; exit 0; <環境> OS:solaris 8 Perl:version 5.005_03

    • ベストアンサー
    • Perl
  • CGIでメール送信で件名文字化け

    CGIにてメールを送信しています。 Beckyや一部のWEBメーラーで見ると、本文も件名も正常表示されますが、一部のWEBメーラー(Chicappa)では件名のみ文字化けします。 例えば件名が「お問い合わせの受付」の場合 「 $B$*Ld$$9g$o$;$N<uIU (B」となります。 困っています。原因を教えてください。 ソースはutf8で保存しています。 use utf8; use MIME::Lite; use Jcode; my $msg = MIME::Lite->new( From => $mail_from, To => $mail_to, Subject => jcode("お問い合わせの受付")->jis, Type => 'multipart/mixed', ); $msg->attach( Type => 'image/jpeg', Path => "./picture.jpg", ); $msg->attach( Type => 'text/plain; charset="iso-2022-jp"', Data => jcode($mail_body)->jis ); $msg->send();

  • Linux ファイル 絶対パス、相対パス

    Linux CentOSの /mnt/loca/bin の配下にrootで test.sh common.sh data.txtを作成 chmod 755 chown root:rootでファイルもフォルダも設定。 別のユーザ testUserでログインし、 sh test.shを実行すると、sh内で記載されている . ./common.shのインクルードに失敗 data.txtの参照 cat data.txt に失敗してしまいます。 絶対パスに変更し、 . /mnt/local/bin/common.sh cat /mnt/local/bin/common.sh にすると問題なく動作します。 また、rootユーザでログインすると相対パスでも問題なく動作します。 rootユーザでないユーザでは絶対パスにする必要があるのでしょうか? 環境変数PATH に /mnt/local/binはとおっています。 ご教授よろしくお願い致します。

  • CGIでファイルが読み込めない

    CGI初心者です。 (osはlinuxです。) #!/usr/local/bin/perl use strict; use CGI; my $file=new CGI; open(DATA,"/home/data.txt"); $file=<DATA>; close=(DATA); print "Content-type: text/html\n\n"; print "data=$file"; このスクリプトで、/home/data.txt(フルパスです)に書かれているデータを1行だけをブラウザで表示させたいのですが、表示できません。 どこがおかしいのか教えてください。 ちなみにdata.txtには実際に「abc」という文字1行しか入れていません。

    • 締切済み
    • CGI
  • 受け取った変数がファイルに書き込めない

    Perlで質問があります。 Perlでフォームから受け取った変数の値($title = “333”)を別にCGI 投げます。Printでは問題なく変数の中身が表示されるのですが Txtに書き込もうとするとうまくいきません。 ちなみに行頭で$title = “333”;すると書き込めます。 うまく受け渡しができていないのでしょうか? 以下ソースです。 #!/usr/bin/perl -w require 'lib.pl'; #########i一応lib.plの中身######### $q = new CGI; $q->charset('EUC-JP'); print $q->header; $title = $q->param('title'); ################################## use CGI; my $fname = 'news.txt'; open(FILE, ">>$fname") or die; print FILE $title ; close(FILE);

  • PEAR include_pathについて

    はじめまして。色々と調べてみたのですが解決できずにいます。誰か助けて頂けると助かります。学校の部活で「PEARのXML_RSSでRSSを取得してみよ」という課題が出ました。私の家では全てのPCがマックなのでMAMPをつかって以下のような環境でやっています。そこで http://o-ume8.com/junsdiary2/archives/2006/08/20060806_1726.phpを参考に課題に取りかかろうとして試しにPEAR_Infoを試してみたのですが Warning: require_once(PEAR/Info.php) [function.require-once]: failed to open stream: No such file or directory in /Applications/MAMP/htdocs/pear_info.php on line 2 Fatal error: require_once() [function.require]: Failed opening required 'PEAR/Info.php' (include_path='.:/Applications/MAMP/bin/php5/lib/php') in /Applications/MAMP/htdocs/pear_info.php on line 2 の様なエラーが出てしまいます。 pathが通ってないのでしょうか? それとターミナルでphp -v と打つともとのOSの4.4.4と出ます。 phpinfoではちゃんと5.2.0と出ます。 ご教授お願いいたします。 =====環境==== MAMP 1.5 beta 1 PPC os osx 10.4.8 Apache/2.0.59 php 5.2.0 <php.ini> include_path = ".:/Applications/MAMP/bin/php5/lib/php"

    • 締切済み
    • PHP
  • メールフォームからメール送信するページを作成したいのですが、

    メールフォームからメール送信するページを作成したいのですが、 最初の方の require 'perl-lib.pl'; の所で、処理が止まってしまいます。 #↓======================================= #!c:/Perl/bin/perl print "Content-type: text/html\n\n"; require "cgi-lib.pl"; require "jcode.pl"; require "perl-lib.pl"; # ←ここでとまる。  : #↑======================================= サーバは、社内のWebサーバです。 サーバの環境は、 ・OS:WindowsXP ・サーバソフト:Apache HTTP Server 2.0.54 ・ActivePerl 5.8.7 Build 813 です。 perl-lib.plの保存先フォルダを変えてもダメでした。 (もちろん、その際、requireのパスも変更) perl-lib.plは、クライアントからアスキーモードでアップロードしました。 パーミッションは777です。l perl-lib.plは、 http://www.tryhp.net/perllib.htm よりダウンロードしました。 原因が分からず行き詰っております。 どのようなことが考えられるでしょうか。 どなたかご存知の方、ご教授願います。

    • ベストアンサー
    • Perl
  • パスがうまく通らない

    Check.pmが  o:\public_html/post_pervice/cgi/lib にあります。 このモジュールを利用するために以下のようなプログラムを書きました。   #! /usr/bin/perl -w   use CGI::Carp qw(fatalsToBrowser);   unshift @INC, "o:/public_html/post_service/cgi/lib";   print join "\n",@INC;   use Check; この中の  use Check; をコメントで伏せて動かすと、   o:/public_html/post_service/cgi/lib   O:/usr/site/lib   O:/usr/lib のような表示がなされるので、  unshift @INC, "o:/public_html/post_service/cgi/lib"; はちゃんと機能しているようです。 しかし  use Check; のコメントを外して動かすと、   Can't locate Check.pm in @INC (@INC contains: O:/usr/site/lib O:/usr/lib .) at O:\public_html\post_service\cgi\showINC.pl line 8.   BEGIN failed--compilation aborted at O:\public_html\post_service\cgi\showINC.pl line 8. のようなエラーが出てしまいます。 何がいけないのでしょう。

    • ベストアンサー
    • Perl
  • MIME::Lite ActivePerlでエラー

    MIME::Lite ActivePerlでエラー Linuxで動いたメール送信プログラムをActivePerlで動かしたところ下記のエラーになりました。 SMTP Failed to connect to mail server: Bad file descriptor 該当行はMIME::Liteでメールを送信する部分でした。 return($message->send); Windows(Activeperl)上で動かす場合なにか特別な設定が必要なのでしょうか? 以下、プログラムの抜粋です。 use Jcode; use MIME::Lite; # 値の設定 sub testmail{ $subject = jcode($subject)->mime_encode(); $data = jcode($data)->jis; $message = MIME::Lite->new( From => $mailfrom, To => $mailto, Subject => $subject, Type => 'multipart/related' ); $message->attach( Type => 'text/html; charser="iso-2022-jp"', Data => $data ); foreach(@cid){ $message->attach( Type => 'image/gif', Id => $_, Path => "./$_" ); } return($message->send); }

    • ベストアンサー
    • Perl
  • LinuxからWindowsファイルのフルパス設定

    WindowsのtxtファイルをLinuxのデータベースに取り込もうとしているのですが、 Windowsファイルのフルパス設定がわかりません。 えーと、見たいデータはWindowsで表現するところの C:\My Documents\test.txt だと思ってください。 Linuxなら /usr/local/bin/test.dat ですよね。 これをLinux側からWindowsを見ようとすると ディレクトリを区切る記号として「/」を使うのか、「\」を使うのかがわかりません。また、「:」の記号もどう対応するのでしょう? 初歩的な質問ですみませんがどなたか教えてください。 お願いします。

専門家に質問してみよう