• 締切済み

requireのファイルの置き場所

サーバ移行にともない、新Webサーバを構築中です。 それで、旧サーバと新サーバでrequire '○○.pl'; などの、require を使用する時の置き場所が いまいちわかりません。 以前は、 Inetpub  └scripts     └wwwmail2        └test というフォルダ構成で、testフォルダのなかに test.plという、動かしたいperl本体と、 requireの.plを全部入れて動いていましたが、 新WWWサーバでは、requireするperlを Scriptsフォルダの下に置かないと、動かなくなりました。 (Scriptsの配下のwwwmail2-testの中にrequireの.plを 入れたのでは動かなかった。) ディレクトリの設定をどこかでしなくてはいけないのでしょうか。 この質問の仕方で不安ですが、よろしくお願い致します。

  • Perl
  • 回答数2
  • ありがとう数6

みんなの回答

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.2

サーバのOSは? 使用しているWebサーバは?  Inetpubってフォルダの名前から、勝手にWindows系のOSで、IISを使用していると過程します。  1番確実な方法は、  旧サーバの設定と新サーバの設定を見比べて下さい。多分、エイリアスの所か、ディレクトリの設定の所で、実行権の違いが見つかるとおもいます。  それをチェックして見て下さい。  またそれをおこなっても動かない場合には、そのディレクトリ自信の所有権等の事を確認して下さい。

  • ryouchi
  • ベストアンサー率41% (52/125)
回答No.1

require は、絶対パスで記載しても大丈夫なので、 require '/home/ryouchi/src/hoge.pl'; といった指定で大丈夫のような気がします。 ただアクセス権の指定は必要かもしれません。 httpdがアクセスできるようにファイルとディレクトリにパーミッションを設定しておく必要はあります。

