[點點搬家]初試mod_perl+apache 之四 第一個Handler

[四年前的博客了, 用perl寫個後端,挺好玩的]


被Handler的問題卡了很久,主要是網上目前的資料都是mod_perl 1.x的,很多httpd.conf直接寫的都不一樣,最終找到一個比較好的document,鏈接爲:http://perl.apache.org/docs/2.0/user/intro/start_fast.html,還不錯。


廢話少說,直接上最簡配置:

LoadFile "C:/Perl/bin/perl512.dll"

LoadModule perl_module modules/mod_perl.so

#這兩句就不廢話了


ScriptAlias /perl/ "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/"

#這裏最好轉義一下,不是原來的Alias了,是ScriptAlias


<Location /perl/>

      SetHandler perl-script

      PerlResponseHandler ModPerl::Registry #原來是PerlHandler,這裏需要注意

      PerlOptions +ParseHeaders

      Options +ExecCGI

      Order allow,deny

      Allow from all 

</Location>


配好,重啓Apache,寫一個腳本試驗一下:

#!c:/perl/bin/perl.exe


print "Content-type: text/html\r\n\r\n";

print "Hello World<br>";


foreach ( @INC ){ #@INC是一個保存路徑的數組,打印出來方便看一下,找Handler的時候就會匹配這裏面的路徑

print $_."<br>";

}

這個perl文件放到C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/helloWorld.pl,在瀏覽器輸入http://localhost/perl/helloWorld.pl,會出現

Hello World
C:/adeWorkspace #這句是後加的,等會解釋
c:\Perl
C:/Perl/site/lib
C:/Perl/lib
.
C:/Program Files/Apache Software Foundation/Apache2.2

如果等會設計的Handler找不到,error.log中也會打印出這些信息。

這裏有個問題就是如果我把Handler放到類似C:/Program Files/Apache Software Foundation/Apace2.2/cgi-bin/xxxx下的時候,打印出來會類似於:

C:/Program<br>

Files/Apache<br>

...

貌似每個空格都都給我split成爲了一個新的路徑,我試圖加了單引號,雙引號,轉義符都沒有用。

所以最後我把lib放到了c:/adeWorkspace下,而且我看到一個文章裏說lib最好也不要和script放到同樣一個目錄,不太清楚爲什麼要這樣,希望又能能像我解釋一下,謝謝。#見後面紅色解釋


然後寫一個Handler,

#!c:/perl/bin/perl.exe

#file:MyApache2/Rocks.pm

#----------------------

package MyApache2::Rocks;


use strict;

use warnings;


use Apache2::RequestRec ();

use Apache2::RequestIO ();


use Apache2::Const -compile => qw(OK);


sub handler {

    my $r = shift;


    $r->content_type('text/plain');

    print "mod_perl 2.0 rocks!\n";


    return Apache2::Const::OK;

}

1;

保存到C:/adeWorkspace/MyApache2/Rock.pm,還需要一個startup.pl

use lib qw(C:/adeWorkspace); #這裏用了qw,所以空格會被split,路徑裏不要有空格!!

1;

這個文件放到C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/startup.pl即可。

然後修改httpd.conf:

PerlRequire 'c:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/startup.pl'

<Location /rocks>

      SetHandler perl-script

      PerlResponseHandler MyApache2::Rocks

</Location>

這樣,訪問http://localhost/Rocks即可得到輸出

mod_perl 2.0 rocks!


Ok, 大功告成!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章