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

つい昨日までちゃんと動いていた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と関連する良く見られている質問

Q復元ポイントの作成とイメージファイル等のバックアップとの違いについて

今晩は、宜しくお願いします。

復元ポイントの作成とイメージファイル等のバックアップとの違いについて教えて下さい。

Windowsで復元ポイントからシステムを復元させる方法があり、
また、イメージファイル等にバックアップをとり、復元させる方法もありますが
この両者はどのように違うのでしょうか。

復元ポイントの作成とは、その時点のシステムの設定等だけを保存しているという
ことでしょうか。

また、イメージファイル等のバックアップを作成するということは
システム設定と作成したファイル等もイメージファイルとして一括してバックアップ
されるのでしょうか。

イメージファイルの復元時に、作成したファイル等もイメージファイルから
復元されるのなら、同じ名前のファイルがあった場合には、
イメージファイル作成時の古い情報のファイルになってしまうのでしょうか。

以上、宜しくお願いします。

Aベストアンサー

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。修復されるのは、選択した項目により異なる。
WindowsREを利用。
https://msdn.microsoft.com/ja-jp/library/hh825173.aspx

【バックアップと復元】
システムのバックアップを作成し、ハードディスクなどが壊れた場合に備えパソコン内部のデータを全てバックアップ・復元出来る。
Windowsのインストールディスクや、システム修復ディスクから復元が可能。
システムもユーザーデータもバックアップを取った時点の状態に戻る。

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。...続きを読む

Qjcode.pl と &ReadParse()

CGIファイルの先頭は

#!/usr/local/bin/perl

require './cgi-lib.pl';
require './jcode.pl';
&ReadParse();

という感じになっています。
ここでのの require は、日本語を使うためのもの
だと思っています。合っていますか?

&ReadParse() というのは何ですか?
require と関係があるみたいです。
require を書かずに &ReadParse() を書くとCGIエラーになります。

Aベストアンサー

cgi-libの中に「sub ReadParse」が必ずあります。
多分、大文字・小文字が違っていたのでは?

私の使っているcgi-lib.plのバージョンでは54行目にあります。

>>require './jcode.pl'; の方を消して、
>>CGIエラーは発生しませんでした。

というのは、A__さんが作られているperlのプログラムの
中で、jcode.plのサブルーチンを呼び出していないからです。
jcode.plは日本語変換ライブラリーです。
perlで呼び出すサブルーチンは

&jcode'convert(*変数,'sjis');

で、これを使っていなければエラーは起こりません。

ちなみに、&jcodeを使っていないと言う事は、特にフォームからデータをPOSTなどで受け渡しされていないと言う事でしょうか。
もし、データをブラウザなどから渡されるのであれば、
&jcodeは必須ですよ。
日本語はEUCとS-JISの2種類ありますから、どちらかに合わさないと、文字化けしてしまいます。

cgi-libの中に「sub ReadParse」が必ずあります。
多分、大文字・小文字が違っていたのでは?

私の使っているcgi-lib.plのバージョンでは54行目にあります。

>>require './jcode.pl'; の方を消して、
>>CGIエラーは発生しませんでした。

というのは、A__さんが作られているperlのプログラムの
中で、jcode.plのサブルーチンを呼び出していないからです。
jcode.plは日本語変換ライブラリーです。
perlで呼び出すサブルーチンは

&jcode'convert(*変数,'sjis');

で、これを使っていなければエ...続きを読む

Q救出ファイル復元 2の機能について

「救出ファイル復元 2」で画像ファイルJPEGの他にRAWファイル、拡張子(CR2)を復元出来るでしょうか。

キャノンの一眼デジカメを使っているのですが、他の復元ソフトでは、復元出来ませんでした。

Aベストアンサー

Vectorあたりで『ディスク・ファイル復旧』の項目で探せばみつかりそうですが。
要は,"復元ソフトで復元できるファイルがソフトに登録されている拡張子だけしかできない"ことですので,拡張子を選択できる復元ソフトを捜せばいいと思われます。

参考URL:http://www.vector.co.jp/vpack/filearea/win/util/disk/care/

QCGI.pmとcgi-lib.plの差異について・・・

formで送信したデータをCGI.pmで受け取った場合と、
cgi-lib.plで受け取った場合に差異があるのでしょうか?

cgi-lib.pl内で「\0」を組み込む処理があるのが気になります。

Aベストアンサー

pmはモジュールなので
最新版はサーバー側のCpanから導入する必要があります
(ユーザーが手動で入れることもできますが)
またモジュールを使うならstaticで書かないと意味がありません

上級者で自宅サーバを構築しているのであれば
perlが実行時にモジュールを読みにいくので
CGI.pmの方がより速く動くでしょう

