リアルタイムに結果を表示する方法

このQ&Aのポイント
  • リアルタイムに結果を表示するためには、cgiプログラムを使用します。以下のコードを参考にしてください。
  • 出力結果を一行ずつリアルタイムに表示するためには、処理を途中で中断する必要があります。
  • 中断した処理を再開するためには、JavaScriptなどのフロントエンド技術を使用することができます。
回答を見る
  • ベストアンサー

一行ずつリアルタイムに結果を表示したい

cgiプログラムで print "<html><body>"; foreach(0..1000000000000){ $n++; print "$n<br>\n"; } print "</body></html>"; というかんじで結果を出力しようとすると 出力の際、処理されたところまでいったん表示され 何分かたってまた、処理されたところまでを表示されます。 例)1~10000表示→3分後に10001~20000を表示 これでは10001が処理できているのかが3分後にならないとわかりません。 そのため出力結果を一行ずつリアルタイムに表示できるようにしたいのですが、 どのように処理したら良いでしょうか? お教え下さい。よろしくお願いします。

  • CGI
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
noname#25358
noname#25358
回答No.2

 えとですね。  インターネットというのは、電話のように常にデータのやり取りがされ続けているわけではないわけです。  インターネットを使う際の根本となる通信方式である「TCP/IP」は、「パケット」と呼ばれる単位を使って通信しています。  パケット方式とは、1キロバイトだとか、2キロバイトだとか、あるまとまった大きさの情報をやりとりすることをいいます。  なので、あなたがたとえば「123456789」という情報を受け取りたいと思ったとき、これらはパケット単位に分割され、   1234 56789  という2つのデータになって、それぞれ個別にあなたのパソコンに届けられます。  ところが、このパケットというのがくせもので、TCP/IPは、それぞれのデータが「いつ」「どのような経路で」届くか、という規則は決められていません。  インターネットがときどきバッタリと止まってしまうのはそのためです。  なので最悪、1234は普通に最短経路で届いたのに、56789は、アフリカのプロバイダを経由したために、極端に遅くなってしまった、ということが起こります。また、到着の順序が逆になってしまったりもします。  実際に、今この通信を行っている際にも、この現象は普通に起こっています。  インターネット経由で通信を行っている限り、この制限を何とかするのは無理なのです。  ただし、JavaScript を使って擬似的にお望みの表示をさせたり、またはネットワークが自分ちの中だけで完結している場合には専用の表示ソフトを用意することでナントカすることは可能です。

その他の回答 (1)

noname#25358
noname#25358
回答No.1

 残念ですができません。  これはHTTPプロトコルの制限です。  Perl ではどうしようもないのです。

FUCKIE
質問者

補足

アドバイスありがとうございます。 perlでは無理ですか・・・。 ところでperlでは無理というのはperlのみではこの現象を解決できないのか、 perlを使っているからこのような現象が発生するのでしょうか。 お教え下さい。 また、前者であるならば、解決できる手段をお教え下さい。 HTTPプロトコルについて少し調べてみたのですが、 制限というのはcgiファイルの入っているサーバーのApache を書き換えれば制限を解除できるということですか? HTTPプロトコルのやさしく詳しい説明のあるページ等 ご存知であればお教え下さい。 現在はwin98にApacheをインストールしてローカルサーバー として使っています。 よろしくお願いいたします。

