質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

4回答

5648閲覧

CentOS7でPerlのcgiが実行できません3

trm

総合スコア117

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2018/08/14 07:44

編集2018/08/20 08:58

CentOS7でindex.htmlから以下のcgi(60a11.cgi)を呼び出しても、

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

と表示され目的のcgiが表示されません。
60a11.cgiは以下のコードです。

Perl

1#!/usr/bin/perl 2use strict; 3use utf8; 4 5print "Content-type: text/html\n\n"; 6print <<"HTML"; 7<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8<html> 9<head> 10<title>ユーザーアカウント登録</title> 11</head> 12<body bgcolor="#000066" text="#000000" link="#0000ee" alink="#0000ee"vlink="#551a8b"> 13<form method="post" form action="67b32.cgi" ENCTYPE="multipart/form-data"> 14<table border="0"> 15<tr> 16<td><font color="#ff0000"><label for="ID">希望ユーザーID</label></font></td> 17<td><input type="text" name="ID" size="40" maxlength="30"><br></td> 18</tr><tr> 19<td><font color="#ff0000"><label for="pass">希望パスワード</label></font></td> 20<td><input type="password" name="pass" size="40" maxlength="30"><br></td> 21</tr><tr> 22<td><font color="#ff0000"><label for="pass2">パスワード確認</label></font></td> 23<td><input type="password" name="pass2" size="40" maxlength="30"><br></td> 24</tr><tr> 25<td><font color="#ff0000"><label for="shimei">氏名</label></font></td> 26<td><input type="text" name="shimei" size="40" maxlength="30"><br></td> 27</tr><tr> 28<td><font color="#ff0000"><label for="kaisyamei">会社名</label></font></td> 29<td><input type="text" name="kaisyamei" size="40" maxlength="30"><br></td> 30</tr><tr> 31<td><font color="#ff0000"><label for="mail">メールアドレス</label></font></td> 32<td><input type="text" name="mail" size="40" maxlength="30"><br></td> 33</tr><tr> 34<td><font color="#ff0000"><label for="syouhinmei">商品名</label></font></td> 35<td><input type="text" name="syouhinmei" size="40" maxlength="30"><br></td> 36</tr><tr> 37<td><font color="#ff0000"><label for="nedan">商品値段</label></font></td> 38<td><input type="text" name="nedan" size="40" maxlength="30"><br></td> 39</tr><tr> 40<td><font color="#ff0000"><label for="q1">商品カテゴリー</label></font></td> 41<td><input type="radio" name="q1" value="【書籍(実物商品)】"><font color="#ff0000">書籍</font> 42<input type="radio" name="q1" value="【CD(実物商品)】"><font color="#ff0000">CD</font> 43<input type="radio" name="q1" value="【DVD(実物商品)】"><font color="#ff0000">DVD</font> 44<input type="radio" name="q1" value="【ソフトウェア(実物商品)】"><font color="#ff0000"> 45ソフトウェア(実物)</font> 46<input type="radio" name="q1" value="【ビデオゲーム(実物商品)】"><font color="#ff0000">ビデオゲーム(実物)</font> 47<input type="radio" name="q1" value="【電子書籍(電子ファイル)】"><font color="#ff0000">電子書籍</font> 48<input type="radio" name="q1" value="【ソフトウェア(電子ファイル)】"><font color="#ff0000">ソフトウェア(電子ファイル)</font> 49<input type="radio" name="q1" value="【音楽(電子ファイル)】"><font color="#ff0000">音楽(電子ファイル)</font> 50<input type="radio" name="q1" value="【ビデオゲーム(電子ファイル)】"><font color="#ff0000">ビデオゲーム(電子ファイル)</font> 51<input type="radio" name="q1" value="【動画(電子ファイル)】"><font color="#ff0000">動画(電子ファイル)</font><br></td> 52</tr><tr> 53<td><font color="#ff0000">ファイル1:画像ファイル(jpg/gif/png/bmpファイル)<br>ファイル2:中身立ち読みファイル(pdfファイル)(無い人はアップロードする必要はありません)<br>ファイル3:売り物となるコンテンツ(実物商品を扱う場合はアップロードする必要はありません)をアップロードしてください</font><br></td> 54</tr><tr> 55<td><font color="#ff0000">ファイル1を選択:</font></td> 56<td><font color="#ff0000"><input type="file" name="file1"></font><br></td> 57</tr><tr> 58<td><font color="#ff0000">ファイル2を選択:</font></td> 59<td><font color="#ff0000"><input type="file" name="file2"></font><br></td> 60</tr><tr> 61<td><font color="#ff0000">ファイル3を選択:</font></td> 62<td><font color="#ff0000"><input type="file" name="file3"></font><br></td> 63</tr><tr> 64<td><textarea name="mojijouhou" rows="4" cols="40">商品情報をご記入ください。</textarea><br></td> 65</tr><tr> 66<td><input type="submit" onclick="location.href'67b32.cgi'" value="送信"> 67<input type="reset" value="リセット"></td> 68</tr> 69</table> 70</form> 71</body> 72</html> 73HTML 74exit;