関連するQ&A

  • Perl require 共通の変数 外部ファイル

    ファイルが多くなってきて、その中でも共通の変数があるので 外部ファイルにまとめたい・・・ ~test.pl~ #!/usr/bin/perl require("testcommon.pl"); print qq(Content-type: text/html\n\n); print <<END; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=$CHARSET"> <title>外部CGIファイル読み込み</title> </head> <body> END print qq($test<br>$data<br>$NEW); print <<END; </body> </html> END exit; 1; ~testcommon.pl~ #!/usr/bin/perl $test = "テスト"; $data = "テストです"; $CHARSET = "UTF-8"; $NEW ="サーバー"; 1; まずこれが現在テスト中で サーバーAでは、これでいけているのですが、 サーバーBでは、これではいけず、 エラーログを見ると 「@INC~/usr/local/lib64/perl5~」 とでてます。これがどのような意味をささしているのかわからないです。 いつも1行目に書く「#!/usr/bin/perl」の部分を書き換えてみたのですが・・・ さらにサーバーBでは、ログファイルなど開く際、フルパスでないと開けません。 require("testcommon.pl");←これですと インターネットサーバーエラーとなってしまいます。 これはエラーログを見るとフルパスで指定と書いていたので、 require("/path/path/path/testcommon.pl"); のようにしました。 これで、一応表示はできたのですが、 testcommon.plで新しい変数を書き加えると、($NEW123 = "追加したい変数";) 表示されません。 またCHARSETでUTF-8を指定してますが、 更新や、再度ページに入ったりすると、 CHARSETの変数が反応していなかったりしています。ページでソースを確認すると 変数の部分が空欄になってます。 これは require("/path/path/path/testcommon.pl"); が読み込んでいなかったり読み込んでいたり もしくは、一度なにをしたのかわからないですが、このフルパスの場所に testcommon.plのファイルをおいて、そのときのままになっている など、原因、対処がわからず困っております。 ※というより結論としては、 共通の変数を1つのファイルでしようしたいということです。 ~common.pl~ $a = 123; $b = "テスト"; $c = 2; ~test1.pl~ $TEST = $a * $c; print "$b$TEST\n"; #結果「テスト246」 ~test2.pl~ $TEST123 = $a + $c; print "$TEST123$b; #結果「125テスト」 このような感じ・・・(+_+)

  • 'cgi-lib.pl'などのファイルの位置は?

    Perlの基本的な質問ですが、cgi-lib.plやjcode.plは どのディレクトリに入れれば自然でしょうか? 私はLinuxとWindowsの両方にPerl5.6を入れておりまして、今までは相対パスによって、スクリプトの近くに置いていましたが、ディレクトリ(フォルダ)が変わるごとに設定しなおしで面倒になってきました。 WEBでもレンタルサーバーなど利用したことは無いんですが、このような基本ライブラリは、require 'cgi-lib.pl';で呼び出して?いると思いますが、 しかるべき位置にこのファイルが無いとだめだと思います。ご教授ください。

    • ベストアンサー
    • Perl
  • require文が実行できない

    perl で require 'cgi-lib.pl'; または require "jcode.pl"; を実行すると、 Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, admin@mshome.net and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. というメッセージが出ます。(cgi-lib.pl、jcode.plは同じディレクトリにあります。)

  • Win98+PWS4.0でPERLが動作しません

    Win98+PWS4.0でPERLを動作させたいのですがうまくいきません。 ディレクトリ「Inetpub」-「scripts」へTEST.PLという名で 下記のプログラムを入れて実施すると、 --------------- #!/user/local/bin/perl print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<p>\n"; print "Hello\n"; print "</p>\n"; print "</body>\n"; print "</html>\n"; --------------- HTTP エラー 403 403.1 許可されていません: 実行アクセスは許可されていません --------------- と出ます。 レジストリの設定は ".pl",".cgi”とも「C:\Perl\Bin\Perl.exe %s %s 」として、 PWSの設定で「scripts」は”実行””スクリプト”とも チェエク入をれています。 「wwwroot」のルートへ置いても同様のエラーが発生します。 DOS窓から「Inetpub」-「scripts」内でTEST.PLとすると 正常に表示はされます。 PerlへのパスもC:¥から実行確認済みです。 何が原因と考えられるでしょうか。 宜しくご教示お願いします。

  • requireで同じライブラリを複数回、呼び出すとどうなるか

    perlでの話なのですがrequireを使って、 例えば、以下のようにした場合、 同じファイルを何回もコンパイルすることになるのでしょうか。 どなたか教えていただけないでしょうか。 @xx=(1,2,3); for(@xx){ require "xx.pl"; } どうしてもCGIがサーバーに与える負荷を軽減したいので、 無駄なコンパイルならば、一回だけrequireするようにしたいのです。

    • ベストアンサー
    • Perl
  • requireの使い方のどこがおかしいのでしょう?

    言語はperlです。 789.cgiから456.plを呼び出したいのですが、シンタックスエラーが出てきます。 789.cgiのrequireに関する行をコメントにしたら実行されるのですが…。 requireを使わずに、サブルーチン自体を789.cgiの中に書き込むことには成功しているのですが、 イマイチrequireを使った呼び出しのコツがわかりません。 どなたかご教授下さい。 以下にスクリプトを示しておきます。 よろしくお願いします。 *****以下789.cgi***** #!/usr/local/bin/perl use CGI::Carp qw(fatalsToBrowser); require "456.pl"; $a=12; $b=15; $d="xxxxxxxx"; $d=&plus(); print "content-type:text/html\n\n"; print <<"HTML_HTML"; <html> <head> <title> ヒアドキュメント </title> <body> ***** <br> $d <br> ***** <br> $a <br> ***** <br> $b <br> ***** </body> </html> HTML_HTML ***********以下456.pl************ sub plus { my $a=10; my $b=10; $c=$a+$b; return $c; }

    • ベストアンサー
    • CGI
  • BlatJ(電子メール送信ソフト)のエラーについて

    教えて下さい。 WindowsNT4.0 + Perl5.005 + BlatJ で構築したWWWサーバを 別のサーバに移植しております。 それでBlatJにおいて以下のエラーが出ました。 これはどういう意味なのでしょうか? -------------------エラー内容--------------- エラー メール送信失敗 -------------------------------------------- While trying to retrieve the URL: http://***.***.***.***/scripts/wwwmail2/demo.pl 次のようなエラーが発生しました : メールの送信に失敗しました(256) - BlatJ.exe システムからのメッセージ : システム側の不具合によるエラーだと思われる場合は、 表示されたメッセージをコピー&ペーストし、下記メール アドレスまでご連絡ください。 ******@***.***.com ---------------------------------------以上 これについて、ご存知の方、ご教授願います。 またBlatJに関するサイトについても教えて下さい。 宜しくお願い致します。

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

    メールフォームからメール送信するページを作成したいのですが、 最初の方の 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
  • cgiファイルについて

    お世話になります。 以前、Windows Server 2003 にてWebサーバーを構築し、そこでPerlで掲示板を公開しておりました(社内イントラ)。 先月サーバーをリプレースしOSがWindows Server 2012となり、この掲示板を移行しようとしましたがうまくいきませんでした(OSが64bitだから?) ※元々掲示板は別の人が作成した為、私自身あまりよく分かっておりません(Perlも含め)。 なので、現状は掲示板を公開できずにおります。 新サーバーの方で新たに掲示板を作成すればよいのですが、以前使用していた掲示板に登録された内容も参照できるようにしたいところです。 <質問> 旧サーバーのC:\Inetpub\cgi-bin\log フォルダをみたところ、cgiファイルがたくさんあり中身を見てみると掲示板に登録されていた内容でした(1件1ファイル)。 しかし、<>0 <br> <>1などが文字列の中に混在しておりました。拡張子cgiをhtmlに書き換えて開くと、改行はされるようになりますが、<>や<>0はやはり文字列に混在した状態で表示されます。 掲示板に登録されたときのように、普通に表示するにはどうやればよいのでしょうか。 ※リプレース後、旧サーバーは色々いじってしまい掲示板も開けない状態になってます。 最終的にはその表示された内容を、何らかの方法でExcel等にコピーしそのファイルをとりあえず公開できたらと考えております。 以上、ご教授の程よろしくお願い致します。

    • ベストアンサー
    • Perl
  • ファイルopenができません

    webブラウザから http://localhost/test.pl と打って、perl_CGIを表示させようとしているのですが、どうもtest.plの中で、test.htmlをopenさせるところでエラーとなってしまい、表示できません。Apacheのエラーログでは「システムエラー、test.htmlファイルを開くことができません」としか出力されないし、ブラウザのコンソールでもエラーがでないので、困っております。なぜファイルが開けないのでしょうか???どうぞ宜しくお願いいたします。 【環境】 CentOS3.8、Apache2.0、perl5.8.0、SeaMonkey1.0.3 httpd.confで設定したデフォルトルート直下に、test.plとtest.htmlが存在します。 【その他現状説明】 ・test.html自体をブラウザで表示させることは可能です。 ・test.pl, test.htmlと同じディレクトリにある別のperlプログラム("hello"と出力するような簡単なもの)をブラウザで表示させることは可能です。 ・以前は、test.htmlの中で、「width=100」となっていてエラーがでていたので、「width='100px'」と変えたところブラウザのコンソールからエラーが消えたという経緯があります。

    • ベストアンサー
    • Perl