しかし、初心者やクライアントでサーバを借りているのであれば
CGI.pmを入れるのは困難です(一見動いていても
裏でエラーをはいていてサーバーに負担を書けていることもある)
のでcgi-lib.plをお進めします。

Q削除した画像ファイルの取り出しまたは復元方法

ごみ箱に入れてから削除したファイルの復元方法を教えてください。

以前にも同様の質問をしたのですが、その際に教えていただいた方法で確かにいくつかのファイルは復元することができました。

しかし、一番復元したい画像ファイル(jpeg形式)が復元できません、同時期に同じく削除したファイルは無事に取り出せたのですが肝心のファイルは取り出せません。指定するファイル名、フォルダ名などの間違いはないのですが何が原因で復元できないのか理解できません。

良きアドバイスをいただければ助かります。
宜しくお願いいたします。

Aベストアンサー

こういったファイル復元ソフトを利用してファイルを復活させます。

●FileRecovery(フリーウェア)

消去・欠損したファイルを復元するソフト。
http://www.pcinspector.de/download.htm

●復元(フリーウェア)
http://www.vector.co.jp/soft/win95/util/se192983.html

■FINALDATA(ファイナルデータ)フォトリカバリー3.0(有料)
http://www.finaldata.ne.jp/f_8_3.html

当然ながら復元できる確立は有料ソフトのほうが高いです。

これらを使っても復元できない場合はファイルが上書きされて完全に消えている可能性が高いです。

Qjcode.plの使い方

最近cgiを始めたばかりの者です。
HTMLでフォームを作り、

FORM action="view.cgi"method="GET"

でcgiに渡すようにしました。
CGIで受け取った文字に全角があると
%83%8B%83i%83e%83B%83N%83X
のような文字化けをします。
調べてみたところjcode.plを使えば
文字化けを回避できるようですがうまく
いきませんでした。

質問1.jcode.plを読み込ませるのは
上記のview.cgiで良いのでしょうか。

質問2.require "jcode.pl";といれた後
具体的にどのように受け取ったデータを
jcodeに渡せばいいのでしょうか?
@data = split(/&/,$ENV{QUERY_STRING});
で@dataに受け取った情報を渡しています。

ご教授頂ければと思います。
よろしくお願いします。

Aベストアンサー

いいえ。
これは文字化けではなく、ブラウザがURIエンコードして送ってきた状態のものです。
このままの状態でjcode.plに通しても、
%83%8B%83i%83e%83B%83N%83X
のままです。
なぜなら、jcode.plから見れば、「『%83%8B%83i%83e%83B%83N%83X』という文字列が来た」と解釈するだけだからです。
元の日本語に戻したい場合は、エンコードの反対、つまりデコードすればいいことになります。

デコードには以下の文を使います。

$hoge =~ tr/+/ /;
$hoge =~ s/%([a-fA-F0-9]{2})/pack('H2',$1)/eg;

そして、QUERY_STRINGの値に対して行う場合の例を以下に示します。

foreach $pair (split(/&/,$ENV{'QUERY_STRING'})){
($name,$value) = split(/=/,$pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9]{2})/pack('H2',$1)/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9]{2})/pack('H2',$1)/eg;
$FORM{$name} = $value;
}

これで連想配列(別名「ハッシュ」)FORMに各項目($name)ごとに対になる値($value)が代入されます。

jcode.plはどこで使うのかというと、デコードした後、その全角文字の文字コードをプログラム内で使う上で統一するために使います。
通常、EUC-JPでブラウザに表示していてフォームで送った場合は、ブラウザもEUC-JPの状態でエンコードしたものを送ってくれます。
しかしながら、条件やブラウザのバグ等によってはそうでない場合(ShiftJISだったり等)もありえます。
こんな時に、jcode.plを使うのです。
ちなみに使う時は、
連想配列に代入する前に、
&jcode::convert(\$value,'euc');
というように挿入して使います。(EUC-JPにしたい場合の例)

いいえ。
これは文字化けではなく、ブラウザがURIエンコードして送ってきた状態のものです。
このままの状態でjcode.plに通しても、
%83%8B%83i%83e%83B%83N%83X
のままです。
なぜなら、jcode.plから見れば、「『%83%8B%83i%83e%83B%83N%83X』という文字列が来た」と解釈するだけだからです。
元の日本語に戻したい場合は、エンコードの反対、つまりデコードすればいいことになります。

デコードには以下の文を使います。

$hoge =~ tr/+/ /;
$hoge =~ s/%([a-fA-F0-9]{2})/pack('H2',$1)/eg;

そ...続きを読む

Q「ウイルス感染ファイル」削除後のシステム復元でどうなる?