WINDOWSで作ったperlをCentOS7に移植しました。
error_logは以下の通りです。

error_log

1[Tue Aug 14 16:30:29.805758 2018] [core:error] [pid 2530] (13)Permission denied: [client 127.0.0.1:35185] AH00132: file permissions deny server access: /var/www/html/buhin/btn056_09_4.gif, referer: http://127.0.0.1/ 2[Tue Aug 14 16:30:29.805935 2018] [core:error] [pid 2531] (13)Permission denied: [client 127.0.0.1:35186] AH00132: file permissions deny server access: /var/www/html/buhin/btn056_09_5.gif, referer: http://127.0.0.1/ 3[Tue Aug 14 16:30:29.808047 2018] [core:error] [pid 2528] (13)Permission denied: [client 127.0.0.1:35188] AH00132: file permissions deny server access: /var/www/html/buhin/btn056_09_7.gif, referer: http://127.0.0.1/ 4[Tue Aug 14 16:30:35.294682 2018] [cgi:error] [pid 3667] [client 127.0.0.1:35189] AH01215: (8)Exec format error: exec of '/var/www/cgi-bin/60a11.cgi' failed, referer: http://127.0.0.1/ 5[Tue Aug 14 16:30:35.297373 2018] [cgi:error] [pid 3667] [client 127.0.0.1:35189] End of script output before headers: 60a11.cgi, referer: http://127.0.0.1/

このテーマでこれが3回めです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2018/08/28 18:31

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
guest

回答4

0

当該スクリプトをコマンドラインで実行してみると、次のような出力が得られるはずです。

Content-type: text/html Wide character in print at /home/kdoi2/work/test3.pl line 6. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>ユーザーアカウント登録</title> 以下略

この3行目のwide...が直接の原因ですね。これがあるのでcgiとしては「不正なヘッダー」とみなされ、表記のエラーになるわけです。

どうしてこうなるかというと、日本語のエンコード処理を何にもしてないからです。

そして、その辺のことは過去の質問でとうに指摘済みなのです。質問者氏がアドバイスを聞かないから何の進捗もなく「第3の質問」を余儀なくされているという流れですね。

投稿2018/08/14 09:36

KojiDoi

総合スコア13669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/14 11:00

Windowsでのデバッグでも、ちょっと工夫すればそのエラーメッセージに遭遇できますね。 (自分の回答にも拝借いたしました。)
angel_p_57

2018/08/14 12:40

> この3行目のwide...が直接の原因ですね。これがあるのでcgiとしては「不正なヘッダー」とみなされ、表記のエラーになるわけです。 その指摘事項、精査されてますか? "Wide character in print at..."は標準エラーに出るので、標準出力に出るヘッダーとは通常混じりませんよ。 ※なので「スクリプトが実行されたのなら」エラーログに出力されるもの
KojiDoi

2018/08/14 12:47

>標準エラーに出るので 本件については標準出力でもエラー出力でも関係ないです。cgiスクリプトからの出力を処理する側は一緒くたにして受け取っているようですよ。
angel_p_57

2018/08/14 13:17

> 本件については標準出力でもエラー出力でも関係ないです。cgiスクリプトからの出力を処理する側は一緒くたにして受け取っているようですよ。 いや、なので、それマトモに精査してるんですか? とコメントしたわけなのですが。 ヘッダーが不正だと、良くあるのは"malformed header from script."というログなのですが。そうでなく"Exec format error"と出てるのにも関わらず、その"Wide..."というエラーメッセージが直接の原因と判断した根拠はなんですか、と。 ついでに言うと、エラーログに出ている(8)は、execveの時のerrnoの値ENOEXECでしょうね、多分。( gifファイルの(13)はEACCESS ) なので、そもそもperlスクリプトは実行すらできていないと見るのが妥当かと思いますが。
trm

2018/08/19 18:46

KojiDoiさんに質問ですが、perlでは、まっとうなコードを書いているつもりなのですが、そうなるっていうことは、perlではまっとうなコードを書いても文字化けその他のエラーが出る、ということになるのでしょうか?正直、まっとうなコードを書いているのに文字化けが生じて、文字化けの原因は何かがさっぱり分からない状況で、調べようもありません。文字化けの問題・Internal Server Errorはぶっちゃけ何が原因なのでしょうか?
guest

