変更を加えたCGIスクリプトファイル等に文法エラーがないか、コマンドラインオプション-wcを使ってチェックします。syntax OKが出れば、とりあえずOKでしょう。OKが出ない場合は、メッセージを手掛かりに修正を加えます。
>perl -wc xxx.cgi
xxx.cgi syntax OK
Windowsの例)
UNIXシェルのsh・bash系の例)
| host:~$ export "QUERY_STRINGS=item=hoge&item2=moge" |
UNIXシェルのcsh系の例)
| % setenv QUERY_STRINGS "item=hoge&item2=moge" |
対象となるCGIスクリプトファイルを指定して、Perlデバッガを起動します。
| >perl -d xxx.cgi
Loading DB routines from perl5db.pl version 1.0402
Enter h or `h h' for help. main::(xxx.cgi:2): $|=1;
|
| main::(wwwboard-entry.cgi:2): $|=1;
DB<1> c >/your_message_dir/id.txtオープン不可 main::XXX called at xxx.cgi line 53 Debugged program terminated. Use q to quit or R to restart, use O inhibit_exit to avoid stopping after program termination, h q, h R or h O to get additional info. DB<1> |
エラーメッセージに続く、at xxx.cgi line 53というところで問題が発生していることがわかります。
(5)コマンドラインからの実行
| >perl xxx.cgi |
| print 表示したい変数; |
| #!/usr/bin/perl
print "Content-type: text/html\n\n"; print "<HTML><BODY><PRE>"; open(PIPE, "/usr/bin/perl /PATH/xxx.cgi|") or die; print <PIPE>; close(PIPE); print "</PRE></BODY></HTML>"; |
| BEGIN {
use CGI::Carp qw(carpout); carpout(STDOUT);
|
| C:\inetpub\scripts\xxx.pl: Error message! at C:\inetpub\scripts\xxx.pl line xx. |
| BEGIN {
use CGI::Carp qw(carpout fatalsToBrowser); carpout(STDOUT);
|

【入手先・情報源】
| #!/usr/bin/perl
use KCatch qw( execdata );__DATA__ # 以下は通常のスクリプトでOK |
・メッセージの文字化けを含む強力設定版(要jcode.pl)
jcode=xxxで文字コードを指定します。
#!/usr/bin/perl
require "jcode.pl" ;# 以下は通常のスクリプトでOK |
エラーが生じた場合、次のようなエラーメッセージがブラウザに表示されます。(Win98+Apacheでの例)
| Catch: Thu Nov 18 11:23:23 1999
[test2.cgi:11:die] open NG:No such file or directory at d:/apache group/apache/cgi-bin/test2.cgi line 11. /cgi-bin/test2.cgi with Perl 5.00503 for MSWin32 |
バージョン1.05からは、
use KCatch qw( source );のように、オプションを指定すると、 warn や die が発生した行のコードも合せて表示することができるようになっています。しかし、指定したままにしておくと、エラーが発生した時にユーザにもコードが表示されてしまうため、デバッグが完了したら忘れずに外しておくようにしましょう。
| [Mon Feb 28 12:20:58 2000] [error] [client xxx.xxx.xxx.xxx] c:/apache
group/apache/cgi-bin/xxx.cgi is not executable; ensure interpreted scripts
have "#!" first line
[Mon Feb 28 12:20:58 2000] [error] [client xxx.xxx.xxx.xxx] (2)No such file or directory: couldn't spawn child process: c:/apache group/apache/cgi-bin/xxx.cgi |
| [[Mon Feb 28 12:21:46 2000] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: c:/apache group/apache/cgi-bin/xxx.cgi |
| [Mon Feb 28 12:22:07 2000] [error] [client xxx.xxx.xxx.xxx] malformed header from script. Bad header=xxx: c:/apache group/apache/cgi-bin/xxx.cgi |
| print "Content-type: text/html\n\n"; |
| tr -d '\r' < ****.cgi |
【対策】
| ScriptLog logs/script_log |
| C:\>lwp-request -de http://localhost
Date: Wed, 03 Jun 1998 13:37:31 GMT Accept-Ranges: bytes Server: Microsoft-IIS/4.0 Content-Length: 4325 Content-Location: http://localhost/Default.htm Content-Type: text/html ETag: "0c1e58b063bd1:1237" Last-Modified: Thu, 09 Apr 1998 12:09:28 GMT Client-Date: Wed, 03 Jun 1998 13:37:31 GMT Client-Peer: 127.0.0.1:0 |
ご意見等は、
電子メールでお願い致します。