• ベストアンサー

perl CGIでの@INC

たびたびお世話になります。 perl CGIを作っています。作っているCGIとは別のディレクトリにあるファイルをrequireしたいのですが、リモートログインできないレンタルサーバのため@INCのいじり方がわかりません。 こういった場合のrequire方法(あるいはプログラム再利用方法)をお教えください

  • nagaon
  • お礼率68% (293/427)
  • Perl
  • 回答数4
  • ありがとう数6

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

  • ベストアンサー
  • heburusu
  • ベストアンサー率85% (140/164)
回答No.1

BEGIN文の中で@INCにパスを追加する方法はどうでしょうか? -- BEGIN { push(@INC, '/usr/local/sbin'); }

参考URL:
http://www.ksknet.net/perl/inc.html
nagaon
質問者

補足

情報ありがとうございます。 BEGIN { push(@INC, '/home/e07999/lib'); } という一文をcgiの頭近くにいれました。このcgiを実行すると、以下のエラーとなりました。(e07999は私のユーザ名です) Software error: Can't locate init.cgi in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/lib/site_perl . /home/e07999/lib) at admin_1.cgi line 18. /home/e07999/libの中にinit.cgiは入れてあるし、属性は705にしています。。。。 ひきつづきご指導ください。

その他の回答 (3)

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.4

/hoge/e07999 は実ディレクトリなのでしょうか? 単にマップされているだけなのでは? その場合は、@INC にディレクトリを追加できるものの、何も見つからないということになります。 @INC の中にカレントディレクトリ (.) が入っているので、自分のディレクトリの範囲内の相対パスを require に渡せば実行できるように思います。 require "lib/init.cgi"; require "../lib/init.cgi"; # 等など

回答No.3

>Can't locate init.cgi in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/lib/site_perl . /home/e07999/lib) at admin_1.cgi line 18. >/home/e07999/libの中にinit.cgiは入れてあるし、属性は705にしています。。。。 エラー中の@INCに、 /home/e07999/lib があって /home/e07999/lib/init.cgi のパーミッションが705なのに requireできないといういうことなら、 init.cgiのあるディレクトリやその親ディレクトリに、パーミッションで許可されてないということでは? たとえば、/home/e07999/ が 700になってるのに、CGIで使おうとしているとか。

nagaon
質問者

お礼

ご指摘のとおり親のパーミッションに問題があるようでした。ありがとうございました。

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.2

CGIから@INCをブラウザーで表示し、確認してみたら。

nagaon
質問者

お礼

そのとおりですね。ただし今回は、エラーメッセージの中に@INCが表示されていましたが、表示されない場合は 確認してみます。