関連するQ&A

  • エラー表示

    CGIがエラーを出すと、サーバーが500番エラーを表示しますよね。 そのページを.htaccessのErrorDocumentを使って、自分で定義したものにできたのですが、そのエラーページをCGIにして、どこかにエラーになったページが吐いたエラー出力が入ってないかと思ったのですが、入ってないのでしょうか? -------- #!/usr/bin/perl # hoge.cgi # エラーするCGI die "hoge!"; -------- #!/usr/bin/perl # error.cgi # 500エラーページなCGI print "$_: $ENV{$_}<br>\n" foreach(sort keys %ENV); # ここでもない print foreach(<STDIN>); # ここでもない print foreach(<STDERR>); # ここでもない print ・・・どこかに "hoge!" が入ってないでしょうか? -------- # .htaccess ErrorDocument 500 /error.cgi Apache/1.3.24 Server perl 5.005_03 built for sun4-solaris

    • 締切済み
    • CGI
  • perl で環境変数を表示できない

    perlの初心者です。下記のCGIを実行しましたが、全く表示しません。 最初の「環境変数」と言う文字も表示しません。 どこか初歩的なエラーがあると思いますが、わかりませんので質問させていただきます。 --- #!/usr/local/bin/perl print "Content-type: text/html", "\n\n"; print "<HTML><BODY>", "\n"; print "<H1>環境変数</H1><HR>", "\n"; foreach my $key( keys %ENV ){ print "$key: $ENV{$key}<BR>", "\n"; } print "<HR>", "\n"; print "</BODY></HTML>", "\n";

    • ベストアンサー
    • Perl
  • CGIスクリプトの結果が表示しない

    windows2000 proffesinal sp.4でActivePerl5.8.8..819・・・・、Apache2.054の環境で"10日で覚えるPerlCGI"を使用。IEバージョンは5でページを「表示できません」のエラーがときたまでる。 上記環境でApacheは正常に動作。TeraPad使用。CGIスクリプト1-2.cgiとして作成。 #! C:/perl/bin/perl # CGIヘッダーの出力 print "Content-type: text/html\n\n"; print "<DOCTYPE HTML PUBLIC \n-//W3C//DTD HTML4.01//EN\">\n"; print "<html>\n"; print "<head><title>Hello HTML</title></head>\n";# htmlの出力 print "<body><p>こんにちわ。これはHTML文書の例です。</p></body>\n"; print "</html>\n"; 上記スクリプトを1-2.cgiとしてApaghe2-htdocs-tendaysに保存 IEのURLに:: http://127.0.0.1/tendays/1-2.cgiと入力・・・そして下記の表示が出ました。 #! C:/perl/bin/perl# CGIヘッダーの出力print "Content-type: text/html\n\n";# htmlの出力print "\n"print こんにちわ。これはHTML文書の例です。 \n";print" "; 原因を教えてください。windows7 64bit でもこのようにスクリプトだけが表示されたことがあり(perl,Apacheのバージョンも最近のものを使用)その時は、相談室にお世話になりながら自分の 未熟さにあきれお尋ねしなかったのですが、最後HTML5を習えばのお答えで、今。参考書を買って人通り見たのですが、フォームメールや掲示板はやはり裏でCGIが動作しているので。また古いパソコンで始めたのでしたが最初からつまずきました。doreamweaber もあるのですが、能力がないのに 人様の作成したフりーソフトをスクリプトの意味が分からず貼り付けるのはいささか情けないかなと 考えています。最終的にはそうなると思っていますが、できればsendmailを使用したCGIスクリプトとかんがえています,が。とりあえず一歩一歩づつと思っています。10年以上前に作成したホームページをアップしっぱなしです。メールが送信できません。当時のプロバイダーがocnでその時提供されたもので裏でCGIが動いているなんて知りませんでした。今biglobeです。 自分の作りかけのホームページのURLは http://www7b.biglobe.ne.jo/~asunarohei/indexhei.htmlです。メールのスクリプトを貼り付けたいのです。それと掲示板をリンクさせたいです。 わからないことだらけで、ご迷惑かけますがよろしくお願いします。

  • HTMLのファイルにCGI処理結果を表示する

    まずトップページはhtmlで作ります。 そのトップページにいつも変化する所があるのでcgiで処理を施したものをhtmlに貼り付けたいと思っています。 その場合に例えば画像を出力させる場合は <IMG src="cgi-local/top.cgi"> で指定し、 #!/usr/local/bin/perl print "Content-type: image/jpeg\n\n"; open FH,"<../image.jpg"; binmode FH; binmode STDOUT; print while(<FH>); close FH; をやれば動かせますが、これを画像ではなくhtmlを表示させるためには print "Content-type: image/jpeg\n\n"; を print "Content-type: text/html\n\n"; に変更する事により可能だと思いやってみたのですが、うまく出力できませんでした。 cgi処理をうまくhtmlに貼り付ける方法があるのでしょうか。どうか教えて頂けないでしょうか?お願します。(涙)

    • ベストアンサー
    • CGI
  • CGIにおいて、エンコード・文字化けの対処方法

    以下のようにCGIを記述しております。(本日勉強したてで間違いだらけでしたら申し訳ございません。) ============= #!/usr/local/bin/perl print "Content-type: text/html; charset=EUC-JP\n"; print "\n"; print "<html>\n"; print "<title>Hello CGI</title>\n"; print "<body>\n"; print "<h1>Hello CGI!</h1>\n"; print "<hr>\n"; print qq( 上記のCGIファイルのメッセージは、次のように記述しました。<br><br> #!/usr/local/bin/perl<br><br> print "Content-type: text/html\\n";<br> print "\\n";<br> print "&lt;html&gt;\\n";<br> print "&lt;title&gt;Hello CGI&lt;/title&gt;\\n";<br> print "&lt;body&gt;\\n";<br> print "&lt;h1&gt;Hello CGI!&lt;/h1&gt;\\n";<br> print "&lt;/body&gt;";<br> print "&lt;/html&gt;";<br><br> ); print "</body>"; print "</html>"; =========== 以上をIE7で表示しますと、エンコードが西ヨーロッパ言語になって文字化けを起こしてしまいます。 何か記述の仕方が間違っているのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • tail & grep の結果表示をリアルタイムに表示させる方法

    tail & grep の結果表示をリアルタイムに表示させる方法 現在以下のようなコマンドを実行しています。 tail -f ログファイル名 | grep -E "正規表現" | grep -E -v "正規表現" で、リアルタイムに表示してほしかったのですがだいぶ遅れてでないと出力されません。 正確にはいろいろ操作をしてログを多めに出さないと出力されないようです。 どうやら画面出力までにはバッファされているようです。 どこでバッファされているか分からないのですが、 とにかくタイムラグ無く(もしくは少なく)リアルタイムに出すようにしたいです。 tail & grep の結果表示をリアルタイムに出力する方法を教えてください。 よろしくお願いします。

  • SSIの表示

    perl/cgiの勉強中でssiでhtmlへの埋め込みを行いたいのですが、何故か出力が2度されてしまいます。 以下実行プログラムと結果です。 [test.cgi] #!/usr/bin/perl -w use strict; use warnings; print "Content-type:text/html\n\n"; print "hoge"; exit; [test.shtml] <html> <head></head> <body> <!--#include virtual="/cgi-bin/test.cgi"--> </body> </html> [出力] hogehoge …となってしまいます。どなたかご教示願えませんでしょうか? よろしくお願いいたします。

    • 締切済み
    • CGI
  • エラー表示の意味を解説してください

    CGI初心者です。自分の端末でサーバ設定し、テスト中の段階です。htmlファイルはブラウザからきちんと表示されました。が、CGIファイルを表示させようとすると、 CGI エラー - Content-Type ヘッダが正しくありません。 CGI 出力メッセージ: Can't open perl script "C:\www\hiro\ISO": No such file or directory とエラーがでます。ちなみに、スクリプトには #!/usr/bin/perl print"Content-type: text/html\n\n"; print"<HTML>\n"; print"<HEAD>\n"; print"<TITLE>CGI No1</TITLE>\n"; print"</HEAD>"; print"<BODY>\n"; print"CGIプログラム No.1,テスト成功!\n"; print"</BODY>\n"; print"</HEAD>\n"; と記述しました。なにがいけないのか教えてください。

    • ベストアンサー
    • CGI
  • TABを表示させる方法

    以前のテキストファイルのhtmlタグ<>を文字として表示されるに続いての質問ですが、 #!/usr/bin/perl main:{ $file = 'use1.txt'; print "Content-type: text/html\n\n"; print "<HTML><BODY>\n"; print "<TITLE>表\示</TITLE>\n"; open( FH, $file) or die "Can't open"; foreach( <FH> ){ $_ =~ s/</</g; $_ =~ s/>/>/g; print $_ ."<br>"; } close(FH); print "</BODY></HTML>\n"; } 表示するのにTABが抜けて、全て左詰めという感じになります。 TABを表示させるにはどうしたら宜しいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • functionの結果が表示できない

    functionの結果$timeが、function内の print $time; の結果と、 bodyに書いた結果表示の print $time; では、表示が異なってしまいます。 因みに、body内の$timeにprintを付けないと、 結果はまったく表示されません。 function datesub($str1,$str2){ print $str1 . " "; print $str2 . " "; $strs1 = explode(":",$str1); print $strs1[0] . " "; print $strs1[1] . " "; $strs10 = $strs1[0] * 60; print $strs10 . " "; $time1 = $strs10 + $strs1[1]; print $time1 . " "; $strs2 = explode(":",$str2); print $strs2[0] . " "; print $strs2[1] . " "; $strs20 = $strs2[0] * 60; print $strs20 . " "; $time2 = $strs20 + $strs2[1]; print $time2 . " "; $time = $time1 - $time2; print $time . " "; } ---------- $str1 = $col["ArrTime"]; $str2 = $col["DepTime"]; datesub1($str1,$str2); $body .= "<td>" . print $time . "</td>\n"; ---------- どうして表示できないのでしょうか? 因みに、function内のprintの結果は、 07:35:00 06:30:00 07 35 420 455 06 30 360 390 65 と、最終的に$timeは 65 で表示されていて、 body内の$timeは 1 で表示されてしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう