さんざん検索をかけて色々試したのですが、どうしても解決できず
どなたかご存知のかた、教えてください。よろしくお願い致します。

つい昨日までちゃんと動いていたCGIが突然
「jcode.plがありません」
と訴えてきました。
4月にサーバーを乗換え丸2ヶ月、問題なく動いていたのに
突然です。何がなんだか分かりません。
もちろん、このCGIに関わるファイルは一切いじっておりません。
自分なりに検討した結果

引っかかっているのは以下のコード
# 漢字コード変換ライブラリを読み込む
if (-f "jcode.pl") {
require "jcode.pl";
} else {
&errexit("jcode.plがありません。\n");
}
-略-
&jcode'convert(*tmp, $kcode_cgi);

このふたつです。jcode.plを読み込めない為にもれなく後出の呪文が効かないんだろうなという事は推測しているのですが。

このためフルパスでも試しましたが変化なし。
この読み込みをしなければ、CGIは取りあえず表示します。
なので、日本語変換プログラム以外は正常に動作しているようです。

どなたか同じような経験の有る方いらっしゃいませんか?
アドバイスよろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

&errexit("jcode.plがありません。

\n"); を以下の様に変更して実行すると、同じディレクトリ下のファイルの一覧が表示されるはずです。 jcode.pl はありますか? CGIファイル自身はありますか?

&errexit("jcode.plがありません。\n\n" . join('', map("$_\n", glob("*"))));

この回答への補足

自分なりに色々やってみた所、管理者から教えてもらったフルパスがそもそも違っていた事が分かりました。

これ、テストサーバの時のじゃないかな?と感じた部分があって、それを直したらあっさり動きました。

テストサーバをそのままミラーサーバに使用していたようなのですが、それが不調で止めたのが原因ではと推測しています。
サーバ管理者からは相変わらずレスポンスが有りませんが、ちゃんと動くようになりました。

教えていただいたコマンドがきっかけで気がつきました。
有難うございました。

補足日時:2009/05/26 22:38
    • good
    • 0
この回答へのお礼

ありがとうございます!!

やってみたところなぜか2つ上の階層の内容が表示されました。
本来は
/cgi-bin/search_a/

wwwsrch.log、wwwsrch.cgi、jcode.pl
が格納されています。
cgi-binの中にsearch_aとsearch_bのディレクトリを用意したかったのでcgi-bin直下でないのが良くないのでしょうか?

これをもとに
if (-f "search_a/jcode.pl") {
require "search_a/jcode.pl";


if (-f "cgi-bin/search_a/jcode.pl") {
require "cgi-bin/search_a/jcode.pl";
を試しましたがダメでした。もう少しあれこれやってみます。

お礼日時:2009/05/26 22:09

"jcode.pl"の記述を"./jcode.pl"としてもだめですか?


できればこういうライブラリは専用のディレクトリ一箇所に集めてパス指定で組み込んだ方が良いと思います。
仮想サーバの場合フルパスがわかりにくいので管理者が教えてくれないなら環境変数を解析取得して組み込んじゃいましょう。

この回答への補足

管理者から教えられていたフルパスが、間違っている事が判明しました。

ミラーサーバが不調(それも問題ですが)で使用停止したためそれの影響も有るのかな?とサーバ側の方は素人同然なのであまり良く分かりませんでしたが私が「これでは?と」思ったものを記述したらすんなり動きました。

こういう事って良く有るのでしょうか。
ともあれ、動きました。
有難うございました。

補足日時:2009/05/26 22:13
    • good
    • 0
この回答へのお礼

お返事有難うございます。
はい。相対パスでもフルパスでも試しました。
ご指摘の通りCGIファイルと log ファイル jcode.plは同じディレクトリに入れてあります。

>管理者が教えてくれないなら環境変数を解析取得して組み込んじゃいましょう。

管理者に遠慮してそれは躊躇していましたが、トライしてみます。

有難うございました。

お礼日時:2009/05/26 21:38

そのコードだと、CGIファイルと同じディレクトリに jcode.pl が必要ですね。

あるか無いか、確認してください。

> このCGIに関わるファイルは一切いじっておりません。

この CGIの引越し(別のディレクトリへの移動)もしてないんですね? jcode.pl の名前を変えたりもしてないんですね? 大文字・小文字の変更や全角文字の使用も大抵アウトですよ。

疑う様で申し訳ありませんが、「一切いじっておりません」は結構いろんな意味にとれるもので。

サーバー管理者のドジで必要なファイルが消される事も皆無ではありませんが、その前にまずご自身の作業にミスが無いかを確認しましょうね。
    • good
    • 0
この回答へのお礼

お返事有難うございます。
jcode.pl は同階層に設置しています。確認しました、
一切いじってない=ファイルも開いてない。フォルダ移動もしていない。
CGIディレクトリ存在を忘れつつあったくらい何もしてませんでした。
最後にいじったのはサーバー管理者さんでサーバーを変えたとき(3月末)にperlの実行ファイルの場所を書き換えただけです。
そして、ちゃんと動いてました。

>この CGIの引越し(別のディレクトリへの移動)もしてないんですね?

はい。以前サーバにあったままごそっと移動して来て、昨日まで普通に稼働してました。スペルも大文字小文字も全角半角も余計なスペースが入ってないかも確認しました。

フルパスもサーバー管理者に教えてもらったものをコピペしたり、指で一文字ずつおいながら打ち込んだりしたのですが、いっこうに。。。

もういちど、サーバー管理者にフルパスの確認をお願いしている所です。
もう、思いつく所がありません。。。

お礼日時:2009/05/25 23:26

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qjcode.plのかわり

jcode.plの
jcode::tr()
のかわりを探しています。

jcode.plの
jcode::tr(\$val,'0-9A-Za-z ()_@-','0-9A-Za-z ()_@-');
をPerl5.18.2で使用するとエラーが出てしまいます。これを回避したい。

プログラムがUTF-8であれば
$val =~ tr/0-9A-Za-z ()_@-/0-9A-Za-z ()_@-/;
のようにすれば実現可能みたいですが、プログラムはEUCで書かれています。
影響範囲からプログラムの文字コードをかえることはできれば避けたい。

一文字ずつ変換することも考えましたが、この方法ではパフォーマンスに懸念があります。

jacode.plなるものもありますが、これに置き換えるだけでは文字化けしてしまいました。

jcode::tr()のかわりになるような手段はあるのでしょうか?

Aベストアンサー

UTF-8 の内部文字列にすれば、tr で文字単位で変換することができます。プログラムのソースが EUC-JP でとのことなので、少し厄介なところはあります。

use strict;
use Encode;
use NKF;

my $str = "\xAD\xEA0101アア";
$str = decode 'utf8', nkf('-Ew', $str);
my $from = decode 'utf8', nkf('-Ew', '0-9A-Za-z ()_@ー');
eval "\$str =~ tr/$from/0-9A-Za-z ()_\@-/;";
$str = nkf '-We', encode('utf8', $str);
print "$str\n";

私の Linux 上のパソコンでは、上記のコードで (株) は文字化けせずに全角の0と1を半角に変換します。


人気Q&Aランキング

おすすめ情報