0

ベストアンサー

internal server error の原因

cgiスクリプトファイルに実行権限が付与されていないからでしょう。
適切な実行権限を付与してください。
error_logの下2行はどちらもこれが原因です。
(httpのレスポンスヘッダ、つまり Content-type云々が出力される前にプログラムが終わっちまったよ! というerror)

Wide character 云々のメッセージについて

直接の原因は、use utf-8しているのにutf-8フラグを適切に処理していないからです。
多分よくわからないと思うので、use utf-8;の下にbinmode(STDOUT, ":utf8");を加えるか、use utf-8;を削除してください。それで警告メッセージは出なくなります。

perlを続けていくのであれば、いずれはちゃんとuse utf-8とutf-8フラグの意味を理解してほしいですが、現状のレベル(スクリプトで内容をそのまま出力する)では「おまじない」程度で良いかと思います。いずれ文字列処理をしだしたら困ることになります。

投稿2018/08/20 13:06

hope_mucci

総合スコア4447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

trm

2018/08/20 13:44

今日はもう寝ますので、上手く行ったら、明日お礼をいわせてください。
trm

2018/08/20 23:52

出来ました!本当にありがとうございました!
guest

0

取り敢えず、エラーログにそれっぽい情報があるわけなので、それで検索かけて情報をまず絞り込んでは。

Exec format error: exec of '/var/www/cgi-bin/60a11.cgi' failed

とあるので、有効な実行可能形式とみなされてないんでしょう。ありがちなのは、改行コードの違いで、余分な \r(CR) が紛れ込んでいることでしょうか。

追記--
元のスクリプトがWindows環境由来であれば、BOM付きUTF-8等になっているかもしれません。ファイルの先頭2byteが正確に"#!"になっている必要がありますので、ファイルの先頭3byteを占めるBOMがあると、実行可能なプログラムと見做されなくなりますから、これも原因としてあり得ます。

あと、cgiそのものには関係ないですが、

Permission denied: (略) file permissions deny server access: /var/www/html/buhin/btn056_09_4.gif

これ、画像ファイルも実行可能プログラムとみなされてませんか。( そして実行権がないので permission denied となる )
Apacheの設定でScriptAliasなんかを使うと、指定のディレクトリ内のファイル、全部がcgiプログラムと見做されます。そういう場合、画像等の非プログラムファイルを同じ場所に置いてはいけません。

ScriptAliasを使っているのであれば、画像等のファイルを別のディレクトリに移す ( それに合わせてプログラム内のファイル・ディレクトリ情報を調整する ) か、ScriptAliasの代わりにAliasSetHandlerあたりで個別にcgi実行用の設定をするとか、考えた方が良いと思います。

投稿2018/08/14 12:50

編集2018/08/14 13:50
angel_p_57

総合スコア1672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

trm

2018/08/19 19:42

ありがとうございました。問題はCRではなく、BOM付きUTF-8でもありませんでした。btn056_09_4.gifなどは画像ボタンなのでパーミッションを755に設定しました、そうしたところ今までindex.htmlに表示されなかった画像ボタンが表示されるようになりました。
guest

0

Permission denied
→webサーバープログラムがそのファイルを読み込もうとしたけど、アクセス権が不足していて拒否された。
→→ファイルのオーナーやグループを見直しするか、アクセス権を見直しする。面倒ならrをオーナー、グループ、他者に対して付与する。

Exec format error
→cgiファイルの起動に関わる設定がおかしいとか、/usr/bin/perlの位置にPerlが置いてないとか。
→→サーバーの仕様を再確認。

加えて、
ファイル保存時のエンコーディングがおかしい可能性。
UTF-8かどうか、BOMなしかどうかを点検。


コマンド・プロンプトでActivePerlに処理させてみたら、
一見標準出力は大丈夫そうなんだけど、
エラー出力として

C:\Users\m6u\Documents>perl teratail.pl | more
Wide character in print at teratail.pl line 6.
Content-type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>繝ヲ繝シ繧カ繝シ繧「繧ォ繧ヲ繝ウ繝育匳骭イ</title>

みたいになってるので、これも対策したほうがよろしいかと。
文字列を print すると「Wide character in print at」と出力されて困った - 英語とプログラミング気まぐれ日記

投稿2018/08/14 07:53

編集2018/08/15 03:17
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

trm

2018/08/19 19:43

ご回答ありがとうございました。それではperlでは日本語は使えない、ということですか?
trm

2018/08/20 06:46

私の場合はどのようにすればいいか教えていただけませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問