ウイルスバスターで幾つかのウイルス感染ファイル発見し全て削除しましたが、感染したファイルはシステムファイルでしたので少し心配でしたが削除しました。
そこで教えて頂きたいのですが、感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?

Aベストアンサー

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライブにOSのインストールディスクを入れておく。
2.「スタート」「コマンドプロンプト」または「ファイル名を指定して実行」で
「sfc /scannow」と入力して「OK」

「Windows XP professional のディスクを入れてください」という表示が出ることがありますがHome Editionであれば「無視」を選んでスキップしてください

>感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?
出来ないことはないでしょうが、あまりお勧めできません。
現在の状態が正常でない。
過去の状態の方が快適に操作できる。
という場合、それがいいかもしれません。
しかし、Windowsの設定というのは非常に広範囲にわたっており、現在と過去を比較して、どちらが適正かを判断するのは容易ではありません。
また、過去の復元ポイントの中には不正な設定が含まれている場合があり、間違って、そのポイントを選択することもあります。
ウィルス対策ソフトのサイトでは一旦復元設定を無効にして、過去の復元ポイントを全て消去することを推奨しています。

>一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?
間違った操作をすると汚染されたファイルが復元されてしまいます。
一旦復元設定を無効にして、過去の復元ポイントを全て消去することで汚染されたファイルは二度と復元しません。

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライ...続きを読む

Qjcode.pl のパーミッション

投票のCGIを設置しました。
jcode.pl のパーミッションが 644 とありましたのでそれでちゃんと動いてます。

この jcode.pl のパーミッションは、644( or 755)以外はだめなのでしょうか?
このままだと外からアクセスできるので、600 にしたいのですが・・。
今のところ特に問題もなく動作してはいるようです。

ご回答よろしくお願いします。

Aベストアンサー

Jcode.plなら読み出しだけですから600が妥当だと思います。
また、ご利用の「サーバ」のCGI/パーミッションの説明を調べてみる事をお勧めします。
パーミッションの設定はCGI配布元の推奨値よりはサーバの推奨値を優先します。
例えばスクリプト本体(.cgi)のパーミッションも755より制限しても(701とか)動作し、それが推奨されている場合も多いです。

Q復元ソフトのふと感じた疑問 -ファイル名を削除したい-

先日、復元ソフトを使用していたときに感じたことなのですが
(使用ソフトは「復元」です。)
ファイルを復元する際の手順で削除したファイルが検索できますよね。
このファイル検索の時に、HITしないようにファイル名を完全に削除したい場合はどのようにすればいいのでしょうか??

例えば、「●●との秘密旅行001.jpg」のファイルを削除したとします。
その後、復元ソフトで検索をかけるとファイルを復元しなくてもファイル名を見ただけで怪しいファイルとわかってしまいますよね。
復元ソフトの検索で、表示されなくする方法か、別名に変える方法があるのなら教えてください。

Aベストアンサー

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名前を消去したいファイルをクリックするか、名前を消去したい複数ファイルを左クリックしながら選択する→[消去]ボタンをクリック→[OK]をクリック

これで、名前を消せます。しかしながら完璧ではなくて、一部消せないこともあります。
(「DataRecovery」を再起動してもう一度ドライブをスキャンすると消せなかったファイルが表示されます)

参考URL:http://www.vector.co.jp/soft/win95/util/se382922.html

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名...続きを読む

Qcgiで拡張子.cgiと拡張子.plの違いってなんですか?

標記の違いはなんでしょうか?
私の使っているサーバがどうも.plしか対応しておらず、困っています。もし、cgiのスクリプトを変形して使えるのであればその方法も教えていただけると助かります。

Aベストアンサー

普通のウェブサーバでは、.cgiはCGIプログラムを見分ける為に使います。つまり、使用言語に関わらず、CでもPerlでもPHPでも、『CGIで』動かすなら.cgiを判断基準にする場合が多いです。これはサーバの設定次第なので、もし設定で.plになっているだけなら、PerlだろうとCだろうと.plで動くと言う事です。(但し、Perl以外の動作環境があるかどうかはサーバ次第です。)

また、普通のウェブサーバでは、.plはPerlコードをウェブサーバが直接解釈する時に使ったりもします。これはCGIのように外部プロセスを起動するのではなく、mod_perl等を用いてウェブサーバ内で解釈してしまうものです。サーバにmod_perlがインストールされている事が前提です。

前者であれば、配付されているCGI等も.cgiを.plに変えて、後は普通に設置すれば動くのがほとんどでしょう。(動かないとすれば別の理由が有力かと思います。)後者であれば、場合によっては若干手を加えなければならないかもしれません。


人気Q&Aランキング