関連するQ&A

  • perlでつくったCGIがときどきダウンロードになります。

    はじめまして。 perl初心者です。 perlでつくったCGIがときどきダウンロードになります。 サーバーの設定では、.cgiはcgiファイルである設定はしてあるはずなのですが。。 7時以降の込みあうときなどにごくまれにそうなります。 2年くらいまえもperlをはじめて触ったときにこうなったことがあります。(これはレンタルサーバーだったのですが、) .htaccessを全てのディレクトリにおかなければいけないなどの理由があるのでしょうか? どなたか、情報をお持ちのかたお助けください。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • 'cgi-lib.pl'などのファイルの位置は?

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

    • ベストアンサー
    • Perl
  • ローカルでのCGIについて

    Windows2000上でCGI及びPerlを動かせるようにしたは宵のですが、ライブラリ等をrequireするとエラーがでます。 ライブラリをCGIと同じディレクトリにおいても、違うディレクトリにおいてもエラーが出てしまいます。 外部ファイルを読み込むときにはまた別に設定がいるのでしょうか。 HELPも見てみましたがよくわかりませんでした。 ご存知の方がおられましたらよろしくお願致します。 サーバにはIIS5.0を使用しています。

    • 締切済み
    • CGI
  • plalaのcgiサーバへのPerlプログラムのUPについて

    windows上のローカルサーバで、自作のperlプログラムを動かし、きちんと動作したのでplalaのcgiアカウントをとり、UPした後、パーミッションもplalaの注意書きに書かれていたとおり、ディレクトリ以外のバイナリや、テキストを「704」に変更しました。 Perlへのパスも間違っておらず、プログラムミスということもないと思っています。 しかし、UPしたcgiファイルにアクセスしようとすると、「Internal Server Error」と表示され、パーミッションを「755」などにかえても、パーミッションがおかしいとでます。 いったいパーミッションを何にすればよいのでしょうか?

  • CGI::SessionってPurePerlなのですか?ライセンスは?

     お世話になっております。 以下のWebサイトに http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%2FWalrus%3A%3ASession%3A%3ALite#i6 CGI::SessionがPurePerlである、と記載されておりますが これは本当でしょうか? C言語などのバイナリ型のCGIが禁止されているCGI::Session未インストールのレンタルサーバでも ユーザ用のディレクトリ(最近はこれに限定されない場合が多いけどcgi-binディレクトリなど)にCGI/Session.pmファイルとCGI/Sessionディレクトリ、それからauto/CGI/Sessionディレクトリなどを置くことで利用できますでしょうか? それからCGI::Session(依存プログラムも含めて)のライセンスは何が採用されているのでしょうか?デュアルライセンスであれば採用されている複数のライセンス名すべてを教えていただきたいのですが? Perlに詳しい方、ご教授よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perlを使用したcgiでの画像アップロードについて

    いつもお世話になっております。 私自身のHPで画像のアップロードが出来る様になればいいなと思い、 cgiの勉強がてら調べていた所、下記HPがヒットしたのでサンプルスクリプトを使用し、アップロードをしたのですが正常にアップできませんでした。 http://www.aimix.jp/cgi/acccgilibupfile.html テストとして、【36,864 バイト】とのjpgファイルをアップしたのですが、 サーバには、【622 バイト】のjpgファイルが作成され、もちろん正常に表示されませんでした。 ※サーバはLinuxの自宅サーバを使用しております。 ※cgi-lib.plは導入済みです。 ※スクリプトの内容を一行だけ下記の様に変更しております。 【open OUT,">./img/$fnme";】にして、配下ディレクトリの【img】に保存するように設定。ディレクトリパーミッション777 その他はデフォルトの内容です。 ※cgiパーミッション755。 ※wrapper.cgiにてcgiのエラーはなし。 ※perlは、【which perl】コマンドにて/usr/local/bin/perlであることを確認済みです。 以上が確認したことなのですが、原因がわかる方、ご教授お願いします。

    • ベストアンサー
    • CGI
  • CGI Perl のデバックで

    CGI Perl のデバックで ブラウザーに出力指定しました。 記述したCGIがそのまま表示されますが、どこかおかしいところは 何か印が付くんじゃないんですか? str.fileNotFoundNote が出て困ってます。 サーバーのCGIのディレクトリーなどは確認済みで、その通り指定してますが。 CGIのデバックでは 判らないですかね? 初心者マークで ほんとに すみません。

    • ベストアンサー
    • Perl
  • cgiがうまく動作しません。

    はじめまして。 現在独学でlinuxの勉強をしている者です。検索をしたり本を読んだりして対策を試みたのですがどうしても解決できないため、質問させていただきます。 環境は redhatlinux9 Apache2.0.40 です。 cgiを置いたディレクトリにブラウザでアクセスすると、 Internal Server Error と出てしまいます。 ログを見ると、 [error] 6099: ModPerl::Registry: Can't locate ./jcode .pl in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/li b/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/pe rl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i3 86-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_per l /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 .) at /var/w ww/cgi-bin/bbs/wforum.cgi line 11.! と表示されています。試しにwforum.cgiの11行目以下の require './jcode.pl'; require './fold.pl'; require './wf_init.cgi'; を require 'jcode.pl'; require 'fold.pl'; require 'wf_init.cgi'; と変更してみたところ、今度は (略)Can't locate fold.pl(略) at /var/www/cgi-bin/bbs/wforum.cgi line 12.! というエラーログが表示されました。 perlプログラムの文法、パーミッション、改行コード、FTP転送の際の転送モードは確認済みのため、問題ないと思われます。また、ここの過去ログを参考にして作成した #!/usr/bin/perl print<<EOF Content-type: text/html <HTML><BODY>CGI works Good.</BODY></HTML> EOF というtest.cgiは動作可能でした。 こういった場合、どのような原因が考えられるでしょうか。どうかご教授ください。よろしくお願いします。

  • perl パラメータ

    このようなソースがあります。 require "test.cgi"; これはperlを読み込めますが、 require "test.cgi/path"; としますと、500Errorです。 .cgiの後ろのPATH_INFOをrequireで読み込むperlのパラメータとして渡す方法はありますか。

    • ベストアンサー
    • Perl

専門家に質問してみよう