2017-02-20 6 views
-1

ここに私のサブルーチンがあります。しかし、私がハイパーリンクをクリックすると、それが指しているファイルを開くことが私の期待では何もしません。Perl:ファイルプロトコル

my $q= new CGI; 
    my $tablecontent=[$q->th(['Date', 'Count'])]; 
    for (sort keys %data) { 
    push @$tablecontent, $q->td([ $_, qq{<a href="file://home/niraj/apache2/log_files/result.$_">$data{$_}} ]) ; 
    } 
    print $q->table({ border => 1, -width => '20%'}, 
        $q->Tr($tablecontent), 
       ); 
+4

コード例のその他の問題は数えませんが、ブラウザで**クリック** *を意味しますか?*はいの場合、Perlコードに何も含まれていない場合... – jm666

答えて

3

あなたのPerlコードは期待どおりに動作しています。問題は、Webの仕組みを理解することにあります。 //home/niraj/apache2/log_files/result.xxxが

file://プロトコルが示す:

  • ファイル:

    あなたはこのように見えるリンクのリストをユーザに提示しますローカルファイルシステム(ブラウザが実行されているシステムのローカル)上で利用可能なファイルへのリンク。それらのリンクがうまくいくことはほとんどありません。

    ファイルへのWebアクセス可能なリンクを作成する必要があります。最も簡単な方法は、log_filesディレクトリからWebサーバーのドキュメントルートの下にあるディレクトリへのシンボリックリンクを作成することです。

    あなたが考慮するかもしれないいくつかの他の事:

    • 間接オブジェクト記法(new CGI)は、問題を見つけるためにいくつかのハードにつながることができます。代わりにCGI->newを使用する方がよいでしょう。
    • CGI.pmのHTML作成方法はdeprecated for some timeです。代わりにテンプレートシステムを検討してください。
    • CGIがPerlでWebアプリケーションを作成する最善の方法であったのは、数年前のことです。 alternativesをご覧ください。
+0

入手しました。どうもありがとう。 現在問題なく動作しています。 –