Codebase list libapache-asp-perl / a4f2eaf
New upstream version 2.63 gregor herrmann 6 years ago
49 changed file(s) with 4421 addition(s) and 4883 deletion(s). Raw diff Collapse all Expand all
+157
-175
ASP.pm less more
33
44 package Apache::ASP;
55
6 $VERSION = 2.62;
6 $VERSION = 2.63;
77
88 #require DynaLoader;
99 #@ISA = qw(DynaLoader);
20142014
20152015 sub get_dir_config {
20162016 my $rv = shift->get(shift);
2017 if(lc($rv) eq 'off') {
2017 if(!$rv || lc($rv) eq 'off') {
20182018 $rv = 0; # Off always becomes 0
20192019 }
20202020 $rv;
20512051
20522052 =pod
20532053
2054 =encoding ISO8859-1
2055
20542056 =head1 NAME
20552057
20562058 Apache::ASP - Active Server Pages for Apache with mod_perl
21292131 Often, installing the mod_perl part of the Apache server
21302132 can be the hardest part. If this is the case for you,
21312133 check out the FAQ and SUPPORT sections for further help,
2132 as well as the "Build Apache" notes in this section.
2133
2134 Please also see the mod_perl guide at http://perl.apache.org/guide
2134 as well as the "Modern Linux Distributions" notes in this section.
2135
2136 Please also see the mod_perl site at http://perl.apache.org/
21352137 which one ought to give a good read before undertaking
21362138 a mod_perl project.
21372139
21402142 You may download the latest Apache::ASP from your nearest CPAN,
21412143 and also:
21422144
2145 http://search.cpan.org/dist/Apache-ASP/
21432146 http://cpan.org/modules/by-module/Apache/
2144 ftp://ftp.duke.edu/pub/perl/modules/by-module/Apache/
21452147
21462148 As a Perl developer, you should make yourself familiar with
21472149 the CPAN.pm module, and how it may be used to install
21872189 Please note that you must first have the Apache Web Server
21882190 & mod_perl installed before using this module in a web server
21892191 environment. The offline mode for building static html at
2190 ./cgi/asp may be used with just perl.
2191
2192 =head2 Win32 / Windows Install
2193
2194 If you are on a Win32 platform, like WinNT or Windows 2000,
2195 you can download the win32 binaries linked to from:
2196
2197 http://perl.apache.org/distributions.html
2198
2199 From here, I would recommend the mod_perl binary installation at:
2200
2201 ftp://theoryx5.uwinnipeg.ca/pub/other/
2202
2203 and install the latest perl-win32-bin-*.exe file.
2204
2205 Randy Kobes has graciously provided these, which include
2206 compiled versions perl, mod_perl, apache, mod_ssl,
2207 as well as all the modules required by Apache::ASP
2208 and Apache::ASP itself.
2209
2210 You may also try the more recent Perl-5.8-win32-bin.exe
2211 distribution which is built on Apache 2. This should be
2212 treated as BETA release software until mod_perl 2.x is
2213 released as stable. Some notes from Randy Kobes about
2214 getting this release to work are here:
2215
2216 After installing this distribution, in Apache2\conf\perl.conf
2217 (pulled in via Apache2\conf\httpd.conf) there's directives that
2218 have Apache::ASP handle files placed under the Apache2\asp\
2219 directory. There should be a sample Apache::ASP script there,
2220 printenv.html, accessed as http://127.0.0.1/asp/printenv.html
2221 which, if working, will print out your environment variables.
2222
2223 =head2 WinME / 98 / 95 flock() workaround
2224
2225 For those on desktop Windows operation systems, Apache::ASP v2.25 and
2226 later needs a special work around for the lack of flock() support
2227 on these systems. Please add this to your Apache httpd.conf to
2228 fix this problem after mod_perl is installed:
2229
2230 <Perl>
2231 *CORE::GLOBAL::flock = sub { 1 };
2232 </Perl>
2233 PerlModule Apache::ASP
2234
2235 Please be sure to add this configuration before Apache::ASP is loaded
2236 via PerlModule, or a PerlRequire statement.
2237
2238 =head2 Linux DSO Distributions
2239
2240 If you have a linux distribution, like a RedHat Linux server,
2241 with an RPM style Apache + mod_perl, seriously consider building
2242 a static version of the httpd server yourself, not DSO.
2243 DSO is marked as experimental for mod_perl, and often does
2244 not work, resulting in "no request object" error messages,
2245 and other oddities, and are terrible to debug, because of
2246 the strange kinds of things that can go wrong.
2247
2248 =head2 Build Apache and mod_perl
2249
2250 For a quick build of apache, there is a script in the distribution at
2251 ./make_httpd/build_httpds.sh that can compile a statically linked
2252 Apache with mod_ssl and mod_perl. Just drop the sources into the
2253 make_httpd directory, configure the environments as appropriate,
2254 and execute the script like this:
2255
2256 make_httpd> ./build_httpds.sh
2257
2258 You might also find helpful a couple items:
2259
2260 Stas's mod_perl guide install section
2261 http://perl.apache.org/guide/install.html
2262
2263 Apache Toolbox
2264 http://www.apachetoolbox.com/
2265
2266 People have been using Apache Toolbox to automate their
2267 complex builds with great success.
2192 ./cgi/asp-perl may be used with just perl.
2193
2194 =head2 Modern Linux Distributions
2195
2196 If you have a modern Linux distribution like CentOS or Ubuntu,
2197 you will likely have the easiest path by using the repository tools to
2198 automatically install mod_perl and Apache before installing Apache::ASP via CPAN.
2199
2200 For example for CentOS, this will install mod_perl into your apache httpd, the latter
2201 likely being installed already by default on your server:
2202
2203 bash> sudo yum install mod_perl-devel.x86_64
2204
2205 For Ubuntu this would be done like this:
2206
2207 bash> sudo apt-get install libapache2-mod-perl2
22682208
22692209 =head2 Quick Start
22702210
23012241 You will know that Apache::ASP is working normally if you
23022242 can run the scripts in ./site/eg/ without any errors. Common
23032243 problems can be found in the FAQ section.
2244
2245 =head2 Build static Apache and mod_perl for Apache 1.3.x
2246
2247 For a quick build of apache, there is a script in the distribution at
2248 ./make_httpd/build_httpds.sh that can compile a statically linked
2249 Apache with mod_ssl and mod_perl. Just drop the sources into the
2250 make_httpd directory, configure the environments as appropriate,
2251 and execute the script like this:
2252
2253 make_httpd> ./build_httpds.sh
2254
2255 You might also find helpful a couple items:
2256
2257 Stas's mod_perl guide install section
2258 http://perl.apache.org/guide/install.html
2259
2260 Apache Toolbox
2261 http://www.apachetoolbox.com/
2262
2263 People have been using Apache Toolbox to automate their
2264 complex builds of Apache 1.3.x with great success.
2265
2266 =head2 Win32 / Windows Install
2267
2268 If you are on a Win32 platform, like WinNT or Windows 2000,
2269 you can download the win32 binaries linked to from:
2270
2271 http://perl.apache.org/download/binaries.html#Win32
2272
2273 and install the latest perl-win32-bin-*.exe file.
2274
2275 Randy Kobes has graciously provided these, which include
2276 compiled versions perl, mod_perl, apache, mod_ssl,
2277 as well as all the modules required by Apache::ASP
2278 and Apache::ASP itself.
2279
2280 After installing this distribution, in Apache2\conf\perl.conf
2281 (pulled in via Apache2\conf\httpd.conf) there's directives that
2282 have Apache::ASP handle files placed under the Apache2\asp\
2283 directory. There should be a sample Apache::ASP script there,
2284 printenv.html, accessed as http://127.0.0.1/asp/printenv.html
2285 which, if working, will print out your environment variables.
2286
2287 =head2 WinME / 98 / 95 flock() workaround
2288
2289 For those on desktop Windows operation systems, Apache::ASP v2.25 and
2290 later needs a special work around for the lack of flock() support
2291 on these systems. Please add this to your Apache httpd.conf to
2292 fix this problem after mod_perl is installed:
2293
2294 <Perl>
2295 *CORE::GLOBAL::flock = sub { 1 };
2296 </Perl>
2297 PerlModule Apache::ASP
2298
2299 Please be sure to add this configuration before Apache::ASP is loaded
2300 via PerlModule, or a PerlRequire statement.
23042301
23052302 =head1 CONFIG
23062303
25892586
25902587 PerlSetVar SecureSession 1
25912588
2589 =item HTTPOnlySession
2590
2591 default 0. Sets HttpOnly flag to session cookie to mitigate XSS attacks.
2592 Supported by most modern browsers, it only allows access to the
2593 session cookie by the server (ie NOT Javascript)
2594
2595 PerlSetVar HTTPOnlySession 1
2596
25922597 =item ParanoidSession
25932598
25942599 default 0. When true, stores the user-agent header of the browser
27762781 the debugging information.
27772782
27782783 For a demo of this functionality, try the
2779 ./site/eg/syntax_error.htm script, and turn buffering on.
2784 ./site/eg/syntax_error.asp script, and turn buffering on.
27802785
27812786 =item PodComments
27822787
34413446 that mixes HTML & perl modes in a single buffer, check
34423447 out the editors/mmm-asp-perl.el file in distribution.
34433448
3444 * Microsoft Frontpage
3445
34463449 * Vim, special syntax support with editors/aasp.vim file in distribution.
34473450
34483451 * UltraEdit32 ( http://www.ultraedit.com/ ) has syntax highlighting,
48924895 dynamically executed at runtime, turn the DynamicIncludes
48934896 config option on as documented above.
48944897
4895 That is not all! SSI is full featured. One of the
4896 things missing above is the
4898 =head2 Apache::SSI for mod_perl 1.3.x only
4899
4900 One of the things missing above is the
48974901
48984902 <!--#include virtual=filename.cgi-->
48994903
49004904 tag. This and many other SSI code extensions are available
49014905 by filtering Apache::ASP output through Apache::SSI via
4902 the Apache::Filter and the Filter config options. For
4903 more information on how to wire Apache::ASP and Apache::SSI
4906 the Apache::Filter and the Filter config options, available in mod_perl 1.3.x / Apache 1.3.x.
4907 Unfortunately this functionality is not available with mod_perl 2 / Apache 2.
4908
4909 For more information on how to wire Apache::ASP and Apache::SSI
49044910 together, please see the Filter config option documented
49054911 above. Also please see Apache::SSI for further information
49064912 on the capabilities it offers.
4913
4914 =head2 SSI with mod_filter in Apache 2
4915
4916 Apache 2 offers chained filters. It may be possible to chain filters to
4917 Apache::ASP output through mod_filter for SSI processing:
4918
4919 http://httpd.apache.org/docs/2.1/mod/mod_filter.html
49074920
49084921 =head1 EXAMPLES
49094922
49264939 with that client, the web server sets, and the web client returns
49274940 a 32 byte session id identifier cookie. This implementation
49284941 is very secure and may be used in secure HTTPS transactions,
4929 and made stronger with SecureSession and ParanoidSession
4930 settings (see CONFIG ).
4942 and made stronger with SecureSession, HTTPOnlySession and
4943 ParanoidSession settings (see CONFIG ).
49314944
49324945 However good cookies are for this kind of persistent
49334946 state management between HTTP requests, they have long
52605273
52615274 For more information about CGI.pm, please see the web site
52625275
5263 http://stein.cshl.org/WWW/software/CGI/
5276 http://search.cpan.org/dist/CGI/
52645277
52655278 =item Query Object Initialization
52665279
53285341 on this topic, and ./site/eg/file_upload.asp for an example of its use.
53295342 Also, for more details about CGI.pm itself, please see the web site:
53305343
5331 http://stein.cshl.org/WWW/software/CGI/
5344 http://search.cpan.org/dist/CGI/
53325345
53335346 Occasionally, a newer version of CGI.pm will be released which breaks
53345347 file upload compatibility with Apache::ASP. If you find this to occur,
54775490 global.asa, or you may create a perl package or module to share
54785491 with your scripts. For more on perl objects & modules, please see:
54795492
5480 http://www.perldoc.com/perl5.8.0/pod/perlobj.html
5493 http://perldoc.perl.org/perlobj.html
54815494
54825495 =head2 Use global.asa's Script_On* Events
54835496
56365649 more than one level of indirection on the left side of
56375650 an assignment like:
56385651
5639 $Session->{complex}{object} = $data;
5652 BAD: $Session->{complex}{object} = $data;
56405653
56415654 =item How can I keep search engine spiders from killing the session manager?
56425655
56955708
56965709 =item VBScript or JScript supported?
56975710
5698 Yes, but not with this Perl module. For ASP with other scripting
5699 languages besides Perl, you will need to go with a commercial vendor
5700 in the UNIX world. Sun has such a solution.
5701 Of course on Windows NT and Windows 2000, you get VBScript for free with IIS.
5702
5703 Sun ONE Active Server Pages (formerly Sun Chili!Soft ASP)
5704 http://www.chilisoft.com
5711 Only Perl scripting is supported with this module.
57055712
57065713 =item How is database connectivity handled?
57075714
57995806 updated to remain current with Apache::ASP v2.29+
58005807
58015808 Apache::ASP Site Tuning
5802 http://www.chamas.com/asp/articles/perlmonth3_tune.html
5809 http://www.apache-asp.org/articles/perlmonth3_tune.html
58035810
58045811 =head2 Tuning & Benchmarking
58055812
59885995
59895996 Other honorable mentions include:
59905997
5991 !! Doug MacEachern, for moral support and of course mod_perl
5998 !! Gregory Youngblood, Thanos Chatziathanassiou, & Tsirkin Evgeny for keeping the flame alive!
5999
6000 :) Doug MacEachern, for moral support and of course mod_perl
59926001 :) Helmut Zeilinger, Skylos, John Drago, and Warren Young for their help in the community
59936002 :) Randy Kobes, for the win32 binaries, and for always being the epitome of helpfulness
59946003 :) Francesco Pasqualini, for bug fixes with stand alone CGI mode on Win32
60716080
60726081 The mod_perl mailing list archives are located at:
60736082
6074 http://forum.swarthmore.edu/epigone/modperl
6075 http://www.egroups.com/group/modperl/
6083 http://mail-archives.apache.org/mod_mbox/perl-modperl/
60766084
60776085 =item Mailing List
60786086
60896097
60906098 =item Donations
60916099
6092 Apache::ASP is freely distributed under the terms of the GPL license
6100 Apache::ASP is freely distributed under the terms of the Perl artistic license
60936101 ( see the LICENSE section ). If you would like to donate time to
60946102 the project, please get involved on the Apache::ASP Mailing List,
60956103 and submit ideas, bug fixes and patches for the core system,
61016109 If you would like commercial support for Apache::ASP, please
61026110 check out any of the following listed companies. Note that
61036111 this is not an endorsement, and if you would like your company
6104 listed here, please email asp-dev [at] chamas.com with your information.
6112 listed here, please email asp[at]perl.apache.org with your information.
61056113
61066114 =item AlterCom
61076115
61156123 Our hosting services support Apache:ASP along with Mod_Perl, PHP and MySQL.
61166124
61176125 http://www.Cyberchute.com
6118
6119 =item GrokThis.net
6120
6121 Web hosting provider. Specializing in mod_perl and mod_python
6122 hosting, we allow users to edit their own Apache configuration files
6123 and run their own Apache servers.
6124
6125 http://grokthis.net
61266126
61276127 =item OmniTI
61286128
61466146 What follows is a list of public sites that are using
61476147 Apache::ASP. If you use the software for your site, and
61486148 would like to show your support of the software by being listed,
6149 please send your link to asp-dev [at] chamas.com
6149 please send your link to asp[at]perl.apache.org
61506150
61516151 For a list of testimonials of those using Apache::ASP, please see the TESTIMONIALS section.
61526152
6153 Zapisy - Testy
6154 http://www.ch.pwr.wroc.pl/~bruno/testy/
6153 PERSONiO Match
6154 http://www.personio.com/home.asp
6155
6156 gutscheinwurst.de - a German voucher community
6157 http://www.gutscheinwurst.de
61556158
61566159 SalesJobs.com
61576160 http://www.salesjobs.com
61586161
6162 hanschur.de
6163 http://www.hanschur.de
6164
6165 Webtist
6166 http://www.webtist.de
6167
61596168 FreeLotto
61606169 http://www.freelotto.com
61616170
61746183 WebTime
61756184 http://webtime-project.net
61766185
6177 Meet-O-Matic
6178 http://meetomatic.com/about.asp
6179
6180 Apache Hello World Benchmarks
6181 http://chamas.com/bench/
6182
61836186 AlterCom, Advanced Web Hosting
61846187 http://altercom.com/
61856188
61896192 ESSTECwebservices
61906193 http://www.esstec.be/
61916194
6192 SQLRef
6193 http://comclub.dyndns.org:8081/sqlref/
6194
6195 Bouygues Telecom Enterprises
6196 http://www.b2bouygtel.com
6197
61986195 Alumni.NET
61996196 http://www.alumni.net
62006197
62016198 Anime Wallpapers dot com
62026199 http://www.animewallpapers.com/
62036200
6204 Chamas Enterprises Inc.
6205 http://www.chamas.com
6206
62076201 Cine.gr
62086202 http://www.cine.gr
62096203
62226216 Integra
62236217 http://www.integra.ru/
62246218
6225 Internetowa Gielda Samochodowa
6226 http://www.gielda.szczecin.pl
6227
62286219 Money FM
62296220 http://www.moneyfm.gr
62306221
62456236
62466237 redhat.com | support
62476238 http://www.redhat.com/apps/support/
6248
6249 Samara.RU
6250 http://portal.samara.ru/
62516239
62526240 Spotlight
62536241 http://www.spotlight.com.au
62836271 questions.
62846272
62856273 -- Tom Lancaster, Red Hat
6274
6275 =item Anime Wallpaper at Anime Cubed
6276
6277 Your suite has got our old CGI implementation beat, hands down. Our site is divided into two main areas, each run by a separate developer, and the Apache::ASP section runs head and shoulders above the other side. Anyone who is still using anything but your product to implement their webpages seriously needs to take a look at how versatile and powerful Apache::ASP is. Thanks again for such great work!
6278
6279 -- Al from 'Anime Wallpaper at Anime Cubed', http://www.animecubed.com/wallpapers/
6280
6281 =item gutscheinwurst.de
6282
6283 I am the web master of http://www.gutscheinwurst.de , a German voucher community.
6284 We use Apache::Asp to run our backend & administration servers for the system. We started using Apache::ASP to see whether it is a valid alternative to IIS legacy systems. So far all expectations in regard of performance, ease of development and integration have been fulfilled or exceeded.
6285 Thank's for such a great product :)
6286
6287 -- Johnannes Leimbach
62866288
62876289 =item D. L. Fox
62886290
64316433 Embedded Perl ( part of a series on Perl )
64326434 http://www.wdvl.com/Authoring/Languages/Perl/PerlfortheWeb/index15.html
64336435
6434 =head2 Benchmarking
6435
6436 Apache Hello World Benchmarks
6437 http://chamas.com/bench/
6438
64396436 =head2 Books
64406437
64416438 mod_perl "Eagle" Book
64476444 Programming the Perl DBI
64486445 http://www.oreilly.com/catalog/perldbi/
64496446
6450 =head2 Presentations
6451
6452 Apache::ASP Tutorial, 2000 Open Source Convention ( PowerPoint )
6453 http://www.chamas.com/asp/OSS_convention_2000.pps
6454
6455 Advanced Apache::ASP Tutorial, 2001 Open Source Convention ( Zipped PDF )
6456 http://www.chamas.com/asp/OSS_convention_2001.zip
6457
6458 Advanced Apache::ASP Tutorial, 2001 Open Source Convention ( PDF )
6459 http://www.chamas.com/asp/OSS_convention_2001.pdf
6460
64616447 =head2 Reference Cards
64626448
64636449 Apache & mod_perl Reference Cards
64686454 mod_perl Apache web module
64696455 http://perl.apache.org
64706456
6471 mod_perl Guide
6457 mod_perl 1.x Guide
64726458 http://perl.apache.org/guide/
64736459
64746460 Perl Programming Language
64886474 + Database storage of $Session & $Application, so web clusters
64896475 may scale better than the current NFS/CIFS StateDir implementation
64906476 allows, maybe via Apache::Session.
6491 + Sample Apache::ASP applications beyond ./site/eg
6492 + More caching options like $Server->Cache for user cache
6493 and $Response->Cache for page caching
6494 + Caching guide
6495
6496 =head2 MAY BE DONE
6497
6498 + VBScript, ECMAScript or JavaScript interpreters
6499 + Dumping state of Apache::ASP during an error, and being
6500 able to go through it with the perl debugger.
65016477
65026478 =head1 CHANGES
65036479
65146490
65156491 + = improvement - = bug fix (d) = documentations
65166492
6517 =item $VERSION = 2.62; $DATE="2011/08/16"
6493 =item $VERSION = 2.63; $DATE="03/14/2018"
6494
6495 + Added section ``raw'' to MailErrors.inc to debug POSTs without
6496 form fields
6497
6498 - MailErrorsHTML now uses monospaced fonts for errors. Easier on
6499 the eyes and more informative
6500
6501 =item $VERSION = 2.62; $DATE="08/16/2011"
65186502
65196503 - Fixed 'application/x-www-form-urlencoded' for AJAX POSTs post
65206504 Firefox 3.x
65226506 + First sourceforge.net hosted version
65236507
65246508 + Incremented version number to actually match SVN branch tag
6525
6526 + Switched to Big-endian date format in the documentation.
6527 Less chance of misunderstandings
65286509
65296510 =item $VERSION = 2.61; $DATE="05/24/2008"
65306511
68176798
68186799 -Fixed runtime HTML error output when Debug is set to -2/2,
68196800 so that script correctly again gets rendered in final perl form.
6820 Added compile time error output to ./site/eg/syntax_error.htm
6801 Added compile time error output to ./site/eg/syntax_error.asp
68216802 when a special link is clicked for a quick visual test.
68226803
68236804 -Cleaned up some bad coding practices in ./site/eg/global.asa
89368917
89378918 =head1 LICENSE
89388919
8939 Copyright (c) 1998-2008, Josh Chamas, Chamas Enterprises Inc.
8920 Copyright (c) 1998-2018, Josh Chamas
8921
89408922 All rights reserved. This program is free software; you can
89418923 redistribute it and/or modify it under the same terms as Perl itself.
89428924
0 $MODULE=Apache::ASP; $VERSION = 2.63; $DATE="2014/05/20"
1
2 + fixed $r->connection()->remote_ip() to use useragent_ip(), then client_ip() access for Apache 2.4
3
4 + Added section ``raw'' to MailErrors.inc to debug POSTs without
5 form fields
6
7 - MailErrorsHTML now uses monospaced fonts for errors. Easier on
8 the eyes and more informative
9
10 - Added a clumsy regex to avoid header longer than 70 chars
11
12 - removed deprecated "Extra" module references from Makefile.PL and Bundle::Apache::ASP::Extra,
13 including Apache::Filter, Apache::SSI, Bundle::XML, XML::Sablotron, and Tie::TextDir
14
015 $MODULE=Apache::ASP; $VERSION = 2.62; $DATE="2011/08/16"
116
217 - Fixed 'application/x-www-form-urlencoded' for AJAX POSTs post
+0
-340
LICENSE less more
0 GNU GENERAL PUBLIC LICENSE
1 Version 2, June 1991
2
3 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
4 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
5 Everyone is permitted to copy and distribute verbatim copies
6 of this license document, but changing it is not allowed.
7
8 Preamble
9
10 The licenses for most software are designed to take away your
11 freedom to share and change it. By contrast, the GNU General Public
12 License is intended to guarantee your freedom to share and change free
13 software--to make sure the software is free for all its users. This
14 General Public License applies to most of the Free Software
15 Foundation's software and to any other program whose authors commit to
16 using it. (Some other Free Software Foundation software is covered by
17 the GNU Library General Public License instead.) You can apply it to
18 your programs, too.
19
20 When we speak of free software, we are referring to freedom, not
21 price. Our General Public Licenses are designed to make sure that you
22 have the freedom to distribute copies of free software (and charge for
23 this service if you wish), that you receive source code or can get it
24 if you want it, that you can change the software or use pieces of it
25 in new free programs; and that you know you can do these things.
26
27 To protect your rights, we need to make restrictions that forbid
28 anyone to deny you these rights or to ask you to surrender the rights.
29 These restrictions translate to certain responsibilities for you if you
30 distribute copies of the software, or if you modify it.
31
32 For example, if you distribute copies of such a program, whether
33 gratis or for a fee, you must give the recipients all the rights that
34 you have. You must make sure that they, too, receive or can get the
35 source code. And you must show them these terms so they know their
36 rights.
37
38 We protect your rights with two steps: (1) copyright the software, and
39 (2) offer you this license which gives you legal permission to copy,
40 distribute and/or modify the software.
41
42 Also, for each author's protection and ours, we want to make certain
43 that everyone understands that there is no warranty for this free
44 software. If the software is modified by someone else and passed on, we
45 want its recipients to know that what they have is not the original, so
46 that any problems introduced by others will not reflect on the original
47 authors' reputations.
48
49 Finally, any free program is threatened constantly by software
50 patents. We wish to avoid the danger that redistributors of a free
51 program will individually obtain patent licenses, in effect making the
52 program proprietary. To prevent this, we have made it clear that any
53 patent must be licensed for everyone's free use or not licensed at all.
54
55 The precise terms and conditions for copying, distribution and
56 modification follow.
57
58 GNU GENERAL PUBLIC LICENSE
59 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
60
61 0. This License applies to any program or other work which contains
62 a notice placed by the copyright holder saying it may be distributed
63 under the terms of this General Public License. The "Program", below,
64 refers to any such program or work, and a "work based on the Program"
65 means either the Program or any derivative work under copyright law:
66 that is to say, a work containing the Program or a portion of it,
67 either verbatim or with modifications and/or translated into another
68 language. (Hereinafter, translation is included without limitation in
69 the term "modification".) Each licensee is addressed as "you".
70
71 Activities other than copying, distribution and modification are not
72 covered by this License; they are outside its scope. The act of
73 running the Program is not restricted, and the output from the Program
74 is covered only if its contents constitute a work based on the
75 Program (independent of having been made by running the Program).
76 Whether that is true depends on what the Program does.
77
78 1. You may copy and distribute verbatim copies of the Program's
79 source code as you receive it, in any medium, provided that you
80 conspicuously and appropriately publish on each copy an appropriate
81 copyright notice and disclaimer of warranty; keep intact all the
82 notices that refer to this License and to the absence of any warranty;
83 and give any other recipients of the Program a copy of this License
84 along with the Program.
85
86 You may charge a fee for the physical act of transferring a copy, and
87 you may at your option offer warranty protection in exchange for a fee.
88
89 2. You may modify your copy or copies of the Program or any portion
90 of it, thus forming a work based on the Program, and copy and
91 distribute such modifications or work under the terms of Section 1
92 above, provided that you also meet all of these conditions:
93
94 a) You must cause the modified files to carry prominent notices
95 stating that you changed the files and the date of any change.
96
97 b) You must cause any work that you distribute or publish, that in
98 whole or in part contains or is derived from the Program or any
99 part thereof, to be licensed as a whole at no charge to all third
100 parties under the terms of this License.
101
102 c) If the modified program normally reads commands interactively
103 when run, you must cause it, when started running for such
104 interactive use in the most ordinary way, to print or display an
105 announcement including an appropriate copyright notice and a
106 notice that there is no warranty (or else, saying that you provide
107 a warranty) and that users may redistribute the program under
108 these conditions, and telling the user how to view a copy of this
109 License. (Exception: if the Program itself is interactive but
110 does not normally print such an announcement, your work based on
111 the Program is not required to print an announcement.)
112
113 These requirements apply to the modified work as a whole. If
114 identifiable sections of that work are not derived from the Program,
115 and can be reasonably considered independent and separate works in
116 themselves, then this License, and its terms, do not apply to those
117 sections when you distribute them as separate works. But when you
118 distribute the same sections as part of a whole which is a work based
119 on the Program, the distribution of the whole must be on the terms of
120 this License, whose permissions for other licensees extend to the
121 entire whole, and thus to each and every part regardless of who wrote it.
122
123 Thus, it is not the intent of this section to claim rights or contest
124 your rights to work written entirely by you; rather, the intent is to
125 exercise the right to control the distribution of derivative or
126 collective works based on the Program.
127
128 In addition, mere aggregation of another work not based on the Program
129 with the Program (or with a work based on the Program) on a volume of
130 a storage or distribution medium does not bring the other work under
131 the scope of this License.
132
133 3. You may copy and distribute the Program (or a work based on it,
134 under Section 2) in object code or executable form under the terms of
135 Sections 1 and 2 above provided that you also do one of the following:
136
137 a) Accompany it with the complete corresponding machine-readable
138 source code, which must be distributed under the terms of Sections
139 1 and 2 above on a medium customarily used for software interchange; or,
140
141 b) Accompany it with a written offer, valid for at least three
142 years, to give any third party, for a charge no more than your
143 cost of physically performing source distribution, a complete
144 machine-readable copy of the corresponding source code, to be
145 distributed under the terms of Sections 1 and 2 above on a medium
146 customarily used for software interchange; or,
147
148 c) Accompany it with the information you received as to the offer
149 to distribute corresponding source code. (This alternative is
150 allowed only for noncommercial distribution and only if you
151 received the program in object code or executable form with such
152 an offer, in accord with Subsection b above.)
153
154 The source code for a work means the preferred form of the work for
155 making modifications to it. For an executable work, complete source
156 code means all the source code for all modules it contains, plus any
157 associated interface definition files, plus the scripts used to
158 control compilation and installation of the executable. However, as a
159 special exception, the source code distributed need not include
160 anything that is normally distributed (in either source or binary
161 form) with the major components (compiler, kernel, and so on) of the
162 operating system on which the executable runs, unless that component
163 itself accompanies the executable.
164
165 If distribution of executable or object code is made by offering
166 access to copy from a designated place, then offering equivalent
167 access to copy the source code from the same place counts as
168 distribution of the source code, even though third parties are not
169 compelled to copy the source along with the object code.
170
171 4. You may not copy, modify, sublicense, or distribute the Program
172 except as expressly provided under this License. Any attempt
173 otherwise to copy, modify, sublicense or distribute the Program is
174 void, and will automatically terminate your rights under this License.
175 However, parties who have received copies, or rights, from you under
176 this License will not have their licenses terminated so long as such
177 parties remain in full compliance.
178
179 5. You are not required to accept this License, since you have not
180 signed it. However, nothing else grants you permission to modify or
181 distribute the Program or its derivative works. These actions are
182 prohibited by law if you do not accept this License. Therefore, by
183 modifying or distributing the Program (or any work based on the
184 Program), you indicate your acceptance of this License to do so, and
185 all its terms and conditions for copying, distributing or modifying
186 the Program or works based on it.
187
188 6. Each time you redistribute the Program (or any work based on the
189 Program), the recipient automatically receives a license from the
190 original licensor to copy, distribute or modify the Program subject to
191 these terms and conditions. You may not impose any further
192 restrictions on the recipients' exercise of the rights granted herein.
193 You are not responsible for enforcing compliance by third parties to
194 this License.
195
196 7. If, as a consequence of a court judgment or allegation of patent
197 infringement or for any other reason (not limited to patent issues),
198 conditions are imposed on you (whether by court order, agreement or
199 otherwise) that contradict the conditions of this License, they do not
200 excuse you from the conditions of this License. If you cannot
201 distribute so as to satisfy simultaneously your obligations under this
202 License and any other pertinent obligations, then as a consequence you
203 may not distribute the Program at all. For example, if a patent
204 license would not permit royalty-free redistribution of the Program by
205 all those who receive copies directly or indirectly through you, then
206 the only way you could satisfy both it and this License would be to
207 refrain entirely from distribution of the Program.
208
209 If any portion of this section is held invalid or unenforceable under
210 any particular circumstance, the balance of the section is intended to
211 apply and the section as a whole is intended to apply in other
212 circumstances.
213
214 It is not the purpose of this section to induce you to infringe any
215 patents or other property right claims or to contest validity of any
216 such claims; this section has the sole purpose of protecting the
217 integrity of the free software distribution system, which is
218 implemented by public license practices. Many people have made
219 generous contributions to the wide range of software distributed
220 through that system in reliance on consistent application of that
221 system; it is up to the author/donor to decide if he or she is willing
222 to distribute software through any other system and a licensee cannot
223 impose that choice.
224
225 This section is intended to make thoroughly clear what is believed to
226 be a consequence of the rest of this License.
227
228 8. If the distribution and/or use of the Program is restricted in
229 certain countries either by patents or by copyrighted interfaces, the
230 original copyright holder who places the Program under this License
231 may add an explicit geographical distribution limitation excluding
232 those countries, so that distribution is permitted only in or among
233 countries not thus excluded. In such case, this License incorporates
234 the limitation as if written in the body of this License.
235
236 9. The Free Software Foundation may publish revised and/or new versions
237 of the General Public License from time to time. Such new versions will
238 be similar in spirit to the present version, but may differ in detail to
239 address new problems or concerns.
240
241 Each version is given a distinguishing version number. If the Program
242 specifies a version number of this License which applies to it and "any
243 later version", you have the option of following the terms and conditions
244 either of that version or of any later version published by the Free
245 Software Foundation. If the Program does not specify a version number of
246 this License, you may choose any version ever published by the Free Software
247 Foundation.
248
249 10. If you wish to incorporate parts of the Program into other free
250 programs whose distribution conditions are different, write to the author
251 to ask for permission. For software which is copyrighted by the Free
252 Software Foundation, write to the Free Software Foundation; we sometimes
253 make exceptions for this. Our decision will be guided by the two goals
254 of preserving the free status of all derivatives of our free software and
255 of promoting the sharing and reuse of software generally.
256
257 NO WARRANTY
258
259 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
260 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
261 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
262 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
263 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
264 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
265 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
266 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
267 REPAIR OR CORRECTION.
268
269 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
270 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
271 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
272 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
273 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
274 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
275 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
276 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
277 POSSIBILITY OF SUCH DAMAGES.
278
279 END OF TERMS AND CONDITIONS
280
281 How to Apply These Terms to Your New Programs
282
283 If you develop a new program, and you want it to be of the greatest
284 possible use to the public, the best way to achieve this is to make it
285 free software which everyone can redistribute and change under these terms.
286
287 To do so, attach the following notices to the program. It is safest
288 to attach them to the start of each source file to most effectively
289 convey the exclusion of warranty; and each file should have at least
290 the "copyright" line and a pointer to where the full notice is found.
291
292 <one line to give the program's name and a brief idea of what it does.>
293 Copyright (C) 19yy <name of author>
294
295 This program is free software; you can redistribute it and/or modify
296 it under the terms of the GNU General Public License as published by
297 the Free Software Foundation; either version 2 of the License, or
298 (at your option) any later version.
299
300 This program is distributed in the hope that it will be useful,
301 but WITHOUT ANY WARRANTY; without even the implied warranty of
302 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
303 GNU General Public License for more details.
304
305 You should have received a copy of the GNU General Public License
306 along with this program; if not, write to the Free Software
307 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
308
309
310 Also add information on how to contact you by electronic and paper mail.
311
312 If the program is interactive, make it output a short notice like this
313 when it starts in an interactive mode:
314
315 Gnomovision version 69, Copyright (C) 19yy name of author
316 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317 This is free software, and you are welcome to redistribute it
318 under certain conditions; type `show c' for details.
319
320 The hypothetical commands `show w' and `show c' should show the appropriate
321 parts of the General Public License. Of course, the commands you use may
322 be called something other than `show w' and `show c'; they could even be
323 mouse-clicks or menu items--whatever suits your program.
324
325 You should also get your employer (if you work as a programmer) or your
326 school, if any, to sign a "copyright disclaimer" for the program, if
327 necessary. Here is a sample; alter the names:
328
329 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330 `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
332 <signature of Ty Coon>, 1 April 1989
333 Ty Coon, President of Vice
334
335 This General Public License does not permit incorporating your program into
336 proprietary programs. If your program is a subroutine library, you may
337 consider it more useful to permit linking proprietary applications with the
338 library. If this is what you want to do, use the GNU Library General
339 Public License instead of this License.
247247 t/xmlsubs_aspargs.t
248248 t/xmlsubs_perlargs.t
249249 t/xmlsubsmatch.t
250 META.yml Module YAML meta-data (added by MakeMaker)
251 META.json Module JSON meta-data (added by MakeMaker)
0 {
1 "abstract" : "unknown",
2 "author" : [
3 "unknown"
4 ],
5 "dynamic_config" : 1,
6 "generated_by" : "ExtUtils::MakeMaker version 7.0401, CPAN::Meta::Converter version 2.150001",
7 "license" : [
8 "unknown"
9 ],
10 "meta-spec" : {
11 "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
12 "version" : "2"
13 },
14 "name" : "Apache-ASP",
15 "no_index" : {
16 "directory" : [
17 "t",
18 "inc"
19 ]
20 },
21 "prereqs" : {
22 "build" : {
23 "requires" : {
24 "ExtUtils::MakeMaker" : "0"
25 }
26 },
27 "configure" : {
28 "requires" : {
29 "ExtUtils::MakeMaker" : "0"
30 }
31 },
32 "runtime" : {
33 "requires" : {
34 "Carp" : "0",
35 "Class::Struct" : "0",
36 "Data::Dumper" : "0",
37 "Digest::MD5" : "0",
38 "Fcntl" : "0",
39 "File::Basename" : "0",
40 "MLDBM" : "0",
41 "MLDBM::Sync" : "0",
42 "SDBM_File" : "0"
43 }
44 }
45 },
46 "release_status" : "stable",
47 "version" : 2.63
48 }
0 ---
1 abstract: unknown
2 author:
3 - unknown
4 build_requires:
5 ExtUtils::MakeMaker: '0'
6 configure_requires:
7 ExtUtils::MakeMaker: '0'
8 dynamic_config: 1
9 generated_by: 'ExtUtils::MakeMaker version 7.0401, CPAN::Meta::Converter version 2.150001'
10 license: unknown
11 meta-spec:
12 url: http://module-build.sourceforge.net/META-spec-v1.4.html
13 version: '1.4'
14 name: Apache-ASP
15 no_index:
16 directory:
17 - t
18 - inc
19 requires:
20 Carp: '0'
21 Class::Struct: '0'
22 Data::Dumper: '0'
23 Digest::MD5: '0'
24 Fcntl: '0'
25 File::Basename: '0'
26 MLDBM: '0'
27 MLDBM::Sync: '0'
28 SDBM_File: '0'
29 version: 2.63
3333 'HTML::Clean' => 'Compress text/html with Clean config or $Response->{Clean} set to 1-9',
3434 'HTML::FillInForm' =>
3535 'Enables FormFill feature which will auto fill forms from $Request->Form data',
36 'Apache::Filter' => 'Full SSI support via Apache::Filter & Apache::SSI',
37 'Apache::SSI' => 'Full SSI support via Apache::Filter & Apache::SSI',
36 ## not relevant on apache2 context
37 ## 'Apache::Filter' => 'Full SSI support via Apache::Filter & Apache::SSI',
38 ## 'Apache::SSI' => 'Full SSI support via Apache::Filter & Apache::SSI',
3839 'Net::SMTP' => 'Runtime errors can be mailed to the webmaster with MailErrorTo config',
3940 'Net::Config' => 'Config options for use with Net::SMTP',
4041 'Time::HiRes' => 'Sub second Apache::ASP response timing with Debug 3/-3 turned on.',
41 # 'Tie::TextDir .04' => 'Fast cache for CacheDB setting for things like large XSLT transformations.',
42 ## no longer seems supported
43 ## 'Tie::TextDir .04' => 'Fast cache for CacheDB setting for things like large XSLT transformations.',
4244 'XML::XSLT 0.32' => 'XSLT, written in perl so makes for an easy install after installing Bundle::XML from CPAN.',
43 'XML::Sablotron' => 'XSLT that is 10 times faster than XML::XSLT',
45 ## no longer seems supported
46 ## 'XML::Sablotron' => 'XSLT that is 10 times faster than XML::XSLT',
4447 'XML::LibXSLT' => 'XSLT that is 2 times faster than XML::Sablotron',
4548 };
4649
+3428
-3415
README less more
00 NAME
1 Apache::ASP - Active Server Pages for Apache with mod_perl
1 Apache::ASP - Active Server Pages for Apache with mod_perl
22
33 SYNOPSIS
44 SetHandler perl-script
4545 Need Help
4646 Often, installing the mod_perl part of the Apache server can be the hardest
4747 part. If this is the case for you, check out the FAQ and SUPPORT sections
48 for further help, as well as the "Build Apache" notes in this section.
49
50 Please also see the mod_perl guide at http://perl.apache.org/guide which one
51 ought to give a good read before undertaking a mod_perl project.
48 for further help, as well as the "Modern Linux Distributions" notes in this
49 section.
50
51 Please also see the mod_perl site at http://perl.apache.org/ which one ought
52 to give a good read before undertaking a mod_perl project.
5253
5354 Download and CPAN Install
5455 You may download the latest Apache::ASP from your nearest CPAN, and also:
5556
57 http://search.cpan.org/dist/Apache-ASP/
5658 http://cpan.org/modules/by-module/Apache/
57 ftp://ftp.duke.edu/pub/perl/modules/by-module/Apache/
5859
5960 As a Perl developer, you should make yourself familiar with the CPAN.pm
6061 module, and how it may be used to install Apache::ASP, and other related
9798
9899 Please note that you must first have the Apache Web Server & mod_perl
99100 installed before using this module in a web server environment. The offline
100 mode for building static html at ./cgi/asp may be used with just perl.
101
102 Win32 / Windows Install
103 If you are on a Win32 platform, like WinNT or Windows 2000, you can download
104 the win32 binaries linked to from:
105
106 http://perl.apache.org/distributions.html
107
108 From here, I would recommend the mod_perl binary installation at:
109
110 ftp://theoryx5.uwinnipeg.ca/pub/other/
111
112 and install the latest perl-win32-bin-*.exe file.
113
114 Randy Kobes has graciously provided these, which include compiled versions
115 perl, mod_perl, apache, mod_ssl, as well as all the modules required by
116 Apache::ASP and Apache::ASP itself.
117
118 You may also try the more recent Perl-5.8-win32-bin.exe distribution which
119 is built on Apache 2. This should be treated as BETA release software until
120 mod_perl 2.x is released as stable. Some notes from Randy Kobes about
121 getting this release to work are here:
122
123 After installing this distribution, in Apache2\conf\perl.conf
124 (pulled in via Apache2\conf\httpd.conf) there's directives that
125 have Apache::ASP handle files placed under the Apache2\asp\
126 directory. There should be a sample Apache::ASP script there,
127 printenv.html, accessed as http://127.0.0.1/asp/printenv.html
128 which, if working, will print out your environment variables.
129
130 WinME / 98 / 95 flock() workaround
131 For those on desktop Windows operation systems, Apache::ASP v2.25 and later
132 needs a special work around for the lack of flock() support on these
133 systems. Please add this to your Apache httpd.conf to fix this problem after
134 mod_perl is installed:
135
136 <Perl>
137 *CORE::GLOBAL::flock = sub { 1 };
138 </Perl>
139 PerlModule Apache::ASP
140
141 Please be sure to add this configuration before Apache::ASP is loaded via
142 PerlModule, or a PerlRequire statement.
143
144 Linux DSO Distributions
145 If you have a linux distribution, like a RedHat Linux server, with an RPM
146 style Apache + mod_perl, seriously consider building a static version of the
147 httpd server yourself, not DSO. DSO is marked as experimental for mod_perl,
148 and often does not work, resulting in "no request object" error messages,
149 and other oddities, and are terrible to debug, because of the strange kinds
150 of things that can go wrong.
151
152 Build Apache and mod_perl
153 For a quick build of apache, there is a script in the distribution at
154 ./make_httpd/build_httpds.sh that can compile a statically linked Apache
155 with mod_ssl and mod_perl. Just drop the sources into the make_httpd
156 directory, configure the environments as appropriate, and execute the script
157 like this:
158
159 make_httpd> ./build_httpds.sh
160
161 You might also find helpful a couple items:
162
163 Stas's mod_perl guide install section
164 http://perl.apache.org/guide/install.html
165
166 Apache Toolbox
167 http://www.apachetoolbox.com/
168
169 People have been using Apache Toolbox to automate their complex builds with
170 great success.
101 mode for building static html at ./cgi/asp-perl may be used with just perl.
102
103 Modern Linux Distributions
104 If you have a modern Linux distribution like CentOS or Ubuntu, you will
105 likely have the easiest path by using the repository tools to automatically
106 install mod_perl and Apache before installing Apache::ASP via CPAN.
107
108 For example for CentOS, this will install mod_perl into your apache httpd,
109 the latter likely being installed already by default on your server:
110
111 bash> sudo yum install mod_perl-devel.x86_64
112
113 For Ubuntu this would be done like this:
114
115 bash> sudo apt-get install libapache2-mod-perl2
171116
172117 Quick Start
173118 Once you have successfully built the Apache Web Server with mod_perl, copy
203148 scripts in ./site/eg/ without any errors. Common problems can be found in
204149 the FAQ section.
205150
151 Build static Apache and mod_perl for Apache 1.3.x
152 For a quick build of apache, there is a script in the distribution at
153 ./make_httpd/build_httpds.sh that can compile a statically linked Apache
154 with mod_ssl and mod_perl. Just drop the sources into the make_httpd
155 directory, configure the environments as appropriate, and execute the script
156 like this:
157
158 make_httpd> ./build_httpds.sh
159
160 You might also find helpful a couple items:
161
162 Stas's mod_perl guide install section
163 http://perl.apache.org/guide/install.html
164
165 Apache Toolbox
166 http://www.apachetoolbox.com/
167
168 People have been using Apache Toolbox to automate their complex builds of
169 Apache 1.3.x with great success.
170
171 Win32 / Windows Install
172 If you are on a Win32 platform, like WinNT or Windows 2000, you can download
173 the win32 binaries linked to from:
174
175 http://perl.apache.org/download/binaries.html#Win32
176
177 and install the latest perl-win32-bin-*.exe file.
178
179 Randy Kobes has graciously provided these, which include compiled versions
180 perl, mod_perl, apache, mod_ssl, as well as all the modules required by
181 Apache::ASP and Apache::ASP itself.
182
183 After installing this distribution, in Apache2\conf\perl.conf (pulled in via
184 Apache2\conf\httpd.conf) there's directives that have Apache::ASP handle
185 files placed under the Apache2\asp\ directory. There should be a sample
186 Apache::ASP script there, printenv.html, accessed as
187 http://127.0.0.1/asp/printenv.html which, if working, will print out your
188 environment variables.
189
190 WinME / 98 / 95 flock() workaround
191 For those on desktop Windows operation systems, Apache::ASP v2.25 and later
192 needs a special work around for the lack of flock() support on these
193 systems. Please add this to your Apache httpd.conf to fix this problem after
194 mod_perl is installed:
195
196 <Perl>
197 *CORE::GLOBAL::flock = sub { 1 };
198 </Perl>
199 PerlModule Apache::ASP
200
201 Please be sure to add this configuration before Apache::ASP is loaded via
202 PerlModule, or a PerlRequire statement.
203
206204 CONFIG
207205 You may use a <Files ...> directive in your httpd.conf Apache configuration
208206 file to make Apache::ASP start ticking. Configure the optional settings if
230228
231229 Core
232230 Global
233 Global is the nerve center of an Apache::ASP application, in which the
234 global.asa may reside defining the web application's event handlers.
235
236 This directory is pushed onto @INC, so you will be able to "use" and
237 "require" files in this directory, and perl modules developed for this
238 application may be dropped into this directory, for easy use.
239
240 Unless StateDir is configured, this directory must be some writeable
241 directory by the web server. $Session and $Application object state files
242 will be stored in this directory. If StateDir is configured, then ignore
243 this paragraph, as it overrides the Global directory for this purpose.
244
245 Includes, specified with <!--#include file=somefile.inc--> or
246 $Response->Include() syntax, may also be in this directory, please see
247 section on includes for more information.
248
249 PerlSetVar Global /tmp
231 Global is the nerve center of an Apache::ASP application, in which the
232 global.asa may reside defining the web application's event handlers.
233
234 This directory is pushed onto @INC, so you will be able to "use" and
235 "require" files in this directory, and perl modules developed for this
236 application may be dropped into this directory, for easy use.
237
238 Unless StateDir is configured, this directory must be some writeable
239 directory by the web server. $Session and $Application object state
240 files will be stored in this directory. If StateDir is configured, then
241 ignore this paragraph, as it overrides the Global directory for this
242 purpose.
243
244 Includes, specified with <!--#include file=somefile.inc--> or
245 $Response->Include() syntax, may also be in this directory, please see
246 section on includes for more information.
247
248 PerlSetVar Global /tmp
250249
251250 GlobalPackage
252 Perl package namespace that all scripts, includes, & global.asa events are
253 compiled into. By default, GlobalPackage is some obscure name that is
254 uniquely generated from the file path of the Global directory, and
255 global.asa file. The use of explicitly naming the GlobalPackage is to allow
256 scripts access to globals and subs defined in a perl module that is included
257 with commands like:
258
259 in perl script: use Some::Package;
260 in apache conf: PerlModule Some::Package
261
262 PerlSetVar GlobalPackage Some::Package
251 Perl package namespace that all scripts, includes, & global.asa events
252 are compiled into. By default, GlobalPackage is some obscure name that
253 is uniquely generated from the file path of the Global directory, and
254 global.asa file. The use of explicitly naming the GlobalPackage is to
255 allow scripts access to globals and subs defined in a perl module that
256 is included with commands like:
257
258 in perl script: use Some::Package;
259 in apache conf: PerlModule Some::Package
260
261 PerlSetVar GlobalPackage Some::Package
263262
264263 UniquePackages
265 default 0. Set to 1 to compile each script into its own perl package, so
266 that subroutines defined in one script will not collide with another.
267
268 By default, ASP scripts in a web application are compiled into the *same*
269 perl package, so these scripts, their includes, and the global.asa events
270 all share common globals & subroutines defined by each other. The problem
271 for some developers was that they would at times define a subroutine of the
272 same name in 2+ scripts, and one subroutine definition would redefine the
273 other one because of the namespace collision.
274
275 PerlSetVar UniquePackages 0
264 default 0. Set to 1 to compile each script into its own perl package, so
265 that subroutines defined in one script will not collide with another.
266
267 By default, ASP scripts in a web application are compiled into the
268 *same* perl package, so these scripts, their includes, and the
269 global.asa events all share common globals & subroutines defined by each
270 other. The problem for some developers was that they would at times
271 define a subroutine of the same name in 2+ scripts, and one subroutine
272 definition would redefine the other one because of the namespace
273 collision.
274
275 PerlSetVar UniquePackages 0
276276
277277 DynamicIncludes
278 default 0. SSI file includes are normally inlined in the calling script, and
279 the text gets compiled with the script as a whole. With this option set to
280 TRUE, file includes are compiled as a separate subroutine and called when
281 the script is run. The advantage of having this turned on is that the code
282 compiled from the include can be shared between scripts, which keeps the
283 script sizes smaller in memory, and keeps compile times down.
284
285 PerlSetVar DynamicIncludes 0
278 default 0. SSI file includes are normally inlined in the calling script,
279 and the text gets compiled with the script as a whole. With this option
280 set to TRUE, file includes are compiled as a separate subroutine and
281 called when the script is run. The advantage of having this turned on is
282 that the code compiled from the include can be shared between scripts,
283 which keeps the script sizes smaller in memory, and keeps compile times
284 down.
285
286 PerlSetVar DynamicIncludes 0
286287
287288 IncludesDir
288 no defaults. If set, this directory will also be used to look for includes
289 when compiling scripts. By default the directory the script is in, and the
290 Global directory are checked for includes.
291
292 This extension was added so that includes could be easily shared between ASP
293 applications, whereas placing includes in the Global directory only allows
294 sharing between scripts in an application.
295
296 PerlSetVar IncludesDir .
297
298 Also, multiple includes directories may be set by creating a directory list
299 separated by a semicolon ';' as in
300
301 PerlSetVar IncludesDir ../shared;/usr/local/asp/shared
302
303 Using IncludesDir in this way creates an includes search path that would
304 look like ., Global, ../shared, /usr/local/asp/shared The current directory
305 of the executing script is checked first whenever an include is specified,
306 then the Global directory in which the global.asa resides, and finally the
307 IncludesDir setting.
289 no defaults. If set, this directory will also be used to look for
290 includes when compiling scripts. By default the directory the script is
291 in, and the Global directory are checked for includes.
292
293 This extension was added so that includes could be easily shared between
294 ASP applications, whereas placing includes in the Global directory only
295 allows sharing between scripts in an application.
296
297 PerlSetVar IncludesDir .
298
299 Also, multiple includes directories may be set by creating a directory
300 list separated by a semicolon ';' as in
301
302 PerlSetVar IncludesDir ../shared;/usr/local/asp/shared
303
304 Using IncludesDir in this way creates an includes search path that would
305 look like ., Global, ../shared, /usr/local/asp/shared The current
306 directory of the executing script is checked first whenever an include
307 is specified, then the Global directory in which the global.asa resides,
308 and finally the IncludesDir setting.
308309
309310 NoCache
310 Default 0, if set to 1 will make it so that neither script nor include
311 compilations are cached by the server. Using this configuration will save on
312 memory but will slow down script execution. Please see the TUNING section
313 for other strategies on improving site performance.
314
315 PerlSetVar NoCache 0
311 Default 0, if set to 1 will make it so that neither script nor include
312 compilations are cached by the server. Using this configuration will
313 save on memory but will slow down script execution. Please see the
314 TUNING section for other strategies on improving site performance.
315
316 PerlSetVar NoCache 0
316317
317318 State Management
318319 NoState
319 default 0, if true, neither the $Application nor $Session objects will be
320 created. Use this for a performance increase. Please note that this setting
321 takes precedence over the AllowSessionState and AllowApplicationState
322 settings.
323
324 PerlSetVar NoState 0
320 default 0, if true, neither the $Application nor $Session objects will
321 be created. Use this for a performance increase. Please note that this
322 setting takes precedence over the AllowSessionState and
323 AllowApplicationState settings.
324
325 PerlSetVar NoState 0
325326
326327 AllowSessionState
327 Set to 0 for no session tracking, 1 by default If Session tracking is turned
328 off, performance improves, but the $Session object is inaccessible.
329
330 PerlSetVar AllowSessionState 1
331
332 Note that if you want to dissallow session creation for certain non web
333 browser user agents, like search engine spiders, you can use an init handler
334 like:
335
336 PerlInitHandler "sub { $_[0]->dir_config('AllowSessionState', 0) }"
328 Set to 0 for no session tracking, 1 by default If Session tracking is
329 turned off, performance improves, but the $Session object is
330 inaccessible.
331
332 PerlSetVar AllowSessionState 1
333
334 Note that if you want to dissallow session creation for certain non web
335 browser user agents, like search engine spiders, you can use an init
336 handler like:
337
338 PerlInitHandler "sub { $_[0]->dir_config('AllowSessionState', 0) }"
337339
338340 AllowApplicationState
339 Default 1. If you want to leave $Application undefined, then set this to 0,
340 for a performance increase of around 2-3%. Allowing use of $Application is
341 less expensive than $Session, as there is more work for the StateManager
342 associated with $Session garbage collection so this parameter should be only
343 used for extreme tuning.
344
345 PerlSetVar AllowApplicationState 1
341 Default 1. If you want to leave $Application undefined, then set this to
342 0, for a performance increase of around 2-3%. Allowing use of
343 $Application is less expensive than $Session, as there is more work for
344 the StateManager associated with $Session garbage collection so this
345 parameter should be only used for extreme tuning.
346
347 PerlSetVar AllowApplicationState 1
346348
347349 StateDir
348 default $Global/.state. State files for ASP application go to this
349 directory. Where the state files go is the most important determinant in
350 what makes a unique ASP application. Different configs pointing to the same
351 StateDir are part of the same ASP application.
352
353 The default has not changed since implementing this config directive. The
354 reason for this config option is to allow operating systems with caching
355 file systems like Solaris to specify a state directory separately from the
356 Global directory, which contains more permanent files. This way one may
357 point StateDir to /tmp/myaspapp, and make one's ASP application scream with
358 speed.
359
360 PerlSetVar StateDir ./.state
350 default $Global/.state. State files for ASP application go to this
351 directory. Where the state files go is the most important determinant in
352 what makes a unique ASP application. Different configs pointing to the
353 same StateDir are part of the same ASP application.
354
355 The default has not changed since implementing this config directive.
356 The reason for this config option is to allow operating systems with
357 caching file systems like Solaris to specify a state directory
358 separately from the Global directory, which contains more permanent
359 files. This way one may point StateDir to /tmp/myaspapp, and make one's
360 ASP application scream with speed.
361
362 PerlSetVar StateDir ./.state
361363
362364 StateManager
363 default 10, this number specifies the numbers of times per SessionTimeout
364 that timed out sessions are garbage collected. The bigger the number, the
365 slower your system, but the more precise Session_OnEnd's will be run from
366 global.asa, which occur when a timed out session is cleaned up, and the
367 better able to withstand Session guessing hacking attempts. The lower the
368 number, the faster a normal system will run.
369
370 The defaults of 20 minutes for SessionTimeout and 10 times for StateManager,
371 has dead Sessions being cleaned up every 2 minutes.
372
373 PerlSetVar StateManager 10
365 default 10, this number specifies the numbers of times per
366 SessionTimeout that timed out sessions are garbage collected. The bigger
367 the number, the slower your system, but the more precise Session_OnEnd's
368 will be run from global.asa, which occur when a timed out session is
369 cleaned up, and the better able to withstand Session guessing hacking
370 attempts. The lower the number, the faster a normal system will run.
371
372 The defaults of 20 minutes for SessionTimeout and 10 times for
373 StateManager, has dead Sessions being cleaned up every 2 minutes.
374
375 PerlSetVar StateManager 10
374376
375377 StateDB
376 default SDBM_File, this is the internal database used for state objects like
377 $Application and $Session. Because an SDBM_File %hash has a limit on the
378 size of a record key+value pair, usually 1024 bytes, you may want to use
379 another tied database like DB_File or MLDBM::Sync::SDBM_File.
380
381 With lightweight $Session and $Application use, you can get away with
382 SDBM_File, but if you load it up with complex data like $Session{key} = { #
383 very large complex object } you might max out the 1024 limit.
384
385 Currently StateDB can be: SDBM_File, MLDBM::Sync::SDBM_File, DB_File, and
386 GDBM_File. Please let me know if you would like to add any more to this
387 list.
388
389 As of version .18, you may change this setting in a live production
390 environment, and new state databases created will be of this format. With a
391 prior version if you switch to a new StateDB, you would want to delete the
392 old StateDir, as there will likely be incompatibilities between the
393 different database formats, including the way garbage collection is handled.
394
395 PerlSetVar StateDB SDBM_File
378 default SDBM_File, this is the internal database used for state objects
379 like $Application and $Session. Because an SDBM_File %hash has a limit
380 on the size of a record key+value pair, usually 1024 bytes, you may want
381 to use another tied database like DB_File or MLDBM::Sync::SDBM_File.
382
383 With lightweight $Session and $Application use, you can get away with
384 SDBM_File, but if you load it up with complex data like $Session{key} =
385 { # very large complex object } you might max out the 1024 limit.
386
387 Currently StateDB can be: SDBM_File, MLDBM::Sync::SDBM_File, DB_File,
388 and GDBM_File. Please let me know if you would like to add any more to
389 this list.
390
391 As of version .18, you may change this setting in a live production
392 environment, and new state databases created will be of this format.
393 With a prior version if you switch to a new StateDB, you would want to
394 delete the old StateDir, as there will likely be incompatibilities
395 between the different database formats, including the way garbage
396 collection is handled.
397
398 PerlSetVar StateDB SDBM_File
396399
397400 StateCache
398 Deprecated as of 2.23. There is no equivalent config for the functionality
399 this represented from that version on. The 2.23 release represented a
400 significant rewrite of the state management, moving to MLDBM::Sync for its
401 subsystem.
401 Deprecated as of 2.23. There is no equivalent config for the
402 functionality this represented from that version on. The 2.23 release
403 represented a significant rewrite of the state management, moving to
404 MLDBM::Sync for its subsystem.
402405
403406 StateSerializer
404 default Data::Dumper, you may set this to Storable for faster serialization
405 and storage of data into state objects. This is particularly useful when
406 storing large objects in $Session and $Application, as the Storable.pm
407 module has a faster implementation of freezing and thawing data from and to
408 perl structures. Note that if you are storing this much data in your state
409 databases, you may want to use DB_File since it does not have the default
410 1024 byte limit that SDBM_File has on key/value lengths.
411
412 This configuration setting may be changed in production as the state
413 database's serializer type is stored in the internal state manager which
414 will always use Data::Dumper & SDBM_File to store data.
415
416 PerlSetVar StateSerializer Data::Dumper
407 default Data::Dumper, you may set this to Storable for faster
408 serialization and storage of data into state objects. This is
409 particularly useful when storing large objects in $Session and
410 $Application, as the Storable.pm module has a faster implementation of
411 freezing and thawing data from and to perl structures. Note that if you
412 are storing this much data in your state databases, you may want to use
413 DB_File since it does not have the default 1024 byte limit that
414 SDBM_File has on key/value lengths.
415
416 This configuration setting may be changed in production as the state
417 database's serializer type is stored in the internal state manager which
418 will always use Data::Dumper & SDBM_File to store data.
419
420 PerlSetVar StateSerializer Data::Dumper
417421
418422 Sessions
419423 CookiePath
420 URL root that client responds to by sending the session cookie. If your asp
421 application falls under the server url "/asp", then you would set this
422 variable to /asp. This then allows you to run different applications on the
423 same server, with different user sessions for each application.
424
425 PerlSetVar CookiePath /
424 URL root that client responds to by sending the session cookie. If your
425 asp application falls under the server url "/asp", then you would set
426 this variable to /asp. This then allows you to run different
427 applications on the same server, with different user sessions for each
428 application.
429
430 PerlSetVar CookiePath /
426431
427432 CookieDomain
428 Default 0, this NON-PORTABLE configuration will allow sessions to span
429 multiple web sites that match the same domain root. This is useful if your
430 web sites are hosted on the same machine and can share the same StateDir
431 configuration, and you want to shared the $Session data across web sites.
432 Whatever this is set to, that will add a
433
434 ; domain=$CookieDomain
435
436 part to the Set-Cookie: header set for the session-id cookie.
437
438 PerlSetVar CookieDomain .your.global.domain
433 Default 0, this NON-PORTABLE configuration will allow sessions to span
434 multiple web sites that match the same domain root. This is useful if
435 your web sites are hosted on the same machine and can share the same
436 StateDir configuration, and you want to shared the $Session data across
437 web sites. Whatever this is set to, that will add a
438
439 ; domain=$CookieDomain
440
441 part to the Set-Cookie: header set for the session-id cookie.
442
443 PerlSetVar CookieDomain .your.global.domain
439444
440445 SessionTimeout
441 Default 20 minutes, when a user's session has been inactive for this period
442 of time, the Session_OnEnd event is run, if defined, for that session, and
443 the contents of that session are destroyed.
444
445 PerlSetVar SessionTimeout 20
446 Default 20 minutes, when a user's session has been inactive for this
447 period of time, the Session_OnEnd event is run, if defined, for that
448 session, and the contents of that session are destroyed.
449
450 PerlSetVar SessionTimeout 20
446451
447452 SecureSession
448 default 0. Sets the secure tag for the session cookie, so that the cookie
449 will only be transmitted by the browser under https transmissions.
450
451 PerlSetVar SecureSession 1
453 default 0. Sets the secure tag for the session cookie, so that the
454 cookie will only be transmitted by the browser under https
455 transmissions.
456
457 PerlSetVar SecureSession 1
458
459 HTTPOnlySession
460 default 0. Sets HttpOnly flag to session cookie to mitigate XSS attacks.
461 Supported by most modern browsers, it only allows access to the session
462 cookie by the server (ie NOT Javascript)
463
464 PerlSetVar HTTPOnlySession 1
452465
453466 ParanoidSession
454 default 0. When true, stores the user-agent header of the browser that
455 creates the session and validates this against the session cookie presented.
456 If this check fails, the session is killed, with the rationale that there is
457 a hacking attempt underway.
458
459 This config option was implemented to be a smooth upgrade, as you can turn
460 it off and on, without disrupting current sessions. Sessions must be created
461 with this turned on for the security to take effect.
462
463 This config option is to help prevent a brute force cookie search from being
464 successful. The number of possible cookies is huge, 2^128, thus making such
465 a hacking attempt VERY unlikely. However, on the off chance that such an
466 attack is successful, the hacker must also present identical browser headers
467 to authenticate the session, or the session will be destroyed. Thus the
468 User-Agent acts as a backup to the real session id. The IP address of the
469 browser cannot be used, since because of proxies, IP addresses may change
470 between requests during a session.
471
472 There are a few browsers that will not present a User-Agent header. These
473 browsers are considered to be browsers of type "Unknown", and this method
474 works the same way for them.
475
476 Most people agree that this level of security is unnecessary, thus it is
477 titled paranoid :)
478
479 PerlSetVar ParanoidSession 0
467 default 0. When true, stores the user-agent header of the browser that
468 creates the session and validates this against the session cookie
469 presented. If this check fails, the session is killed, with the
470 rationale that there is a hacking attempt underway.
471
472 This config option was implemented to be a smooth upgrade, as you can
473 turn it off and on, without disrupting current sessions. Sessions must
474 be created with this turned on for the security to take effect.
475
476 This config option is to help prevent a brute force cookie search from
477 being successful. The number of possible cookies is huge, 2^128, thus
478 making such a hacking attempt VERY unlikely. However, on the off chance
479 that such an attack is successful, the hacker must also present
480 identical browser headers to authenticate the session, or the session
481 will be destroyed. Thus the User-Agent acts as a backup to the real
482 session id. The IP address of the browser cannot be used, since because
483 of proxies, IP addresses may change between requests during a session.
484
485 There are a few browsers that will not present a User-Agent header.
486 These browsers are considered to be browsers of type "Unknown", and this
487 method works the same way for them.
488
489 Most people agree that this level of security is unnecessary, thus it is
490 titled paranoid :)
491
492 PerlSetVar ParanoidSession 0
480493
481494 SessionSerialize
482 default 0, if true, locks $Session for duration of script, which serializes
483 requests to the $Session object. Only one script at a time may run, per user
484 $Session, with sessions allowed.
485
486 Serialized requests to the session object is the Microsoft ASP way, but is
487 dangerous in a production environment, where there is risk of long-running
488 or run-away processes. If these things happen, a session may be locked for
489 an indefinite period of time. A user STOP button should safely quit the
490 session however.
491
492 PerlSetVar SessionSerialize 0
495 default 0, if true, locks $Session for duration of script, which
496 serializes requests to the $Session object. Only one script at a time
497 may run, per user $Session, with sessions allowed.
498
499 Serialized requests to the session object is the Microsoft ASP way, but
500 is dangerous in a production environment, where there is risk of
501 long-running or run-away processes. If these things happen, a session
502 may be locked for an indefinite period of time. A user STOP button
503 should safely quit the session however.
504
505 PerlSetVar SessionSerialize 0
493506
494507 SessionCount
495 default 0, if true enables the $Application->SessionCount API which returns
496 how many sessions are currently active in the application. This config was
497 created because there is a performance hit associated with this count
498 tracking, so it is disabled by default.
499
500 PerlSetVar SessionCount 1
508 default 0, if true enables the $Application->SessionCount API which
509 returns how many sessions are currently active in the application. This
510 config was created because there is a performance hit associated with
511 this count tracking, so it is disabled by default.
512
513 PerlSetVar SessionCount 1
501514
502515 Cookieless Sessions
503516 SessionQueryParse
504 default 0, if true, will automatically parse the $Session session id into
505 the query string of each local URL found in the $Response buffer. For this
506 setting to work therefore, buffering must be enabled. This parsing will only
507 occur when a session cookie has not been sent by a browser, so the first
508 script of a session enabled site, and scripts viewed by web browsers that
509 have cookies disabled will trigger this behavior.
510
511 Although this runtime parsing method is computationally expensive, this cost
512 should be amortized across most users that will not need this URL parsing.
513 This is a lazy programmer's dream. For something more efficient, look at the
514 SessionQuery setting. For more information about this solution, please read
515 the SESSIONS section.
516
517 PerlSetVar SessionQueryParse 0
517 default 0, if true, will automatically parse the $Session session id
518 into the query string of each local URL found in the $Response buffer.
519 For this setting to work therefore, buffering must be enabled. This
520 parsing will only occur when a session cookie has not been sent by a
521 browser, so the first script of a session enabled site, and scripts
522 viewed by web browsers that have cookies disabled will trigger this
523 behavior.
524
525 Although this runtime parsing method is computationally expensive, this
526 cost should be amortized across most users that will not need this URL
527 parsing. This is a lazy programmer's dream. For something more
528 efficient, look at the SessionQuery setting. For more information about
529 this solution, please read the SESSIONS section.
530
531 PerlSetVar SessionQueryParse 0
518532
519533 SessionQueryParseMatch
520 default 0, set to a regexp pattern that matches all URLs that you want to
521 have SessionQueryParse parse in session ids. By default SessionQueryParse
522 only modifies local URLs, but if you name your URLs of your site with
523 absolute URLs like http://localhost then you will need to use this setting.
524 So to match http://localhost URLs, you might set this pattern to
525 ^http://localhost. Note that by setting this config, you are also setting
526 SessionQueryParse.
527
528 PerlSetVar SessionQueryParseMatch ^https?://localhost
534 default 0, set to a regexp pattern that matches all URLs that you want
535 to have SessionQueryParse parse in session ids. By default
536 SessionQueryParse only modifies local URLs, but if you name your URLs of
537 your site with absolute URLs like http://localhost then you will need to
538 use this setting. So to match http://localhost URLs, you might set this
539 pattern to ^http://localhost. Note that by setting this config, you are
540 also setting SessionQueryParse.
541
542 PerlSetVar SessionQueryParseMatch ^https?://localhost
529543
530544 SessionQuery
531 default 0, if set, the session id will be initialized from the
532 $Request->QueryString if not first found as a cookie. You can use this
533 setting coupled with the
534
535 $Server->URL($url, \%params)
536
537 API extension to generate local URLs with session ids in their query
538 strings, for efficient cookieless session support. Note that if a browser
539 has cookies disabled, every URL to any page that needs access to $Session
540 will need to be created by this method, unless you are using
541 SessionQueryParse which will do this for you automatically.
542
543 PerlSetVar SessionQuery 0
545 default 0, if set, the session id will be initialized from the
546 $Request->QueryString if not first found as a cookie. You can use this
547 setting coupled with the
548
549 $Server->URL($url, \%params)
550
551 API extension to generate local URLs with session ids in their query
552 strings, for efficient cookieless session support. Note that if a
553 browser has cookies disabled, every URL to any page that needs access to
554 $Session will need to be created by this method, unless you are using
555 SessionQueryParse which will do this for you automatically.
556
557 PerlSetVar SessionQuery 0
544558
545559 SessionQueryMatch
546 default 0, set to a regexp pattern that will match URLs for $Server->URL()
547 to add a session id to. SessionQuery normally allows $Server->URL() to add
548 session ids just to local URLs, so if you use absolute URL references like
549 http://localhost/ for your web site, then just like with
550 SessionQueryParseMatch, you might set this pattern to ^http://localhost
551
552 If this is set, then you don't need to set SessionQuery, as it will be set
553 automatically.
554
555 PerlSetVar SessionQueryMatch ^http://localhost
560 default 0, set to a regexp pattern that will match URLs for
561 $Server->URL() to add a session id to. SessionQuery normally allows
562 $Server->URL() to add session ids just to local URLs, so if you use
563 absolute URL references like http://localhost/ for your web site, then
564 just like with SessionQueryParseMatch, you might set this pattern to
565 ^http://localhost
566
567 If this is set, then you don't need to set SessionQuery, as it will be
568 set automatically.
569
570 PerlSetVar SessionQueryMatch ^http://localhost
556571
557572 SessionQueryForce
558 default 0, set to 1 if you want to disallow the use of cookies for session
559 id passing, and only allow session ids to be passed on the query string via
560 SessionQuery and SessionQueryParse settings.
561
562 PerlSetVar SessionQueryForce 1
573 default 0, set to 1 if you want to disallow the use of cookies for
574 session id passing, and only allow session ids to be passed on the query
575 string via SessionQuery and SessionQueryParse settings.
576
577 PerlSetVar SessionQueryForce 1
563578
564579 Developer Environment
565580 UseStrict
566 default 0, if set to 1, will compile all scripts, global.asa and includes
567 with "use strict;" inserted at the head of the file, saving you from the
568 painful process of strictifying code that was not strict to begin with.
569
570 Because of how essential "use strict" programming is in a mod_perl
571 environment, this default might be set to 1 one day, but this will be up for
572 discussion before that decision is made.
573
574 Note too that errors triggered by "use strict" are now captured as part of
575 the normal Apache::ASP error handling when this configuration is set,
576 otherwise "use strict" errors will not be handled properly, so using
577 UseStrict is better than your own "use strict" statements.
578
579 PerlSetVar UseStrict 1
581 default 0, if set to 1, will compile all scripts, global.asa and
582 includes with "use strict;" inserted at the head of the file, saving you
583 from the painful process of strictifying code that was not strict to
584 begin with.
585
586 Because of how essential "use strict" programming is in a mod_perl
587 environment, this default might be set to 1 one day, but this will be up
588 for discussion before that decision is made.
589
590 Note too that errors triggered by "use strict" are now captured as part
591 of the normal Apache::ASP error handling when this configuration is set,
592 otherwise "use strict" errors will not be handled properly, so using
593 UseStrict is better than your own "use strict" statements.
594
595 PerlSetVar UseStrict 1
580596
581597 Debug
582 1 for server log debugging, 2 for extra client html output, 3 for microtimes
583 logged. Use 1 for production debugging, use 2 or 3 for development. Turn off
584 if you are not debugging. These settings activate $Response->Debug().
585
586 PerlSetVar Debug 2
587
588 If Debug 3 is set and Time::HiRes is installed, microtimes will show up in
589 the log, and also calculate the time between one $Response->Debug() and
590 another, so good for a quick benchmark when you glance at the logs.
591
592 PerlSetVar Debug 3
593
594 If you would like to enable system level debugging, set Debug to a negative
595 value. So for system level debugging, but no output to browser:
596
597 PerlSetVar Debug -1
598 1 for server log debugging, 2 for extra client html output, 3 for
599 microtimes logged. Use 1 for production debugging, use 2 or 3 for
600 development. Turn off if you are not debugging. These settings activate
601 $Response->Debug().
602
603 PerlSetVar Debug 2
604
605 If Debug 3 is set and Time::HiRes is installed, microtimes will show up
606 in the log, and also calculate the time between one $Response->Debug()
607 and another, so good for a quick benchmark when you glance at the logs.
608
609 PerlSetVar Debug 3
610
611 If you would like to enable system level debugging, set Debug to a
612 negative value. So for system level debugging, but no output to browser:
613
614 PerlSetVar Debug -1
598615
599616 DebugBufferLength
600 Default 100, set this to the number of bytes of the buffered output's tail
601 you want to see when an error occurs and Debug 2 or MailErrorsTo is set, and
602 when BufferingOn is enabled.
603
604 With buffering the script output will not naturally show up when the script
605 errors, as it has been buffered by the $Response object. It helps to see
606 where in the script output an error halted the script, so the last bytes of
607 the buffered output are included with the rest of the debugging information.
608
609 For a demo of this functionality, try the ./site/eg/syntax_error.htm script,
610 and turn buffering on.
617 Default 100, set this to the number of bytes of the buffered output's
618 tail you want to see when an error occurs and Debug 2 or MailErrorsTo is
619 set, and when BufferingOn is enabled.
620
621 With buffering the script output will not naturally show up when the
622 script errors, as it has been buffered by the $Response object. It helps
623 to see where in the script output an error halted the script, so the
624 last bytes of the buffered output are included with the rest of the
625 debugging information.
626
627 For a demo of this functionality, try the ./site/eg/syntax_error.asp
628 script, and turn buffering on.
611629
612630 PodComments
613 default 1. With pod comments turned on, perl pod style comments and
614 documentation are parsed out of scripts at compile time. This make for great
615 documentation and a nice debugging tool, and it lets you comment out perl
616 code and html in blocks. Specifically text like this:
617
618 =pod
619 text or perl code here
620 =cut
621
622 will get ripped out of the script before compiling. The =pod and =cut perl
623 directives must be at the beginning of the line, and must be followed by the
624 end of the line.
625
626 PerlSetVar PodComments 1
631 default 1. With pod comments turned on, perl pod style comments and
632 documentation are parsed out of scripts at compile time. This make for
633 great documentation and a nice debugging tool, and it lets you comment
634 out perl code and html in blocks. Specifically text like this:
635
636 =pod
637 text or perl code here
638 =cut
639
640 will get ripped out of the script before compiling. The =pod and =cut
641 perl directives must be at the beginning of the line, and must be
642 followed by the end of the line.
643
644 PerlSetVar PodComments 1
627645
628646 CollectionItem
629 Enables PerlScript syntax like:
630
631 $Request->Form('var')->Item;
632 $Request->Form('var')->Item(1);
633 $Request->Form('var')->Count;
634
635 Old PerlScript syntax, enabled with
636
637 use Win32::OLE qw(in valof with OVERLOAD);
638
639 is like native syntax
640
641 $Request->Form('var');
642
643 Only in Apache::ASP, can the above be written as:
644
645 $Request->{Form}{var};
646
647 which you would do if you _really_ needed the speed.
647 Enables PerlScript syntax like:
648
649 $Request->Form('var')->Item;
650 $Request->Form('var')->Item(1);
651 $Request->Form('var')->Count;
652
653 Old PerlScript syntax, enabled with
654
655 use Win32::OLE qw(in valof with OVERLOAD);
656
657 is like native syntax
658
659 $Request->Form('var');
660
661 Only in Apache::ASP, can the above be written as:
662
663 $Request->{Form}{var};
664
665 which you would do if you _really_ needed the speed.
648666
649667 XML / XSLT
650668 XMLSubsMatch
651 default not defined, set to some regexp pattern that will match all XML and
652 HTML tags that you want to have perl subroutines handle. The is
653 Apache::ASP's custom tag technology, and can be used to create powerful
654 extensions to your XML and HTML rendering.
655
656 Please see XML/XSLT section for instructions on its use.
657
658 PerlSetVar XMLSubsMatch my:[\w\-]+
669 default not defined, set to some regexp pattern that will match all XML
670 and HTML tags that you want to have perl subroutines handle. The is
671 Apache::ASP's custom tag technology, and can be used to create powerful
672 extensions to your XML and HTML rendering.
673
674 Please see XML/XSLT section for instructions on its use.
675
676 PerlSetVar XMLSubsMatch my:[\w\-]+
659677
660678 XMLSubsStrict
661 default 0, when set XMLSubs will only take arguments that are properly
662 formed XML tag arguments like:
663
664 <my:sub arg1="value" arg2="value" />
665
666 By default, XMLSubs accept arbitrary perl code as argument values:
667
668 <my:sub arg1=1+1 arg2=&perl_sub()/>
669
670 which is not always wanted or expected. Set XMLSubsStrict to 1 if this is
671 the case.
672
673 PerlSetVar XMLSubsStrict 1
679 default 0, when set XMLSubs will only take arguments that are properly
680 formed XML tag arguments like:
681
682 <my:sub arg1="value" arg2="value" />
683
684 By default, XMLSubs accept arbitrary perl code as argument values:
685
686 <my:sub arg1=1+1 arg2=&perl_sub()/>
687
688 which is not always wanted or expected. Set XMLSubsStrict to 1 if this
689 is the case.
690
691 PerlSetVar XMLSubsStrict 1
674692
675693 XMLSubsPerlArgs
676 default 1, when set attribute values will be interpreted as raw perl code so
677 that these all would execute as one would expect:
678
679 <my:xmlsubs arg='1' arg2="2" arg3=$value arg4="1 $value" />
680
681 With the 2.45 release, 0 may be set for this configuration or a more ASP
682 style variable interpolation:
683
684 <my:xmlsubs arg='1' arg2="2" args3="<%= $value %>" arg4="1 <%= $value %>" />
685
686 This configuration is being introduced experimentally in version 2.45, as it
687 will become the eventual default in the 3.0 release.
688
689 PerlSetVar XMLSubsPerlArgs Off
694 default 1, when set attribute values will be interpreted as raw perl
695 code so that these all would execute as one would expect:
696
697 <my:xmlsubs arg='1' arg2="2" arg3=$value arg4="1 $value" />
698
699 With the 2.45 release, 0 may be set for this configuration or a more ASP
700 style variable interpolation:
701
702 <my:xmlsubs arg='1' arg2="2" args3="<%= $value %>" arg4="1 <%= $value %>" />
703
704 This configuration is being introduced experimentally in version 2.45,
705 as it will become the eventual default in the 3.0 release.
706
707 PerlSetVar XMLSubsPerlArgs Off
690708
691709 XSLT
692 default not defined, if set to a file, ASP scripts will be regarded as XML
693 output and transformed with the given XSL file with XML::XSLT. This XSL file
694 will also be executed as an ASP script first, and its output will be the XSL
695 data used for the transformation. This XSL file will be executed as a
696 dynamic include, so may be located in the current directory, Global, or
697 IncludesDir.
698
699 Please see the XML/XSLT section for an explanation of its use.
700
701 PerlSetVar XSLT template.xsl
710 default not defined, if set to a file, ASP scripts will be regarded as
711 XML output and transformed with the given XSL file with XML::XSLT. This
712 XSL file will also be executed as an ASP script first, and its output
713 will be the XSL data used for the transformation. This XSL file will be
714 executed as a dynamic include, so may be located in the current
715 directory, Global, or IncludesDir.
716
717 Please see the XML/XSLT section for an explanation of its use.
718
719 PerlSetVar XSLT template.xsl
702720
703721 XSLTMatch
704 default .*, if XSLT is set by default all ASP scripts will be XSL
705 transformed by the specified XSL template. This regexp setting will tell
706 XSLT which file names to match with doing XSL transformations, so that
707 regular HTML ASP scripts and XML ASP scripts can be configured with the same
708 configuration block. Please see ./site/eg/.htaccess for an example of its
709 use.
710
711 PerlSetVar XSLTMatch \.xml$
722 default .*, if XSLT is set by default all ASP scripts will be XSL
723 transformed by the specified XSL template. This regexp setting will tell
724 XSLT which file names to match with doing XSL transformations, so that
725 regular HTML ASP scripts and XML ASP scripts can be configured with the
726 same configuration block. Please see ./site/eg/.htaccess for an example
727 of its use.
728
729 PerlSetVar XSLTMatch \.xml$
712730
713731 XSLTParser
714 default XML::XSLT, determines which perl module to use for XSLT parsing.
715 This is a new config as of 2.11. Also supported is XML::Sablotron which does
716 not handle XSLT with the exact same output, but is about 10 times faster
717 than XML::XSLT. XML::LibXSLT may also be used as of version 2.29, and seems
718 to be about twice again as fast as XML::Sablotron, and a very complete XSLT
719 implementation.
720
721 PerlSetVar XSLTParser XML::XSLT
722 PerlSetVar XSLTParser XML::Sablotron
723 PerlSetVar XSLTParser XML::LibXSLT
732 default XML::XSLT, determines which perl module to use for XSLT parsing.
733 This is a new config as of 2.11. Also supported is XML::Sablotron which
734 does not handle XSLT with the exact same output, but is about 10 times
735 faster than XML::XSLT. XML::LibXSLT may also be used as of version 2.29,
736 and seems to be about twice again as fast as XML::Sablotron, and a very
737 complete XSLT implementation.
738
739 PerlSetVar XSLTParser XML::XSLT
740 PerlSetVar XSLTParser XML::Sablotron
741 PerlSetVar XSLTParser XML::LibXSLT
724742
725743 XSLTCache
726 Activate XSLT file based caching through CacheDB, CacheDir, and CacheSize
727 settings. This gives cached XSLT performance near AxKit and greater than
728 Cocoon. XSLT caches transformations keyed uniquely by XML & XSLT inputs.
729
730 PerlSetVar XSLTCache 1
744 Activate XSLT file based caching through CacheDB, CacheDir, and
745 CacheSize settings. This gives cached XSLT performance near AxKit and
746 greater than Cocoon. XSLT caches transformations keyed uniquely by XML &
747 XSLT inputs.
748
749 PerlSetVar XSLTCache 1
731750
732751 XSLTCacheSize
733 as of version 2.11, this config is no longer supported.
752 as of version 2.11, this config is no longer supported.
734753
735754 Caching
736755 The output caching layer is a file dbm based output cache that runs on top
759778 mod_perl.
760779
761780 CacheDB
762 Like StateDB, sets dbm format for caching. Since SDBM_File only support
763 key/values pairs of around 1K max in length, the default for this is
764 MLDBM::Sync::SDBM_File, which is very fast for < 20K output sizes. For
765 caching larger data than 20K, DB_File or GDBM_File are probably better to
766 use.
767
768 PerlSetVar CacheDB MLDBM::Sync::SDBM_File
769
770 For your own benchmarks to test the relative speeds of the various DBMs
771 under MLDBM::Sync, which is used by CacheDB, you may run the
772 ./bench/bench_sync.pl script from the MLDBM::Sync distribution on your
773 system.
781 Like StateDB, sets dbm format for caching. Since SDBM_File only support
782 key/values pairs of around 1K max in length, the default for this is
783 MLDBM::Sync::SDBM_File, which is very fast for < 20K output sizes. For
784 caching larger data than 20K, DB_File or GDBM_File are probably better
785 to use.
786
787 PerlSetVar CacheDB MLDBM::Sync::SDBM_File
788
789 For your own benchmarks to test the relative speeds of the various DBMs
790 under MLDBM::Sync, which is used by CacheDB, you may run the
791 ./bench/bench_sync.pl script from the MLDBM::Sync distribution on your
792 system.
774793
775794 CacheDir
776 By default, the cache directory is at StateDir/cache, but CacheDir can be
777 used to set the StateDir value for caching purposes. One may want the
778 CacheDir separate from StateDir for example StateDir might be a centrally
779 network mounted file system, while CacheDir might be a local file cache.
780
781 PerlSetVar CacheDir /tmp/asp_demo
782
783 On a system like Solaris where there is a RAM disk mounted on the system
784 like /tmp, I could put the CacheDir there. On a system like Linux where
785 files are cached pretty well by default, this is less important.
795 By default, the cache directory is at StateDir/cache, but CacheDir can
796 be used to set the StateDir value for caching purposes. One may want the
797 CacheDir separate from StateDir for example StateDir might be a
798 centrally network mounted file system, while CacheDir might be a local
799 file cache.
800
801 PerlSetVar CacheDir /tmp/asp_demo
802
803 On a system like Solaris where there is a RAM disk mounted on the system
804 like /tmp, I could put the CacheDir there. On a system like Linux where
805 files are cached pretty well by default, this is less important.
786806
787807 CacheSize
788 By default, this is 10M of data per cache. When any cache, like the
789 XSLTCache, reaches this limit, the cache will be purged by deleting the
790 cached dbm files entirely. This is better for long term running of dbms than
791 deleting individual records, because dbm formats will often degrade in
792 performance with lots of insert & deletes.
793
794 Units of M, K, and B are supported for megabytes, kilobytes, and bytes, with
795 the default unit being B, so the following configs all mean the same thing;
796
797 PerlSetVar CacheSize 10M
798 PerlSetVar CacheSize 10240K
799 PerlSetVar CacheSize 10485760B
800 PerlSetVar CacheSize 10485760
801
802 There are 2 caches currently, the XSLTCache, and the Response cache, the
803 latter which is currently invoked for caching output from includes with
804 special syntax. See $Response->Include() for more info on the Response
805 cache.
808 By default, this is 10M of data per cache. When any cache, like the
809 XSLTCache, reaches this limit, the cache will be purged by deleting the
810 cached dbm files entirely. This is better for long term running of dbms
811 than deleting individual records, because dbm formats will often degrade
812 in performance with lots of insert & deletes.
813
814 Units of M, K, and B are supported for megabytes, kilobytes, and bytes,
815 with the default unit being B, so the following configs all mean the
816 same thing;
817
818 PerlSetVar CacheSize 10M
819 PerlSetVar CacheSize 10240K
820 PerlSetVar CacheSize 10485760B
821 PerlSetVar CacheSize 10485760
822
823 There are 2 caches currently, the XSLTCache, and the Response cache, the
824 latter which is currently invoked for caching output from includes with
825 special syntax. See $Response->Include() for more info on the Response
826 cache.
806827
807828 Miscellaneous
808829 AuthServerVariables
809 default 0. If you are using basic auth and would like
810 $Request->ServerVariables set like AUTH_TYPE, AUTH_USER, AUTH_NAME,
811 REMOTE_USER, & AUTH_PASSWD, then set this and Apache::ASP will initialize
812 these values from Apache->*auth* commands. Use of these environment
813 variables keeps applications cross platform compatible as other servers set
814 these too when performing basic 401 auth.
815
816 PerlSetVar AuthServerVariables 0
830 default 0. If you are using basic auth and would like
831 $Request->ServerVariables set like AUTH_TYPE, AUTH_USER, AUTH_NAME,
832 REMOTE_USER, & AUTH_PASSWD, then set this and Apache::ASP will
833 initialize these values from Apache->*auth* commands. Use of these
834 environment variables keeps applications cross platform compatible as
835 other servers set these too when performing basic 401 auth.
836
837 PerlSetVar AuthServerVariables 0
817838
818839 BufferingOn
819 default 1, if true, buffers output through the response object. $Response
820 object will only send results to client browser if a $Response->Flush() is
821 called, or if the asp script ends. Lots of output will need to be flushed
822 incrementally.
823
824 If false, 0, the output is immediately written to the client, CGI style.
825 There will be a performance hit server side if output is flushed
826 automatically to the client, but is probably small.
827
828 I would leave this on, since error handling is poor, if your asp script
829 errors after sending only some of the output.
830
831 PerlSetVar BufferingOn 1
840 default 1, if true, buffers output through the response object.
841 $Response object will only send results to client browser if a
842 $Response->Flush() is called, or if the asp script ends. Lots of output
843 will need to be flushed incrementally.
844
845 If false, 0, the output is immediately written to the client, CGI style.
846 There will be a performance hit server side if output is flushed
847 automatically to the client, but is probably small.
848
849 I would leave this on, since error handling is poor, if your asp script
850 errors after sending only some of the output.
851
852 PerlSetVar BufferingOn 1
832853
833854 InodeNames
834 Default 0. Set to 1 to uses a stat() call on scripts and includes to derive
835 subroutine namespace based on device and inode numbers. In case of multiple
836 symbolic links pointing to the same script this will result in the script
837 being compiled only once. Use only on unix flavours which support the stat()
838 call that know about device and inode numbers.
839
840 PerlSetVar InodeNames 1
855 Default 0. Set to 1 to uses a stat() call on scripts and includes to
856 derive subroutine namespace based on device and inode numbers. In case
857 of multiple symbolic links pointing to the same script this will result
858 in the script being compiled only once. Use only on unix flavours which
859 support the stat() call that know about device and inode numbers.
860
861 PerlSetVar InodeNames 1
841862
842863 RequestParams
843 Default 0, if set creates $Request->Params object with combined contents of
844 $Request->QueryString and $Request->Form. This is for developer convenience
845 simlar to CGI.pm's param() method.
846
847 PerlSetVar RequestParams 1
864 Default 0, if set creates $Request->Params object with combined contents
865 of $Request->QueryString and $Request->Form. This is for developer
866 convenience simlar to CGI.pm's param() method.
867
868 PerlSetVar RequestParams 1
848869
849870 RequestBinaryRead
850 Default On, if set to Off will not read POST data into $Request->Form().
851
852 One potential reason for configuring this to Off might be to initialize the
853 Apache::ASP object in an Apache handler phase earlier than the normal
854 PerlRequestHandler phase, so that it does not interfere with normal reading
855 of POST data later in the request.
856
857 PerlSetVar RequestBinaryRead On
871 Default On, if set to Off will not read POST data into $Request->Form().
872
873 One potential reason for configuring this to Off might be to initialize
874 the Apache::ASP object in an Apache handler phase earlier than the
875 normal PerlRequestHandler phase, so that it does not interfere with
876 normal reading of POST data later in the request.
877
878 PerlSetVar RequestBinaryRead On
858879
859880 StatINC
860 default 0, if true, reloads perl libraries that have changed on disk
861 automatically for ASP scripts. If false, the www server must be restarted
862 for library changes to take effect.
863
864 A known bug is that any functions that are exported, e.g. confess Carp
865 qw(confess), will not be refreshed by StatINC. To refresh these, you must
866 restart the www server.
867
868 This setting should be used in development only because it is so slow. For a
869 production version of StatINC, see StatINCMatch.
870
871 PerlSetVar StatINC 1
881 default 0, if true, reloads perl libraries that have changed on disk
882 automatically for ASP scripts. If false, the www server must be
883 restarted for library changes to take effect.
884
885 A known bug is that any functions that are exported, e.g. confess Carp
886 qw(confess), will not be refreshed by StatINC. To refresh these, you
887 must restart the www server.
888
889 This setting should be used in development only because it is so slow.
890 For a production version of StatINC, see StatINCMatch.
891
892 PerlSetVar StatINC 1
872893
873894 StatINCMatch
874 default undef, if defined, it will be used as a regular expression to reload
875 modules that match as in StatINC. This is useful because StatINC has a very
876 high performance penalty in production, so if you can narrow the modules
877 that are checked for reloading each script execution to a handful, you will
878 only suffer a mild performance penalty.
879
880 The StatINCMatch setting should be a regular expression like: Struct|LWP
881 which would match on reloading Class/Struct.pm, and all the LWP/.*
882 libraries.
883
884 If you define StatINCMatch, you do not need to define StatINC.
885
886 PerlSetVar StatINCMatch .*
895 default undef, if defined, it will be used as a regular expression to
896 reload modules that match as in StatINC. This is useful because StatINC
897 has a very high performance penalty in production, so if you can narrow
898 the modules that are checked for reloading each script execution to a
899 handful, you will only suffer a mild performance penalty.
900
901 The StatINCMatch setting should be a regular expression like: Struct|LWP
902 which would match on reloading Class/Struct.pm, and all the LWP/.*
903 libraries.
904
905 If you define StatINCMatch, you do not need to define StatINC.
906
907 PerlSetVar StatINCMatch .*
887908
888909 StatScripts
889 default 1, if set to 0, changed scripts, global.asa, and includes will not
890 be reloaded. Coupled with Apache mod_perl startup and restart handlers
891 executing Apache::ASP->Loader() for your application this allows your
892 application to be frozen, and only reloaded on the next server restart or
893 stop/start.
894
895 There are a few advantages for not reloading scripts and modules in
896 production. First there is a slight performance improvement by not having to
897 stat() the script, its includes and the global.asa every request.
898
899 From an application deployment standpoint, you also gain the ability to
900 deploy your application as a snapshot taken when the server starts and
901 restarts. This provides you with the reassurance that during a production
902 server update from development sources, you do not have to worry with
903 sources being used for the wrong libraries and such, while they are all
904 being copied over.
905
906 Finally, though you really should not do this, you can work on a live
907 production application, with a test server reloading changes, but your
908 production server does see the changes until you restart or stop/start it.
909 This saves your public from syntax errors while you are just doing a quick
910 bug fix.
911
912 PerlSetVar StatScripts 1
910 default 1, if set to 0, changed scripts, global.asa, and includes will
911 not be reloaded. Coupled with Apache mod_perl startup and restart
912 handlers executing Apache::ASP->Loader() for your application this
913 allows your application to be frozen, and only reloaded on the next
914 server restart or stop/start.
915
916 There are a few advantages for not reloading scripts and modules in
917 production. First there is a slight performance improvement by not
918 having to stat() the script, its includes and the global.asa every
919 request.
920
921 From an application deployment standpoint, you also gain the ability to
922 deploy your application as a snapshot taken when the server starts and
923 restarts. This provides you with the reassurance that during a
924 production server update from development sources, you do not have to
925 worry with sources being used for the wrong libraries and such, while
926 they are all being copied over.
927
928 Finally, though you really should not do this, you can work on a live
929 production application, with a test server reloading changes, but your
930 production server does see the changes until you restart or stop/start
931 it. This saves your public from syntax errors while you are just doing a
932 quick bug fix.
933
934 PerlSetVar StatScripts 1
913935
914936 SoftRedirect
915 default 0, if true, a $Response->Redirect() does not end the script.
916 Normally, when a Redirect() is called, the script is ended automatically.
917 SoftRedirect 1, is a standard way of doing redirects, allowing for html
918 output after the redirect is specified.
919
920 PerlSetVar SoftRedirect 0
937 default 0, if true, a $Response->Redirect() does not end the script.
938 Normally, when a Redirect() is called, the script is ended
939 automatically. SoftRedirect 1, is a standard way of doing redirects,
940 allowing for html output after the redirect is specified.
941
942 PerlSetVar SoftRedirect 0
921943
922944 Filter
923 On/Off, default Off. With filtering enabled, you can take advantage of full
924 server side includes (SSI), implemented through Apache::SSI. SSI is
925 implemented through this mechanism by using Apache::Filter. A sample
926 configuration for full SSI with filtering is in the ./site/eg/.htaccess
927 file, with a relevant example script ./site/eg/ssi_filter.ssi.
928
929 You may only use this option with modperl v1.16 or greater installed and
930 PERL_STACKED_HANDLERS enabled. Filtering may be used in conjunction with
931 other handlers that are also "filter aware". If in doubt, try building your
932 mod_perl with
933
934 perl Makefile.PL EVERYTHING=1
935
936 With filtering through Apache::SSI, you should expect near a a 20%
937 performance decrease.
938
939 PerlSetVar Filter Off
945 On/Off, default Off. With filtering enabled, you can take advantage of
946 full server side includes (SSI), implemented through Apache::SSI. SSI is
947 implemented through this mechanism by using Apache::Filter. A sample
948 configuration for full SSI with filtering is in the ./site/eg/.htaccess
949 file, with a relevant example script ./site/eg/ssi_filter.ssi.
950
951 You may only use this option with modperl v1.16 or greater installed and
952 PERL_STACKED_HANDLERS enabled. Filtering may be used in conjunction with
953 other handlers that are also "filter aware". If in doubt, try building
954 your mod_perl with
955
956 perl Makefile.PL EVERYTHING=1
957
958 With filtering through Apache::SSI, you should expect near a a 20%
959 performance decrease.
960
961 PerlSetVar Filter Off
940962
941963 CgiHeaders
942 default 0. When true, script output that looks like HTTP / CGI headers, will
943 be added to the HTTP headers of the request. So you could add: Set-Cookie:
944 test=message
945
946 <html>...
947 to the top of your script, and all the headers preceding a newline
948 will be added as if with a call to $Response->AddHeader(). This
949 functionality is here for compatibility with raw cgi scripts,
950 and those used to this kind of coding.
951
952 When set to 0, CgiHeaders style headers will not be parsed from the script
953 response.
954
955 PerlSetVar CgiHeaders 0
964 default 0. When true, script output that looks like HTTP / CGI headers,
965 will be added to the HTTP headers of the request. So you could add:
966 Set-Cookie: test=message
967
968 <html>...
969 to the top of your script, and all the headers preceding a newline
970 will be added as if with a call to $Response->AddHeader(). This
971 functionality is here for compatibility with raw cgi scripts,
972 and those used to this kind of coding.
973
974 When set to 0, CgiHeaders style headers will not be parsed from the
975 script response.
976
977 PerlSetVar CgiHeaders 0
956978
957979 Clean
958 default 0, may be set between 1 and 9. This setting determine how much
959 text/html output should be compressed. A setting of 1 strips mostly white
960 space saving usually 10% in output size, at a performance cost of less than
961 5%. A setting of 9 goes much further saving anywhere 25% to 50% typically,
962 but with a performance hit of 50%.
963
964 This config option is implemented via HTML::Clean. Per script configuration
965 of this setting is available via the $Response->{Clean} property, which may
966 also be set between 0 and 9.
967
968 PerlSetVar Clean 0
980 default 0, may be set between 1 and 9. This setting determine how much
981 text/html output should be compressed. A setting of 1 strips mostly
982 white space saving usually 10% in output size, at a performance cost of
983 less than 5%. A setting of 9 goes much further saving anywhere 25% to
984 50% typically, but with a performance hit of 50%.
985
986 This config option is implemented via HTML::Clean. Per script
987 configuration of this setting is available via the $Response->{Clean}
988 property, which may also be set between 0 and 9.
989
990 PerlSetVar Clean 0
969991
970992 CompressGzip
971 default 0, if true will gzip compress HTML output on the fly if
972 Compress::Zlib is installed, and the client browser supports it. Depending
973 on the HTML being compressed, the client may see a 50% to 90% reduction in
974 HTML output. I have seen 40K of HTML squeezed down to just under 6K. This
975 will come at a 5%-20% hit to CPU usage per request compressed.
976
977 Note there are some cases when a browser says it will accept gzip encoding,
978 but then not render it correctly. This behavior has been seen with IE5 when
979 set to use a proxy but not using a proxy, and the URL does not end with a
980 .html or .htm. No work around has yet been found for this case so use at
981 your own risk.
982
983 PerlSetVar CompressGzip 1
993 default 0, if true will gzip compress HTML output on the fly if
994 Compress::Zlib is installed, and the client browser supports it.
995 Depending on the HTML being compressed, the client may see a 50% to 90%
996 reduction in HTML output. I have seen 40K of HTML squeezed down to just
997 under 6K. This will come at a 5%-20% hit to CPU usage per request
998 compressed.
999
1000 Note there are some cases when a browser says it will accept gzip
1001 encoding, but then not render it correctly. This behavior has been seen
1002 with IE5 when set to use a proxy but not using a proxy, and the URL does
1003 not end with a .html or .htm. No work around has yet been found for this
1004 case so use at your own risk.
1005
1006 PerlSetVar CompressGzip 1
9841007
9851008 FormFill
986 default 0, if true will auto fill HTML forms with values from
987 $Request->Form(). This functionality is provided by use of HTML::FillInForm.
988 For more information please see "perldoc HTML::FillInForm", and the example
989 ./site/eg/formfill.asp.
990
991 This feature can be enabled on a per form basis at runtime with
992 $Response->{FormFill} = 1
993
994 PerlSetVar FormFill 1
1009 default 0, if true will auto fill HTML forms with values from
1010 $Request->Form(). This functionality is provided by use of
1011 HTML::FillInForm. For more information please see "perldoc
1012 HTML::FillInForm", and the example ./site/eg/formfill.asp.
1013
1014 This feature can be enabled on a per form basis at runtime with
1015 $Response->{FormFill} = 1
1016
1017 PerlSetVar FormFill 1
9951018
9961019 TimeHiRes
997 default 0, if set and Time::HiRes is installed, will do sub second timing of
998 the time it takes Apache::ASP to process a request. This will not include
999 the time spent in the session manager, nor modperl or Apache, and is only a
1000 rough approximation at best.
1001
1002 If Debug is set also, you will get a comment in your HTML output that
1003 indicates the time it took to process that script.
1004
1005 If system debugging is set with Debug -1 or -2, you will also get this time
1006 in the Apache error log with the other system messages.
1020 default 0, if set and Time::HiRes is installed, will do sub second
1021 timing of the time it takes Apache::ASP to process a request. This will
1022 not include the time spent in the session manager, nor modperl or
1023 Apache, and is only a rough approximation at best.
1024
1025 If Debug is set also, you will get a comment in your HTML output that
1026 indicates the time it took to process that script.
1027
1028 If system debugging is set with Debug -1 or -2, you will also get this
1029 time in the Apache error log with the other system messages.
10071030
10081031 Mail Administration
10091032 Apache::ASP has some powerful administrative email extensions that let you
10131036 can read up about in the OBJECTS section.
10141037
10151038 MailHost
1016 The mail host is the smtp server that the below Mail* config directives will
1017 use when sending their emails. By default Net::SMTP uses smtp mail hosts
1018 configured in Net::Config, which is set up at install time, but this setting
1019 can be used to override this config.
1020
1021 The mail hosts specified in the Net::Config file will be used as backup smtp
1022 servers to the MailHost specified here, should this primary server not be
1023 working.
1024
1025 PerlSetVar MailHost smtp.yourdomain.com.foobar
1039 The mail host is the smtp server that the below Mail* config directives
1040 will use when sending their emails. By default Net::SMTP uses smtp mail
1041 hosts configured in Net::Config, which is set up at install time, but
1042 this setting can be used to override this config.
1043
1044 The mail hosts specified in the Net::Config file will be used as backup
1045 smtp servers to the MailHost specified here, should this primary server
1046 not be working.
1047
1048 PerlSetVar MailHost smtp.yourdomain.com.foobar
10261049
10271050 MailFrom
1028 Default NONE, set this to specify the default mail address placed in the
1029 From: mail header for the $Server->Mail() API extension, as well as
1030 MailErrorsTo and MailAlertTo.
1031
1032 PerlSetVar MailFrom youremail@yourdomain.com.foobar
1051 Default NONE, set this to specify the default mail address placed in the
1052 From: mail header for the $Server->Mail() API extension, as well as
1053 MailErrorsTo and MailAlertTo.
1054
1055 PerlSetVar MailFrom youremail@yourdomain.com.foobar
10331056
10341057 MailErrorsTo
1035 No default, if set, ASP server errors, error code 500, that result while
1036 compiling or running scripts under Apache::ASP will automatically be emailed
1037 to the email address set for this config. This allows an administrator to
1038 have a rapid response to user generated server errors resulting from bugs in
1039 production ASP scripts. Other errors, such as 404 not found will be handled
1040 by Apache directly.
1041
1042 An easy way to see this config in action is to have an ASP script which
1043 calls a die(), which generates an internal ASP 500 server error.
1044
1045 The Debug config of value 2 and this setting are mutually exclusive, as
1046 Debug 2 is a development setting where errors are displayed in the browser,
1047 and MailErrorsTo is a production setting so that errors are silently logged
1048 and sent via email to the web admin.
1049
1050 PerlSetVar MailErrorsTo youremail@yourdomain.com
1058 No default, if set, ASP server errors, error code 500, that result while
1059 compiling or running scripts under Apache::ASP will automatically be
1060 emailed to the email address set for this config. This allows an
1061 administrator to have a rapid response to user generated server errors
1062 resulting from bugs in production ASP scripts. Other errors, such as 404
1063 not found will be handled by Apache directly.
1064
1065 An easy way to see this config in action is to have an ASP script which
1066 calls a die(), which generates an internal ASP 500 server error.
1067
1068 The Debug config of value 2 and this setting are mutually exclusive, as
1069 Debug 2 is a development setting where errors are displayed in the
1070 browser, and MailErrorsTo is a production setting so that errors are
1071 silently logged and sent via email to the web admin.
1072
1073 PerlSetVar MailErrorsTo youremail@yourdomain.com
10511074
10521075 MailAlertTo
1053 The address configured will have an email sent on any ASP server error 500,
1054 and the message will be short enough to fit on a text based pager. This
1055 config setting would be used to give an administrator a heads up that a www
1056 server error occurred, as opposed to MailErrorsTo would be used for
1057 debugging that server error.
1058
1059 This config does not work when Debug 2 is set, as it is a setting for use in
1060 production only, where Debug 2 is for development use.
1061
1062 PerlSetVar MailAlertTo youremail@yourdomain.com
1076 The address configured will have an email sent on any ASP server error
1077 500, and the message will be short enough to fit on a text based pager.
1078 This config setting would be used to give an administrator a heads up
1079 that a www server error occurred, as opposed to MailErrorsTo would be
1080 used for debugging that server error.
1081
1082 This config does not work when Debug 2 is set, as it is a setting for
1083 use in production only, where Debug 2 is for development use.
1084
1085 PerlSetVar MailAlertTo youremail@yourdomain.com
10631086
10641087 MailAlertPeriod
1065 Default 20 minutes, this config specifies the time in minutes over which
1066 there may be only one alert email generated by MailAlertTo. The purpose of
1067 MailAlertTo is to give the admin a heads up that there is an error at the
1068 www server. MailErrorsTo is for to aid in speedy debugging of the incident.
1069
1070 PerlSetVar MailAlertPeriod 20
1088 Default 20 minutes, this config specifies the time in minutes over which
1089 there may be only one alert email generated by MailAlertTo. The purpose
1090 of MailAlertTo is to give the admin a heads up that there is an error at
1091 the www server. MailErrorsTo is for to aid in speedy debugging of the
1092 incident.
1093
1094 PerlSetVar MailAlertPeriod 20
10711095
10721096 File Uploads
10731097 FileUploadMax
1074 default 0, if set will limit file uploads to this size in bytes. This is
1075 currently implemented by setting $CGI::POST_MAX before handling the file
1076 upload. Prior to this, a developer would have to hardcode a value for
1077 $CGI::POST_MAX to get this to work.
1078
1079 PerlSetVar 100000
1098 default 0, if set will limit file uploads to this size in bytes. This is
1099 currently implemented by setting $CGI::POST_MAX before handling the file
1100 upload. Prior to this, a developer would have to hardcode a value for
1101 $CGI::POST_MAX to get this to work.
1102
1103 PerlSetVar 100000
10801104
10811105 FileUploadTemp
1082 default 0, if set will leave a temp file on disk during the request, which
1083 may be helpful for processing by other programs, but is also a security risk
1084 in that other users on the operating system could potentially read this file
1085 while the script is running.
1086
1087 The path to the temp file will be available at
1088 $Request->{FileUpload}{$form_field}{TempFile}. The regular use of file
1089 uploads remains the same with the <$filehandle> to the upload at
1090 $Request->{Form}{$form_field}. Please see the CGI section for more
1091 information on file uploads, and the $Request section in OBJECTS.
1092
1093 PerlSetVar FileUploadTemp 0
1106 default 0, if set will leave a temp file on disk during the request,
1107 which may be helpful for processing by other programs, but is also a
1108 security risk in that other users on the operating system could
1109 potentially read this file while the script is running.
1110
1111 The path to the temp file will be available at
1112 $Request->{FileUpload}{$form_field}{TempFile}. The regular use of file
1113 uploads remains the same with the <$filehandle> to the upload at
1114 $Request->{Form}{$form_field}. Please see the CGI section for more
1115 information on file uploads, and the $Request section in OBJECTS.
1116
1117 PerlSetVar FileUploadTemp 0
10941118
10951119 SYNTAX
10961120 General
11641188 that mixes HTML & perl modes in a single buffer, check
11651189 out the editors/mmm-asp-perl.el file in distribution.
11661190
1167 * Microsoft Frontpage
1168
11691191 * Vim, special syntax support with editors/aasp.vim file in distribution.
11701192
11711193 * UltraEdit32 ( http://www.ultraedit.com/ ) has syntax highlighting,
13141336
13151337 SetHandler perl-script
13161338 PerlModule Apache::ASP
1317 PerlHandler Apache::ASP
1339 PerlHandler Apache::ASP
13181340
13191341 But mod_perl allows for direct access to many more Apache event stages, for
13201342 full list try "perldoc mod_perl" or buy the mod_perl Eagle book. Some
15231545 $Session->{count}++;
15241546 $Session->{count}++;
15251547 $Session->{count}++;
1526 $Session->UnLock();
1548 $Session->UnLock();
15271549
15281550 This sequence causes $Session to be locked and unlocked only 1 time,
15291551 instead of the 6 times that it would be locked otherwise, 2 for each
17331755
17341756 # you don't need to use hash notation when you are only setting
17351757 # a simple value
1736 $Response->{Cookies}{'Test Name'} = 'Test Value';
1758 $Response->{Cookies}{'Test Name'} = 'Test Value';
17371759
17381760 I prefer the hash notation for cookies, as this looks nice, and is quite
17391761 perlish. It is here to stay. The Cookie() routine is very complex and
24502472 dynamically executed at runtime, turn the DynamicIncludes config option on
24512473 as documented above.
24522474
2453 That is not all! SSI is full featured. One of the things missing above is
2454 the
2475 Apache::SSI for mod_perl 1.3.x only
2476 One of the things missing above is the
24552477
24562478 <!--#include virtual=filename.cgi-->
24572479
24582480 tag. This and many other SSI code extensions are available by filtering
24592481 Apache::ASP output through Apache::SSI via the Apache::Filter and the Filter
2460 config options. For more information on how to wire Apache::ASP and
2461 Apache::SSI together, please see the Filter config option documented above.
2462 Also please see Apache::SSI for further information on the capabilities it
2463 offers.
2482 config options, available in mod_perl 1.3.x / Apache 1.3.x. Unfortunately
2483 this functionality is not available with mod_perl 2 / Apache 2.
2484
2485 For more information on how to wire Apache::ASP and Apache::SSI together,
2486 please see the Filter config option documented above. Also please see
2487 Apache::SSI for further information on the capabilities it offers.
2488
2489 SSI with mod_filter in Apache 2
2490 Apache 2 offers chained filters. It may be possible to chain filters to
2491 Apache::ASP output through mod_filter for SSI processing:
2492
2493 http://httpd.apache.org/docs/2.1/mod/mod_filter.html
24642494
24652495 EXAMPLES
24662496 Use with Apache. Copy the ./site/eg directory from the ASP installation to
24802510 order to track a web user and associate server side data with that client,
24812511 the web server sets, and the web client returns a 32 byte session id
24822512 identifier cookie. This implementation is very secure and may be used in
2483 secure HTTPS transactions, and made stronger with SecureSession and
2484 ParanoidSession settings (see CONFIG ).
2513 secure HTTPS transactions, and made stronger with SecureSession,
2514 HTTPOnlySession and ParanoidSession settings (see CONFIG ).
24852515
24862516 However good cookies are for this kind of persistent state management
24872517 between HTTP requests, they have long been under fire for security risks
26232653 <!-- ASP inserts -->
26242654 This employee has been online for <%= int(rand()*600)+1 %>
26252655 seconds, and was born near <%= $birthday %>.
2626 </my:new-employee>
2656 </my:new-employee>
26272657
26282658 For an example of this custom XML tagging in action, please check out the
26292659 ./site/eg/xml_subs.asp script.
27832813
27842814 For more information about CGI.pm, please see the web site
27852815
2786 http://stein.cshl.org/WWW/software/CGI/
2816 http://search.cpan.org/dist/CGI/
27872817
27882818 Query Object Initialization
27892819 You may create a CGI.pm $query object like so:
28452875 this topic, and ./site/eg/file_upload.asp for an example of its use.
28462876 Also, for more details about CGI.pm itself, please see the web site:
28472877
2848 http://stein.cshl.org/WWW/software/CGI/
2878 http://search.cpan.org/dist/CGI/
28492879
28502880 Occasionally, a newer version of CGI.pm will be released which breaks
28512881 file upload compatibility with Apache::ASP. If you find this to occur,
29873017 global.asa, or you may create a perl package or module to share with your
29883018 scripts. For more on perl objects & modules, please see:
29893019
2990 http://www.perldoc.com/perl5.8.0/pod/perlobj.html
3020 http://perldoc.perl.org/perlobj.html
29913021
29923022 Use global.asa's Script_On* Events
29933023 Chances are that you will find yourself doing the same thing repeatedly in
30343064
30353065 Installation
30363066 Examples don't work, I see the ASP script in the browser?
3037 This is most likely that Apache is not configured to execute the Apache::ASP
3038 scripts properly. Check the INSTALL QuickStart section for more info on how
3039 to quickly set up Apache to execute your ASP scripts.
3067 This is most likely that Apache is not configured to execute the
3068 Apache::ASP scripts properly. Check the INSTALL QuickStart section for
3069 more info on how to quickly set up Apache to execute your ASP scripts.
30403070
30413071 Apache Expat vs. XML perl parsing causing segfaults, what do I do?
3042 Make sure to compile apache with expat disabled. The
3043 ./make_httpd/build_httpds.sh in the distribution will do this for you, with
3044 the --disable-rule=EXPAT in particular:
3045
3046 cd ../$APACHE
3047 echo "Building apache =============================="
3048 ./configure \
3049 --prefix=/usr/local/apache \
3050 --activate-module=src/modules/perl/libperl.a \
3051 --enable-module=ssl \
3052 --enable-module=proxy \
3053 --enable-module=so \
3054 --disable-rule=EXPAT
3055
3056 ^^^^^
3057
3058 keywords: segmentation fault, segfault seg fault
3072 Make sure to compile apache with expat disabled. The
3073 ./make_httpd/build_httpds.sh in the distribution will do this for you,
3074 with the --disable-rule=EXPAT in particular:
3075
3076 cd ../$APACHE
3077 echo "Building apache =============================="
3078 ./configure \
3079 --prefix=/usr/local/apache \
3080 --activate-module=src/modules/perl/libperl.a \
3081 --enable-module=ssl \
3082 --enable-module=proxy \
3083 --enable-module=so \
3084 --disable-rule=EXPAT
3085
3086 ^^^^^
3087
3088 keywords: segmentation fault, segfault seg fault
30593089
30603090 Why do variables retain their values between requests?
3061 Unless scoped by my() or local(), perl variables in mod_perl are treated as
3062 globals, and values set may persist from one request to another. This can be
3063 seen in as simple a script as this:
3064
3065 <HTML><BODY>
3066 $counter++;
3067 $Response->Write("<BR>Counter: $counter");
3068 </BODY></HTML>
3069
3070 The value for $counter++ will remain between requests. Generally use of
3071 globals in this way is a BAD IDEA, and you can spare yourself many headaches
3072 if do "use strict" perl programming which forces you to explicity declare
3073 globals like:
3074
3075 use vars qw($counter);
3076
3077 You can make all your Apache::ASP scripts strict by default by setting:
3078
3079 PerlSetVar UseStrict 1
3091 Unless scoped by my() or local(), perl variables in mod_perl are treated
3092 as globals, and values set may persist from one request to another. This
3093 can be seen in as simple a script as this:
3094
3095 <HTML><BODY>
3096 $counter++;
3097 $Response->Write("<BR>Counter: $counter");
3098 </BODY></HTML>
3099
3100 The value for $counter++ will remain between requests. Generally use of
3101 globals in this way is a BAD IDEA, and you can spare yourself many
3102 headaches if do "use strict" perl programming which forces you to
3103 explicity declare globals like:
3104
3105 use vars qw($counter);
3106
3107 You can make all your Apache::ASP scripts strict by default by setting:
3108
3109 PerlSetVar UseStrict 1
30803110
30813111 Apache errors on the PerlHandler or PerlModule directives ?
3082 You get an error message like this:
3083
3084 Invalid command 'PerlModule', perhaps mis-spelled or defined by a
3085 module not included in the server configuration.
3086
3087 You do not have mod_perl correctly installed for Apache. The PerlHandler and
3088 PerlModule directives in Apache *.conf files are extensions enabled by
3089 mod_perl and will not work if mod_perl is not correctly installed.
3090
3091 Common user errors are not doing a 'make install' for mod_perl, which
3092 installs the perl side of mod_perl, and not starting the right httpd after
3093 building it. The latter often occurs when you have an old apache server
3094 without mod_perl, and you have built a new one without copying over to its
3095 proper location.
3096
3097 To get mod_perl, go to http://perl.apache.org
3112 You get an error message like this:
3113
3114 Invalid command 'PerlModule', perhaps mis-spelled or defined by a
3115 module not included in the server configuration.
3116
3117 You do not have mod_perl correctly installed for Apache. The PerlHandler
3118 and PerlModule directives in Apache *.conf files are extensions enabled
3119 by mod_perl and will not work if mod_perl is not correctly installed.
3120
3121 Common user errors are not doing a 'make install' for mod_perl, which
3122 installs the perl side of mod_perl, and not starting the right httpd
3123 after building it. The latter often occurs when you have an old apache
3124 server without mod_perl, and you have built a new one without copying
3125 over to its proper location.
3126
3127 To get mod_perl, go to http://perl.apache.org
30983128
30993129 Error: no request object (Apache=SCALAR(0x???????):)
3100 Your Apache + mod_perl build is not working properly, and is likely a RedHat
3101 Linux RPM DSO build. Make sure you statically build your Apache + mod_perl
3102 httpd, recompiled fresh from the sources.
3130 Your Apache + mod_perl build is not working properly, and is likely a
3131 RedHat Linux RPM DSO build. Make sure you statically build your Apache +
3132 mod_perl httpd, recompiled fresh from the sources.
31033133
31043134 I am getting a tie or MLDBM / state error message, what do I do?
3105 Make sure the web server or you have write access to the eg directory, or to
3106 the directory specified as Global in the config you are using. Default for
3107 Global is the directory the script is in (e.g. '.'), but should be set to
3108 some directory not under the www server document root, for security reasons,
3109 on a production site.
3110
3111 Usually a
3112
3113 chmod -R -0777 eg
3114
3115 will take care of the write access issue for initial testing purposes.
3116
3117 Failing write access being the problem, try upgrading your version of
3118 Data::Dumper and MLDBM, which are the modules used to write the state files.
3135 Make sure the web server or you have write access to the eg directory,
3136 or to the directory specified as Global in the config you are using.
3137 Default for Global is the directory the script is in (e.g. '.'), but
3138 should be set to some directory not under the www server document root,
3139 for security reasons, on a production site.
3140
3141 Usually a
3142
3143 chmod -R -0777 eg
3144
3145 will take care of the write access issue for initial testing purposes.
3146
3147 Failing write access being the problem, try upgrading your version of
3148 Data::Dumper and MLDBM, which are the modules used to write the state
3149 files.
31193150
31203151 Sessions
31213152 How can I use $Session to store complex data structures.
3122 Very carefully. Please read the $Session documentation in the OBJECTS
3123 section. You can store very complex objects in $Session, but you have to
3124 understand the limits, and the syntax that must be used to make this happen.
3125
3126 In particular, stay away from statements that that have more than one level
3127 of indirection on the left side of an assignment like:
3128
3129 $Session->{complex}{object} = $data;
3153 Very carefully. Please read the $Session documentation in the OBJECTS
3154 section. You can store very complex objects in $Session, but you have to
3155 understand the limits, and the syntax that must be used to make this
3156 happen.
3157
3158 In particular, stay away from statements that that have more than one
3159 level of indirection on the left side of an assignment like:
3160
3161 BAD: $Session->{complex}{object} = $data;
31303162
31313163 How can I keep search engine spiders from killing the session manager?
3132 If you want to disallow session creation for certain non web browser user
3133 agents, like search engine spiders, you can use a mod_perl PerlInitHandler
3134 like this to set configuration variables at runtime:
3135
3136 # put the following code into httpd.conf and stop/start apache server
3137 PerlInitHandler My::InitHandler
3138
3139 <Perl>
3140
3141 package My::InitHandler;
3142 use Apache;
3143
3144 sub handler {
3145 my $r = shift; # get the Apache request object
3146
3147 # if not a Mozilla User Agent, then disable sessions explicitly
3148 unless($r->headers_in('User-Agent') =~ /^Mozilla/) {
3149 $r->dir_config('AllowSessionState', 'Off');
3150 }
3151
3152 return 200; # return OK mod_perl status code
3153 }
3154
3155 1;
3156
3157 </Perl>
3158
3159 This will configure your environment before Apache::ASP executes and sees
3160 the configuration settings. You can use the mod_perl API in this way to
3161 configure Apache::ASP at runtime.
3162
3163 Note that the Session Manager is very robust on its own, and denial of
3164 service attacks of the types that spiders and other web bots normally
3165 execute are not likely to affect the Session Manager significantly.
3164 If you want to disallow session creation for certain non web browser
3165 user agents, like search engine spiders, you can use a mod_perl
3166 PerlInitHandler like this to set configuration variables at runtime:
3167
3168 # put the following code into httpd.conf and stop/start apache server
3169 PerlInitHandler My::InitHandler
3170
3171 <Perl>
3172
3173 package My::InitHandler;
3174 use Apache;
3175
3176 sub handler {
3177 my $r = shift; # get the Apache request object
3178
3179 # if not a Mozilla User Agent, then disable sessions explicitly
3180 unless($r->headers_in('User-Agent') =~ /^Mozilla/) {
3181 $r->dir_config('AllowSessionState', 'Off');
3182 }
3183
3184 return 200; # return OK mod_perl status code
3185 }
3186
3187 1;
3188
3189 </Perl>
3190
3191 This will configure your environment before Apache::ASP executes and
3192 sees the configuration settings. You can use the mod_perl API in this
3193 way to configure Apache::ASP at runtime.
3194
3195 Note that the Session Manager is very robust on its own, and denial of
3196 service attacks of the types that spiders and other web bots normally
3197 execute are not likely to affect the Session Manager significantly.
31663198
31673199 How can I use $Session to store a $dbh database handle ?
3168 You cannot use $Session to store a $dbh handle. This can be awkward for
3169 those coming from the IIS/NT world, where you could store just about
3170 anything in $Session, but this boils down to a difference between threads
3171 vs. processes.
3172
3173 Database handles often have per process file handles open, which cannot be
3174 shared between requests, so though you have stored the $dbh data in
3175 $Session, all the other initializations are not relevant in another httpd
3176 process.
3177
3178 All is not lost! Apache::DBI can be used to cache database connections on a
3179 per process basis, and will work for most cases.
3200 You cannot use $Session to store a $dbh handle. This can be awkward for
3201 those coming from the IIS/NT world, where you could store just about
3202 anything in $Session, but this boils down to a difference between
3203 threads vs. processes.
3204
3205 Database handles often have per process file handles open, which cannot
3206 be shared between requests, so though you have stored the $dbh data in
3207 $Session, all the other initializations are not relevant in another
3208 httpd process.
3209
3210 All is not lost! Apache::DBI can be used to cache database connections
3211 on a per process basis, and will work for most cases.
31803212
31813213 Development
31823214 VBScript or JScript supported?
3183 Yes, but not with this Perl module. For ASP with other scripting languages
3184 besides Perl, you will need to go with a commercial vendor in the UNIX
3185 world. Sun has such a solution. Of course on Windows NT and Windows 2000,
3186 you get VBScript for free with IIS.
3187
3188 Sun ONE Active Server Pages (formerly Sun Chili!Soft ASP)
3189 http://www.chilisoft.com
3215 Only Perl scripting is supported with this module.
31903216
31913217 How is database connectivity handled?
3192 Database connectivity is handled through perl's DBI & DBD interfaces. In the
3193 UNIX world, it seems most databases have cross platform support in perl. You
3194 can find the book on DBI programming at
3195 http://www.oreilly.com/catalog/perldbi/
3196
3197 DBD::ODBC is often your ticket on Win32. On UNIX, commercial vendors like
3198 OpenLink Software (http://www.openlinksw.com/) provide the nuts and bolts
3199 for ODBC.
3200
3201 Database connections can be cached per process with Apache::DBI.
3218 Database connectivity is handled through perl's DBI & DBD interfaces. In
3219 the UNIX world, it seems most databases have cross platform support in
3220 perl. You can find the book on DBI programming at
3221 http://www.oreilly.com/catalog/perldbi/
3222
3223 DBD::ODBC is often your ticket on Win32. On UNIX, commercial vendors
3224 like OpenLink Software (http://www.openlinksw.com/) provide the nuts and
3225 bolts for ODBC.
3226
3227 Database connections can be cached per process with Apache::DBI.
32023228
32033229 What is the best way to debug an ASP application ?
3204 There are lots of perl-ish tricks to make your life developing and debugging
3205 an ASP application easier. For starters, you will find some helpful hints by
3206 reading the $Response->Debug() API extension, and the Debug configuration
3207 directive.
3230 There are lots of perl-ish tricks to make your life developing and
3231 debugging an ASP application easier. For starters, you will find some
3232 helpful hints by reading the $Response->Debug() API extension, and the
3233 Debug configuration directive.
32083234
32093235 How are file uploads handled?
3210 Please see the CGI section. File uploads are implemented through CGI.pm
3211 which is loaded at runtime only for this purpose. This is the only time that
3212 CGI.pm will be loaded by Apache::ASP, which implements all other cgi-ish
3213 functionality natively. The rationale for not implementing file uploads
3214 natively is that the extra 100K in memory for CGI.pm shouldn't be a big deal
3215 if you are working with bulky file uploads.
3236 Please see the CGI section. File uploads are implemented through CGI.pm
3237 which is loaded at runtime only for this purpose. This is the only time
3238 that CGI.pm will be loaded by Apache::ASP, which implements all other
3239 cgi-ish functionality natively. The rationale for not implementing file
3240 uploads natively is that the extra 100K in memory for CGI.pm shouldn't
3241 be a big deal if you are working with bulky file uploads.
32163242
32173243 How do I access the ASP Objects in general?
3218 All the ASP objects can be referenced through the main package with the
3219 following notation:
3220
3221 $main::Response->Write("html output");
3222
3223 This notation can be used from anywhere in perl, including routines
3224 registered with $Server->RegisterCleanup().
3225
3226 You use the normal notation in your scripts, includes, and global.asa:
3227
3228 $Response->Write("html output");
3244 All the ASP objects can be referenced through the main package with the
3245 following notation:
3246
3247 $main::Response->Write("html output");
3248
3249 This notation can be used from anywhere in perl, including routines
3250 registered with $Server->RegisterCleanup().
3251
3252 You use the normal notation in your scripts, includes, and global.asa:
3253
3254 $Response->Write("html output");
32293255
32303256 Can I print() in ASP?
3231 Yes. You can print() from anywhere in an ASP script as it aliases to the
3232 $Response->Write() method. Using print() is portable with PerlScript when
3233 using Win32::ASP in that environment.
3257 Yes. You can print() from anywhere in an ASP script as it aliases to the
3258 $Response->Write() method. Using print() is portable with PerlScript
3259 when using Win32::ASP in that environment.
32343260
32353261 Do I have access to ActiveX objects?
3236 Only under Win32 will developers have access to ActiveX objects through the
3237 perl Win32::OLE interface. This will remain true until there are free COM
3238 ports to the UNIX world. At this time, there is no ActiveX for the UNIX
3239 world.
3262 Only under Win32 will developers have access to ActiveX objects through
3263 the perl Win32::OLE interface. This will remain true until there are
3264 free COM ports to the UNIX world. At this time, there is no ActiveX for
3265 the UNIX world.
32403266
32413267 Support and Production
32423268 How do I get things I want done?!
3243 If you find a problem with the module, or would like a feature added, please
3244 mail support, as listed in the SUPPORT section, and your needs will be
3245 promptly and seriously considered, then implemented.
3269 If you find a problem with the module, or would like a feature added,
3270 please mail support, as listed in the SUPPORT section, and your needs
3271 will be promptly and seriously considered, then implemented.
32463272
32473273 What is the state of Apache::ASP? Can I publish a web site on it?
3248 Apache::ASP has been production ready since v.02. Work being done on the
3249 module is on a per need basis, with the goal being to eventually have the
3250 ASP API completed, with full portability to ActiveState PerlScript and MKS
3251 PScript. If you can suggest any changes to facilitate these goals, your
3252 comments are welcome.
3274 Apache::ASP has been production ready since v.02. Work being done on the
3275 module is on a per need basis, with the goal being to eventually have
3276 the ASP API completed, with full portability to ActiveState PerlScript
3277 and MKS PScript. If you can suggest any changes to facilitate these
3278 goals, your comments are welcome.
32533279
32543280 TUNING
32553281 A little tuning can go a long way, and can make the difference between a web
32723298 Apache::ASP v2.29+
32733299
32743300 Apache::ASP Site Tuning
3275 http://www.chamas.com/asp/articles/perlmonth3_tune.html
3301 http://www.apache-asp.org/articles/perlmonth3_tune.html
32763302
32773303 Tuning & Benchmarking
32783304 When performance tuning, it is important to have a tool to measure the
34423468
34433469 Other honorable mentions include:
34443470
3445 !! Doug MacEachern, for moral support and of course mod_perl
3471 !! Gregory Youngblood, Thanos Chatziathanassiou, & Tsirkin Evgeny for keeping the flame alive!
3472
3473 :) Doug MacEachern, for moral support and of course mod_perl
34463474 :) Helmut Zeilinger, Skylos, John Drago, and Warren Young for their help in the community
34473475 :) Randy Kobes, for the win32 binaries, and for always being the epitome of helpfulness
34483476 :) Francesco Pasqualini, for bug fixes with stand alone CGI mode on Win32
35103538 SUPPORT
35113539 COMMUNITY
35123540 Mailing List Archives
3513 Try the Apache::ASP mailing list archive first when working through an issue
3514 as others may have had the same question as you, then try the mod_perl list
3515 archives since often problems working with Apache::ASP are really mod_perl
3516 ones.
3517
3518 The Apache::ASP mailing list archives are located at:
3519
3520 http://groups.yahoo.com/group/apache-asp/
3521 http://www.mail-archive.com/asp%40perl.apache.org/
3522
3523 The mod_perl mailing list archives are located at:
3524
3525 http://forum.swarthmore.edu/epigone/modperl
3526 http://www.egroups.com/group/modperl/
3541 Try the Apache::ASP mailing list archive first when working through an
3542 issue as others may have had the same question as you, then try the
3543 mod_perl list archives since often problems working with Apache::ASP are
3544 really mod_perl ones.
3545
3546 The Apache::ASP mailing list archives are located at:
3547
3548 http://groups.yahoo.com/group/apache-asp/
3549 http://www.mail-archive.com/asp%40perl.apache.org/
3550
3551 The mod_perl mailing list archives are located at:
3552
3553 http://mail-archives.apache.org/mod_mbox/perl-modperl/
35273554
35283555 Mailing List
3529 Please subscribe to the Apache::ASP mailing list by sending an email to
3530 asp-subscribe[at]perl.apache.org and send your questions or comments to the
3531 list after your subscription is confirmed.
3532
3533 To unsubscribe from the Apache::ASP mailing list, just send an email to
3534 asp-unsubscribe[at]perl.apache.org
3535
3536 If you think this is a mod_perl specific issue, you can send your question
3537 to modperl[at]apache.org
3556 Please subscribe to the Apache::ASP mailing list by sending an email to
3557 asp-subscribe[at]perl.apache.org and send your questions or comments to
3558 the list after your subscription is confirmed.
3559
3560 To unsubscribe from the Apache::ASP mailing list, just send an email to
3561 asp-unsubscribe[at]perl.apache.org
3562
3563 If you think this is a mod_perl specific issue, you can send your
3564 question to modperl[at]apache.org
35383565
35393566 Donations
3540 Apache::ASP is freely distributed under the terms of the GPL license ( see
3541 the LICENSE section ). If you would like to donate time to the project,
3542 please get involved on the Apache::ASP Mailing List, and submit ideas, bug
3543 fixes and patches for the core system, and perhaps most importantly to
3544 simply support others in learning the ins and outs of the software.
3567 Apache::ASP is freely distributed under the terms of the Perl artistic
3568 license ( see the LICENSE section ). If you would like to donate time to
3569 the project, please get involved on the Apache::ASP Mailing List, and
3570 submit ideas, bug fixes and patches for the core system, and perhaps
3571 most importantly to simply support others in learning the ins and outs
3572 of the software.
35453573
35463574 COMMERCIAL
35473575 If you would like commercial support for Apache::ASP, please check out any
35483576 of the following listed companies. Note that this is not an endorsement, and
3549 if you would like your company listed here, please email asp-dev [at]
3550 chamas.com with your information.
3577 if you would like your company listed here, please email
3578 asp[at]perl.apache.org with your information.
35513579
35523580 AlterCom
3553 We use, host and support mod_perl. We would love to be able to help anyone
3554 with their mod_perl Apache::ASP needs. Our mod_perl hosting is $24.95 mo.
3555
3556 http://altercom.com/home.html
3581 We use, host and support mod_perl. We would love to be able to help
3582 anyone with their mod_perl Apache::ASP needs. Our mod_perl hosting is
3583 $24.95 mo.
3584
3585 http://altercom.com/home.html
35573586
35583587 The Cyberchute Connection
3559 Our hosting services support Apache:ASP along with Mod_Perl, PHP and MySQL.
3560
3561 http://www.Cyberchute.com
3562
3563 GrokThis.net
3564 Web hosting provider. Specializing in mod_perl and mod_python hosting, we
3565 allow users to edit their own Apache configuration files and run their own
3566 Apache servers.
3567
3568 http://grokthis.net
3588 Our hosting services support Apache:ASP along with Mod_Perl, PHP and
3589 MySQL.
3590
3591 http://www.Cyberchute.com
35693592
35703593 OmniTI
3571 OmniTI supports Apache and mod_perl (including Apache::ASP) and offers
3572 competitive pricing for both hourly and project-based jobs. OmniTI has
3573 extensive experience managing and maintaining both large and small projects.
3574 Our services range from short-term consulting to project-based development,
3575 and include ongoing maintenance and hosting.
3576
3577 http://www.omniti.com
3594 OmniTI supports Apache and mod_perl (including Apache::ASP) and offers
3595 competitive pricing for both hourly and project-based jobs. OmniTI has
3596 extensive experience managing and maintaining both large and small
3597 projects. Our services range from short-term consulting to project-based
3598 development, and include ongoing maintenance and hosting.
3599
3600 http://www.omniti.com
35783601
35793602 TUX IT AG
3580 Main business is implementing and maintaining infrastructure for big
3581 websites and portals, as well as developing web applications for our
3582 customers (Apache, Apache::ASP, PHP, Perl, MySQL, etc.)
3583
3584 The prices for our service are about 900 EUR per day which is negotiable
3585 (for longer projects, etc.).
3586
3587 http://www.tuxit.de
3603 Main business is implementing and maintaining infrastructure for big
3604 websites and portals, as well as developing web applications for our
3605 customers (Apache, Apache::ASP, PHP, Perl, MySQL, etc.)
3606
3607 The prices for our service are about 900 EUR per day which is negotiable
3608 (for longer projects, etc.).
3609
3610 http://www.tuxit.de
35883611
35893612 SITES USING
35903613 What follows is a list of public sites that are using Apache::ASP. If you
35913614 use the software for your site, and would like to show your support of the
3592 software by being listed, please send your link to asp-dev [at] chamas.com
3615 software by being listed, please send your link to asp[at]perl.apache.org
35933616
35943617 For a list of testimonials of those using Apache::ASP, please see the
35953618 TESTIMONIALS section.
35963619
3597 Zapisy - Testy
3598 http://www.ch.pwr.wroc.pl/~bruno/testy/
3620 PERSONiO Match
3621 http://www.personio.com/home.asp
3622
3623 gutscheinwurst.de - a German voucher community
3624 http://www.gutscheinwurst.de
35993625
36003626 SalesJobs.com
36013627 http://www.salesjobs.com
36023628
3629 hanschur.de
3630 http://www.hanschur.de
3631
3632 Webtist
3633 http://www.webtist.de
3634
36033635 FreeLotto
36043636 http://www.freelotto.com
36053637
36183650 WebTime
36193651 http://webtime-project.net
36203652
3621 Meet-O-Matic
3622 http://meetomatic.com/about.asp
3623
3624 Apache Hello World Benchmarks
3625 http://chamas.com/bench/
3626
36273653 AlterCom, Advanced Web Hosting
36283654 http://altercom.com/
36293655
36333659 ESSTECwebservices
36343660 http://www.esstec.be/
36353661
3636 SQLRef
3637 http://comclub.dyndns.org:8081/sqlref/
3638
3639 Bouygues Telecom Enterprises
3640 http://www.b2bouygtel.com
3641
36423662 Alumni.NET
36433663 http://www.alumni.net
36443664
36453665 Anime Wallpapers dot com
36463666 http://www.animewallpapers.com/
36473667
3648 Chamas Enterprises Inc.
3649 http://www.chamas.com
3650
36513668 Cine.gr
36523669 http://www.cine.gr
36533670
36663683 Integra
36673684 http://www.integra.ru/
36683685
3669 Internetowa Gielda Samochodowa
3670 http://www.gielda.szczecin.pl
3671
36723686 Money FM
36733687 http://www.moneyfm.gr
36743688
36893703
36903704 redhat.com | support
36913705 http://www.redhat.com/apps/support/
3692
3693 Samara.RU
3694 http://portal.samara.ru/
36953706
36963707 Spotlight
36973708 http://www.spotlight.com.au
37083719 For a list of sites using Apache::ASP, please see the SITES USING section.
37093720
37103721 Red Hat
3711 We're using Apache::ASP on www.redhat.com. We find Apache::ASP very easy to
3712 use, and it's quick for new developers to get up to speed with it, given
3713 that many people have already been exposed to the ASP object model that
3714 Apache::ASP is based on.
3715
3716 The documentation is comprehensive and easy to understand, and the community
3717 and maintainer have been very helpful whenever we've had questions.
3718
3719 -- Tom Lancaster, Red Hat
3722 We're using Apache::ASP on www.redhat.com. We find Apache::ASP very easy
3723 to use, and it's quick for new developers to get up to speed with it,
3724 given that many people have already been exposed to the ASP object model
3725 that Apache::ASP is based on.
3726
3727 The documentation is comprehensive and easy to understand, and the
3728 community and maintainer have been very helpful whenever we've had
3729 questions.
3730
3731 -- Tom Lancaster, Red Hat
3732
3733 Anime Wallpaper at Anime Cubed
3734 Your suite has got our old CGI implementation beat, hands down. Our site
3735 is divided into two main areas, each run by a separate developer, and
3736 the Apache::ASP section runs head and shoulders above the other side.
3737 Anyone who is still using anything but your product to implement their
3738 webpages seriously needs to take a look at how versatile and powerful
3739 Apache::ASP is. Thanks again for such great work!
3740
3741 -- Al from 'Anime Wallpaper at Anime Cubed', http://www.animecubed.com/wallpapers/
3742
3743 gutscheinwurst.de
3744 I am the web master of http://www.gutscheinwurst.de , a German voucher
3745 community. We use Apache::Asp to run our backend & administration
3746 servers for the system. We started using Apache::ASP to see whether it
3747 is a valid alternative to IIS legacy systems. So far all expectations in
3748 regard of performance, ease of development and integration have been
3749 fulfilled or exceeded. Thank's for such a great product :)
3750
3751 -- Johnannes Leimbach
37203752
37213753 D. L. Fox
3722 I had programmed in Perl for some time ... but, since I also knew VB, I had
3723 switched to VB in IIS-ASP for web stuff because of its ease of use in
3724 embedding code with HTML ... When I discovered Apache-ASP, it was like a
3725 dream come true. I would much rather code in Perl than any other language.
3726 Thanks for such a fine product!
3754 I had programmed in Perl for some time ... but, since I also knew VB, I
3755 had switched to VB in IIS-ASP for web stuff because of its ease of use
3756 in embedding code with HTML ... When I discovered Apache-ASP, it was
3757 like a dream come true. I would much rather code in Perl than any other
3758 language. Thanks for such a fine product!
37273759
37283760 HOSTING 321, LLC.
3729 After discontinuing Windows-based hosting due to the high cost of software,
3730 our clients are thrilled with Apache::ASP and they swear ASP it's faster
3731 than before. Installation was a snap on our 25-server web farm with a small
3732 shell script and everything is running perfectly! The documentation is very
3733 comprehensive and everyone has been very helpful during this migration.
3734
3735 Thank you!
3736
3737 -- Richard Ward, HOSTING 321, LLC.
3761 After discontinuing Windows-based hosting due to the high cost of
3762 software, our clients are thrilled with Apache::ASP and they swear ASP
3763 it's faster than before. Installation was a snap on our 25-server web
3764 farm with a small shell script and everything is running perfectly! The
3765 documentation is very comprehensive and everyone has been very helpful
3766 during this migration.
3767
3768 Thank you!
3769
3770 -- Richard Ward, HOSTING 321, LLC.
37383771
37393772 Concept Online Ltd.
3740 I would like to say that your ASP module rocks :-) We have practically
3741 stopped developing in anything else about half a year ago, and are now using
3742 Apache::ASP extensively. I just love Perl, and whereever we are not "forced"
3743 to use JSP, we chose ASP. It is fast, reliable, versatile, documented in a
3744 way that is the best for professionals - so thank you for writting and
3745 maintaining it!
3746
3747 -- Csongor Fagyal, Concept Online Ltd.
3773 I would like to say that your ASP module rocks :-) We have practically
3774 stopped developing in anything else about half a year ago, and are now
3775 using Apache::ASP extensively. I just love Perl, and whereever we are
3776 not "forced" to use JSP, we chose ASP. It is fast, reliable, versatile,
3777 documented in a way that is the best for professionals - so thank you
3778 for writting and maintaining it!
3779
3780 -- Csongor Fagyal, Concept Online Ltd.
37483781
37493782 WebTime
3750 As we have seen with WebTime, Apache::ASP is not only good for the
3751 development of website, but also for the development of webtools. Since I
3752 first discoverd it, I made it a must-have in my society by taking
3753 traditional PHP users to the world of perl afficionados.
3754
3755 Having the possibility to use Apache::ASP with mod_perl or mod_cgi make it
3756 constraintless to use because of CGI's universality and perl's portability.
3757
3758 -- Grégoire Lejeune
3783 As we have seen with WebTime, Apache::ASP is not only good for the
3784 development of website, but also for the development of webtools. Since
3785 I first discoverd it, I made it a must-have in my society by taking
3786 traditional PHP users to the world of perl afficionados.
3787
3788 Having the possibility to use Apache::ASP with mod_perl or mod_cgi make
3789 it constraintless to use because of CGI's universality and perl's
3790 portability.
3791
3792 -- Grégoire Lejeune
37593793
37603794 David Kulp
3761 First, I just want to say that I am very very impressed with Apache::ASP. I
3762 just want to gush with praise after looking at many other implementations of
3763 perl embedded code and being very underwhelmed. This is so damn slick and
3764 clean. Kudos! ...
3765
3766 ... I'm very pleased how quickly I've been able to mock up the application.
3767 I've been writing Perl CGI off and on since 1993(!) and I can tell you that
3768 Apache::ASP is a pleasure. (Last year I tried Zope and just about threw my
3769 computer out the window.)
3770
3771 -- David Kulp
3795 First, I just want to say that I am very very impressed with
3796 Apache::ASP. I just want to gush with praise after looking at many other
3797 implementations of perl embedded code and being very underwhelmed. This
3798 is so damn slick and clean. Kudos! ...
3799
3800 ... I'm very pleased how quickly I've been able to mock up the
3801 application. I've been writing Perl CGI off and on since 1993(!) and I
3802 can tell you that Apache::ASP is a pleasure. (Last year I tried Zope and
3803 just about threw my computer out the window.)
3804
3805 -- David Kulp
37723806
37733807 MFM Commmunication Software, Inc.
3774 Working in a team environment where you have HTML coders and perl coders,
3775 Apache::ASP makes it easy for the HTML folks to change the look of the page
3776 without knowing perl. Using Apache::ASP (instead of another embedded perl
3777 solution) allows the HTML jockeys to use a variety of HTML tools that
3778 understand ASP, which reduces the amount of code they break when editing the
3779 HTML. Using Apache::ASP instead of M$ ASP allows us to use perl (far
3780 superior to VBScript) and Apache (far superior to IIS).
3781
3782 We've been very pleased with Apache::ASP and its support.
3808 Working in a team environment where you have HTML coders and perl
3809 coders, Apache::ASP makes it easy for the HTML folks to change the look
3810 of the page without knowing perl. Using Apache::ASP (instead of another
3811 embedded perl solution) allows the HTML jockeys to use a variety of HTML
3812 tools that understand ASP, which reduces the amount of code they break
3813 when editing the HTML. Using Apache::ASP instead of M$ ASP allows us to
3814 use perl (far superior to VBScript) and Apache (far superior to IIS).
3815
3816 We've been very pleased with Apache::ASP and its support.
37833817
37843818 Planet of Music
3785 Apache::ASP has been a great tool. Just a little background.... the whole
3786 site had been in cgi flat files when I started here. I was looking for a
3787 technology that would allow me to write the objects and NEVER invoke
3788 CGI.pm... I found it and hopefuly I will be able to implement this every
3789 site I go to.
3790
3791 When I got here there was a huge argument about needing a game engine and I
3792 belive this has been the key... Games are approx. 10 time faster than
3793 before. The games don't break anylonger. All in all a great tool for
3794 advancement.
3795
3796 -- JC Fant IV
3819 Apache::ASP has been a great tool. Just a little background.... the
3820 whole site had been in cgi flat files when I started here. I was looking
3821 for a technology that would allow me to write the objects and NEVER
3822 invoke CGI.pm... I found it and hopefuly I will be able to implement
3823 this every site I go to.
3824
3825 When I got here there was a huge argument about needing a game engine
3826 and I belive this has been the key... Games are approx. 10 time faster
3827 than before. The games don't break anylonger. All in all a great tool
3828 for advancement.
3829
3830 -- JC Fant IV
37973831
37983832 Cine.gr
3799 ...we ported our biggest yet ASP site from IIS (well, actually rewrote),
3800 Cine.gr and it is a killer site. In some cases, the whole thing got almost
3801 25 (no typo) times faster... None of this would ever be possible without
3802 Apache::ASP (I do not ever want to write ``print "<HTML>\n";'' again).
3833 ...we ported our biggest yet ASP site from IIS (well, actually rewrote),
3834 Cine.gr and it is a killer site. In some cases, the whole thing got
3835 almost 25 (no typo) times faster... None of this would ever be possible
3836 without Apache::ASP (I do not ever want to write ``print "<HTML>\n";''
3837 again).
38033838
38043839 RESOURCES
38053840 Here are some important resources listed related to the use of Apache::ASP
38193854 Embedded Perl ( part of a series on Perl )
38203855 http://www.wdvl.com/Authoring/Languages/Perl/PerlfortheWeb/index15.html
38213856
3822 Benchmarking
3823 Apache Hello World Benchmarks
3824 http://chamas.com/bench/
3825
38263857 Books
38273858 mod_perl "Eagle" Book
38283859 http://www.modperl.com
38333864 Programming the Perl DBI
38343865 http://www.oreilly.com/catalog/perldbi/
38353866
3836 Presentations
3837 Apache::ASP Tutorial, 2000 Open Source Convention ( PowerPoint )
3838 http://www.chamas.com/asp/OSS_convention_2000.pps
3839
3840 Advanced Apache::ASP Tutorial, 2001 Open Source Convention ( Zipped PDF )
3841 http://www.chamas.com/asp/OSS_convention_2001.zip
3842
3843 Advanced Apache::ASP Tutorial, 2001 Open Source Convention ( PDF )
3844 http://www.chamas.com/asp/OSS_convention_2001.pdf
3845
38463867 Reference Cards
38473868 Apache & mod_perl Reference Cards
38483869 http://www.refcards.com/
38513872 mod_perl Apache web module
38523873 http://perl.apache.org
38533874
3854 mod_perl Guide
3875 mod_perl 1.x Guide
38553876 http://perl.apache.org/guide/
38563877
38573878 Perl Programming Language
38593880
38603881 Apache Web Server
38613882 http://www.apache.org
3862
3883
38633884 TODO
38643885 There is no specific time frame in which these things will be implemented.
38653886 Please let me know if any of these is of particular interest to you, and I
38693890 + Database storage of $Session & $Application, so web clusters
38703891 may scale better than the current NFS/CIFS StateDir implementation
38713892 allows, maybe via Apache::Session.
3872 + Sample Apache::ASP applications beyond ./site/eg
3873 + More caching options like $Server->Cache for user cache
3874 and $Response->Cache for page caching
3875 + Caching guide
3876
3877 MAY BE DONE
3878 + VBScript, ECMAScript or JavaScript interpreters
3879 + Dumping state of Apache::ASP during an error, and being
3880 able to go through it with the perl debugger.
38813893
38823894 CHANGES
38833895 Apache::ASP has been in development since 1998, and was production ready
38913903
38923904 + = improvement - = bug fix (d) = documentations
38933905
3894 $VERSION = 2.62; $DATE="2011/08/16"
3895
3896 - Fixed 'application/x-www-form-urlencoded' for AJAX POSTs post
3897 Firefox 3.x
3898
3899 + First sourceforge.net hosted version
3900
3901 + Incremented version number to actually match SVN branch tag
3902
3903 + Switched to Big-endian date format in the documentation.
3904 Less chance of misunderstandings
3906 $VERSION = 2.63; $DATE="03/14/2018"
3907 + Added section ``raw'' to MailErrors.inc to debug POSTs without
3908 form fields
3909
3910 - MailErrorsHTML now uses monospaced fonts for errors. Easier on
3911 the eyes and more informative
3912
3913 $VERSION = 2.62; $DATE="08/16/2011"
3914 - Fixed 'application/x-www-form-urlencoded' for AJAX POSTs post
3915 Firefox 3.x
3916
3917 + First sourceforge.net hosted version
3918
3919 + Incremented version number to actually match SVN branch tag
39053920
39063921 $VERSION = 2.61; $DATE="05/24/2008"
3907
3908 - updated for more recent mod_perl 2 environment to trigger correct loading of modules
3909
3910 + loads modules in a backwards compatible way for older versions of mod_perl 1.99_07 to 1.99_09
3911
3912 + license changes from GPL to Perl Artistic License
3913
3914 Please see README for changes for past versions.
3922 - updated for more recent mod_perl 2 environment to trigger correct loading of modules
3923
3924 + loads modules in a backwards compatible way for older versions of mod_perl 1.99_07 to 1.99_09
3925
3926 + license changes from GPL to Perl Artistic License
39153927
39163928 $VERSION = 2.59; $DATE="05/23/2005"
3917 + added "use bytes" to Response object to calculate Content-Length
3918 correctly for UTF8 data, which should require therefore at least
3919 perl version 5.6 installed
3920
3921 + updated to work with latest mod_perl 2.0 module naming convention,
3922 thanks to Randy Kobes for patch
3923
3924 + examples now exclude usage of Apache::Filter & Apache::SSI under mod_perl 2.0
3929 + added "use bytes" to Response object to calculate Content-Length
3930 correctly for UTF8 data, which should require therefore at least
3931 perl version 5.6 installed
3932
3933 + updated to work with latest mod_perl 2.0 module naming convention,
3934 thanks to Randy Kobes for patch
3935
3936 + examples now exclude usage of Apache::Filter & Apache::SSI under mod_perl 2.0
39253937
39263938 $VERSION = 2.57; $DATE="01/29/2004"
3927 - $Server->Transfer will update $0 correctly
3928
3929 - return 0 for mod_perl handler to work with latest mod_perl 2 release
3930 when we were returning 200 ( HTTP_OK ) before
3931
3932 - fixed bug in $Server->URL when called like $Server->URL($url)
3933 without parameters. Its not clear which perl versions this bug
3934 affected.
3939 - $Server->Transfer will update $0 correctly
3940
3941 - return 0 for mod_perl handler to work with latest mod_perl 2 release
3942 when we were returning 200 ( HTTP_OK ) before
3943
3944 - fixed bug in $Server->URL when called like $Server->URL($url)
3945 without parameters. Its not clear which perl versions this bug
3946 affected.
39353947
39363948 $VERSION = 2.55; $DATE="08/09/2003"
3937 - Bug fixes for running on standalone CGI mode on Win32 submitted
3938 by Francesco Pasqualini
3939
3940 + Added Apache::ASP::Request::BINMODE for binmode() being
3941 called on STDIN after STDIN is tied to $Request object
3942
3943 + New RequestBinaryRead configuration created, may be turned off
3944 to prevent $Request object from reading POST data
3945
3946 ++ mod_perl 2 optmizations, there was a large code impact on this,
3947 as much code was restructured to reduce the differences between
3948 mod_perl 1 and mod_perl 2, most importantly, Apache::compat is
3949 no longer used
3950
3951 + preloaded CGI for file uploads in the mod_perl environment
3952
3953 - When XSLT config is set, $Response->Redirect() should work now
3954 Thanks to Marcus Zoller for pointing problem out
3955
3956 + Added CookieDomain setting, documented, and added test to cover
3957 it in t/cookies.t . Setting suggested by Uwe Riehm, who nicely
3958 submitted some code for this.
3949 - Bug fixes for running on standalone CGI mode on Win32 submitted
3950 by Francesco Pasqualini
3951
3952 + Added Apache::ASP::Request::BINMODE for binmode() being
3953 called on STDIN after STDIN is tied to $Request object
3954
3955 + New RequestBinaryRead configuration created, may be turned off
3956 to prevent $Request object from reading POST data
3957
3958 ++ mod_perl 2 optmizations, there was a large code impact on this,
3959 as much code was restructured to reduce the differences between
3960 mod_perl 1 and mod_perl 2, most importantly, Apache::compat is
3961 no longer used
3962
3963 + preloaded CGI for file uploads in the mod_perl environment
3964
3965 - When XSLT config is set, $Response->Redirect() should work now
3966 Thanks to Marcus Zoller for pointing problem out
3967
3968 + Added CookieDomain setting, documented, and added test to cover
3969 it in t/cookies.t . Setting suggested by Uwe Riehm, who nicely
3970 submitted some code for this.
39593971
39603972 $VERSION = 2.53; $DATE="04/10/2003"
3961 + XMLSubs tags with "-" in them will have "-" replaced with "_" or underscore, so a
3962 tag like <my:render-table /> will be translated to &my::render_table() ... tags with
3963 - in them are common in extended XML syntaxes, but perl subs cannot have - in them only.
3964
3965 + Clean setting now works on output when $Response->{ContentType} begins with text/html;
3966 like "text/html; charset=iso-8859-2" ... before Clean would only work on output marked
3967 with ContentType text/html. Thanks to Szymon Juraszczyk for recommending fix.
3968
3969 --Fixed a bug which would cause Session_OnEnd to be called twice on sessions in a certain case,
3970 particularly when an old expired session gets reused by and web browser... this bug was
3971 a result of a incomplete session cleanup method in this case. Thanks to Oleg Kobyakovskiy
3972 for reporting this bug. Added test in t/session_events.t to cover this problem going forward.
3973
3974 - Compile errors from Apache::ASP->Loader() were not being reported. They will
3975 be reported again now. Thanks to Thanos Chatziathanassiou for discovering and
3976 documenting this bug. Added test in t/load.t to cover this problem going forward.
3977
3978 + use of chr(hex($1)) to decode URI encoded parameters instead of pack("c",hex($1))
3979 faster & more correct, thanks to Nikolay Melekhin for pointing out this need.
3980
3981 (d) Added old perlmonth.com articles to ./site/articles in distribution
3982 and linked to them from the docs RESOURCES section
3983
3984 (d) Updated documention for the $Application->SessionCount API
3985
3986 + Scripts with named subroutines, which is warned against in the style guide,
3987 will not be cached to help prevent my closure problems that often
3988 hurt new developers working in mod_perl environments. The downside
3989 is that these script will have a performance penalty having to be
3990 recompiled each invocation, but this will kill many closure caching
3991 bugs that are hard to detect.
3992
3993 - $Request->FileUpload('upload_file', 'BrowserFile') would return
3994 a glob before that would be the file name in scalar form. However
3995 this would be interpreted as a reference incorrectly. The fix
3996 is to make sure this is always a scalar by stringifying
3997 this data internally. Thanks to Richard Curtis for pointing
3998 out this bug.
3973 + XMLSubs tags with "-" in them will have "-" replaced with "_" or underscore, so a
3974 tag like <my:render-table /> will be translated to &my::render_table() ... tags with
3975 - in them are common in extended XML syntaxes, but perl subs cannot have - in them only.
3976
3977 + Clean setting now works on output when $Response->{ContentType} begins with text/html;
3978 like "text/html; charset=iso-8859-2" ... before Clean would only work on output marked
3979 with ContentType text/html. Thanks to Szymon Juraszczyk for recommending fix.
3980
3981 --Fixed a bug which would cause Session_OnEnd to be called twice on sessions in a certain case,
3982 particularly when an old expired session gets reused by and web browser... this bug was
3983 a result of a incomplete session cleanup method in this case. Thanks to Oleg Kobyakovskiy
3984 for reporting this bug. Added test in t/session_events.t to cover this problem going forward.
3985
3986 - Compile errors from Apache::ASP->Loader() were not being reported. They will
3987 be reported again now. Thanks to Thanos Chatziathanassiou for discovering and
3988 documenting this bug. Added test in t/load.t to cover this problem going forward.
3989
3990 + use of chr(hex($1)) to decode URI encoded parameters instead of pack("c",hex($1))
3991 faster & more correct, thanks to Nikolay Melekhin for pointing out this need.
3992
3993 (d) Added old perlmonth.com articles to ./site/articles in distribution
3994 and linked to them from the docs RESOURCES section
3995
3996 (d) Updated documention for the $Application->SessionCount API
3997
3998 + Scripts with named subroutines, which is warned against in the style guide,
3999 will not be cached to help prevent my closure problems that often
4000 hurt new developers working in mod_perl environments. The downside
4001 is that these script will have a performance penalty having to be
4002 recompiled each invocation, but this will kill many closure caching
4003 bugs that are hard to detect.
4004
4005 - $Request->FileUpload('upload_file', 'BrowserFile') would return
4006 a glob before that would be the file name in scalar form. However
4007 this would be interpreted as a reference incorrectly. The fix
4008 is to make sure this is always a scalar by stringifying
4009 this data internally. Thanks to Richard Curtis for pointing
4010 out this bug.
39994011
40004012 $VERSION = 2.51; $DATE="02/10/2003"
4001 + added t/session_query_parse.t test to cover use of SessionQueryParse
4002 and $Server->URL APIs
4003
4004 - Fixed duplicate "&" bug associated with using $Server->URL
4005 and SessionQueryParse together
4006
4007 + Patch to allow $Server->URL() to be called multiple times on the same URL
4008 as in $Server->URL($Server->URL($url, \%params), \%more_params)
4009
4010 (d) Added new testimonials & sites & created a separate testimonials page.
4011
4012 - SessionQueryParse will now add to &amp; to the query strings
4013 embedded in the HTML, instead of & for proper HTML generation.
4014 Thanks to Peter Galbavy for pointing out and Thanos Chatziathanassiou
4015 for suggesting the fix.
4016
4017 - $Response->{ContentType} set to text/html for developer error reporting,
4018 in case this was set to something else before the error occured.
4019 Thanks to Philip Mak for reporting.
4020
4021 - Couple of minor bug fixes under PerlWarn use, thanks Peter Galbavy
4022 for reporting.
4023
4024 + Added automatic load of "use Apache2" for compat with mod_perl2
4025 request objects when Apache::ASP is loaded via "PerlModule Apache::ASP"
4026 Thanks to Richard Curtis for reporting bug & subsequent testing.
4027
4028 - When GlobalPackage config changes, but global.asa has not, global.asa
4029 will be recompiled anyway to update the GlobalPackage correctly.
4030 Changing GlobalPackage before would cause errors if global.asa was
4031 already compiled.
4032
4033 ++ For ANY PerlSetVar type config, OFF/Off/off will be assumed
4034 to have value of 0 for that setting. Before, only a couple settings
4035 had this semantics, but they all do now for consistency.
4036
4037 - Fix for InodeNames config on OpenBSD, or any OS that might have
4038 a device # of 0 for the file being stat()'d, thanks to Peter Galbavy
4039 for bug report.
4040
4041 ++ Total XSLT speedups, 5-10% on large XSLT, 10-15% on small XSLT
4042
4043 + bypass meta data check like expires for XSLT Cache() API use
4044 because XSLT tranformations don't expire, saves hit to cache dbm
4045 for meta data
4046
4047 + use of direct Apache::ASP::State methods like FETCH/STORE
4048 in Cache() layer so we don't have to go through slower tied interface.
4049 This will speed up XSLT & and include output caching mostly.
4050
4051 + minor optimizations for speed & memory usage
4013 + added t/session_query_parse.t test to cover use of SessionQueryParse
4014 and $Server->URL APIs
4015
4016 - Fixed duplicate "&" bug associated with using $Server->URL
4017 and SessionQueryParse together
4018
4019 + Patch to allow $Server->URL() to be called multiple times on the same URL
4020 as in $Server->URL($Server->URL($url, \%params), \%more_params)
4021
4022 (d) Added new testimonials & sites & created a separate testimonials page.
4023
4024 - SessionQueryParse will now add to &amp; to the query strings
4025 embedded in the HTML, instead of & for proper HTML generation.
4026 Thanks to Peter Galbavy for pointing out and Thanos Chatziathanassiou
4027 for suggesting the fix.
4028
4029 - $Response->{ContentType} set to text/html for developer error reporting,
4030 in case this was set to something else before the error occured.
4031 Thanks to Philip Mak for reporting.
4032
4033 - Couple of minor bug fixes under PerlWarn use, thanks Peter Galbavy
4034 for reporting.
4035
4036 + Added automatic load of "use Apache2" for compat with mod_perl2
4037 request objects when Apache::ASP is loaded via "PerlModule Apache::ASP"
4038 Thanks to Richard Curtis for reporting bug & subsequent testing.
4039
4040 - When GlobalPackage config changes, but global.asa has not, global.asa
4041 will be recompiled anyway to update the GlobalPackage correctly.
4042 Changing GlobalPackage before would cause errors if global.asa was
4043 already compiled.
4044
4045 ++ For ANY PerlSetVar type config, OFF/Off/off will be assumed
4046 to have value of 0 for that setting. Before, only a couple settings
4047 had this semantics, but they all do now for consistency.
4048
4049 - Fix for InodeNames config on OpenBSD, or any OS that might have
4050 a device # of 0 for the file being stat()'d, thanks to Peter Galbavy
4051 for bug report.
4052
4053 ++ Total XSLT speedups, 5-10% on large XSLT, 10-15% on small XSLT
4054
4055 + bypass meta data check like expires for XSLT Cache() API use
4056 because XSLT tranformations don't expire, saves hit to cache dbm
4057 for meta data
4058
4059 + use of direct Apache::ASP::State methods like FETCH/STORE
4060 in Cache() layer so we don't have to go through slower tied interface.
4061 This will speed up XSLT & and include output caching mostly.
4062
4063 + minor optimizations for speed & memory usage
40524064
40534065 $VERSION = 2.49; $DATE="11/10/2002"
4054 -- bug introduced in 2.47 cached script compilations for executing
4055 scripts ( not includes ) of the same name in different directories
4056 for the same Global/GlobalPackage config for an application.
4057 Fix was to remove optimization that caused problem, and
4058 created test case t/same_name.t to cover bug.
4066 -- bug introduced in 2.47 cached script compilations for executing
4067 scripts ( not includes ) of the same name in different directories
4068 for the same Global/GlobalPackage config for an application.
4069 Fix was to remove optimization that caused problem, and
4070 created test case t/same_name.t to cover bug.
40594071
40604072 $VERSION = 2.47; $DATE="11/06/2002"
4061 ++ Runtime speed enhancements for 15-20% improvement including:
4062 + INTERNAL API ReadFile() now returns scalar ref as memory optimization
4063 + cache InodeNames config setting in ASP object now for common lookups
4064 + removed CompileChecksum() INTERNAL API, since it was an unnecesary
4065 method decomposition along a common code path
4066 + removed IsChanged() INTERNAL API since compiling of scripts
4067 is now handled by CompileInclude() which does this functionality already
4068 + removed unnecessary decomp of IncludesChanged() INTERNAL API, which was along
4069 critical code path
4070 + do not call INTERNAL SearchDirs() API when compiling base script
4071 since we have already validated its path earlier
4072 + Use stat(_) type shortcut for stat() & -X calls where possible
4073 + Moved @INC initilization up to handler() & consolidated with $INCDir lib
4074 + removed useless Apache::ASP::Collection::DESTROY
4075 + removed useless Apache::ASP::Server::DESTROY
4076 + removed useless Apache::ASP::GlobalASA::DESTROY
4077 + removed useless Apache::ASP::Response::DESTROY
4078
4079 - Default path for $Response->{Cookies} was from CookiePath
4080 config, but this was incorrect as CookiePath config is only
4081 for $Session cookie, so now path for $Response->{Cookies}
4082 defaults to /
4083
4084 - Fixed bug where global.asa events would get undefined with
4085 StatINC and GlobalPackage set when the GlobalPackage library
4086 changed & get reloaded.
4087
4088 (d) Documented long time config NoCache.
4089
4090 -- Fixed use with Apache::Filter, capable as both source
4091 and destination filter. Added ./site/eg/filter.filter example
4092 to demonstrate these abilities.
4093
4094 + Use $r->err_headers_out->add Apache::Table API for cookies
4095 now instead of $r->cgi_header_out. Added t/cookies.t test to
4096 cover new code path as well as general $Response->Cookies API.
4097 Also make cookies headers sorted by cookie and dictionary key
4098 while building headers for repeatable behavior, this latter was
4099 to facilitate testing.
4100
4101 - fixed $Server->Mail error_log output when failing to connect
4102 to SMTP server.
4103
4104 + added tests to cover UniquePackages & NoCache configs since this
4105 config logic was updated
4106
4107 + made deprecated warnings for use of certain $Response->Member
4108 calls more loudly write to error_log, so I can remove the AUTOLOAD
4109 for Response one day
4110
4111 - Probably fixed behavior in CgiHeaders, at least under perl 5.8.0, and
4112 added t/cgi_headers.t to cover this config.
4113
4114 + removed $Apache::ASP::CompressGzip setting ability, used to possibly
4115 set CompressGzip in the module before, not documented anyway
4116
4117 + removed $Apache::ASP::Filter setting ability to set Filter globally,
4118 not documented anyway
4119
4120 + removed old work around for setting ServerStarting to 0
4121 at runtime, which was bad for Apache::DBI on win32 a long
4122 time ago:
4123
4124 $Apache::ServerStarting and $Apache::ServerStarting = 0;
4125
4126 If this code is still needed in Apache::ASP->handler() let
4127 me know.
4128
4129 + check to make sure data in internal database is a HASH ref
4130 before using it for session garbage collection. This is to
4131 help prevent against internal database corruption in a
4132 network share that does not support flock() file locking.
4133
4134 + For new XMLSubs ASP type <%= %> argument interpolation
4135 activated with XMLSubsPerlArgs 0, data references can now
4136 be passed in addition to SCALAR/string references, so one
4137 can pass an object reference like so:
4138
4139 <my:tag value="<%= $Object %>" />
4140
4141 This will only work as long as the variable interpolation <%= %>
4142 are flushed against the containing " " or ' ', or else the object
4143 reference will be stringified when it is concatenated with
4144 the rest of the data.
4145
4146 Testing for this feature was added to ./t/xmlsubs_aspargs.t
4147
4148 This feature is still experimental, and its interface may change.
4149 However it is slated for the 3.0 release as default method,
4150 so feedback is appreciated.
4151
4152 + For new XMLSubs ASP type <%= %> argument interpolation
4153 activated with XMLSubsPerlArgs 0, <% %> will no longer work,
4154 just <%= %>, as in
4155
4156 <my:tag value="some value <%= $value %> more data" />
4157
4158 This feature is still experimental, and its interface may change.
4159 However it is slated for the 3.0 release as default method,
4160 so feedback is appreciated.
4073 ++ Runtime speed enhancements for 15-20% improvement including:
4074 + INTERNAL API ReadFile() now returns scalar ref as memory optimization
4075 + cache InodeNames config setting in ASP object now for common lookups
4076 + removed CompileChecksum() INTERNAL API, since it was an unnecesary
4077 method decomposition along a common code path
4078 + removed IsChanged() INTERNAL API since compiling of scripts
4079 is now handled by CompileInclude() which does this functionality already
4080 + removed unnecessary decomp of IncludesChanged() INTERNAL API, which was along
4081 critical code path
4082 + do not call INTERNAL SearchDirs() API when compiling base script
4083 since we have already validated its path earlier
4084 + Use stat(_) type shortcut for stat() & -X calls where possible
4085 + Moved @INC initilization up to handler() & consolidated with $INCDir lib
4086 + removed useless Apache::ASP::Collection::DESTROY
4087 + removed useless Apache::ASP::Server::DESTROY
4088 + removed useless Apache::ASP::GlobalASA::DESTROY
4089 + removed useless Apache::ASP::Response::DESTROY
4090
4091 - Default path for $Response->{Cookies} was from CookiePath
4092 config, but this was incorrect as CookiePath config is only
4093 for $Session cookie, so now path for $Response->{Cookies}
4094 defaults to /
4095
4096 - Fixed bug where global.asa events would get undefined with
4097 StatINC and GlobalPackage set when the GlobalPackage library
4098 changed & get reloaded.
4099
4100 (d) Documented long time config NoCache.
4101
4102 -- Fixed use with Apache::Filter, capable as both source
4103 and destination filter. Added ./site/eg/filter.filter example
4104 to demonstrate these abilities.
4105
4106 + Use $r->err_headers_out->add Apache::Table API for cookies
4107 now instead of $r->cgi_header_out. Added t/cookies.t test to
4108 cover new code path as well as general $Response->Cookies API.
4109 Also make cookies headers sorted by cookie and dictionary key
4110 while building headers for repeatable behavior, this latter was
4111 to facilitate testing.
4112
4113 - fixed $Server->Mail error_log output when failing to connect
4114 to SMTP server.
4115
4116 + added tests to cover UniquePackages & NoCache configs since this
4117 config logic was updated
4118
4119 + made deprecated warnings for use of certain $Response->Member
4120 calls more loudly write to error_log, so I can remove the AUTOLOAD
4121 for Response one day
4122
4123 - Probably fixed behavior in CgiHeaders, at least under perl 5.8.0, and
4124 added t/cgi_headers.t to cover this config.
4125
4126 + removed $Apache::ASP::CompressGzip setting ability, used to possibly
4127 set CompressGzip in the module before, not documented anyway
4128
4129 + removed $Apache::ASP::Filter setting ability to set Filter globally,
4130 not documented anyway
4131
4132 + removed old work around for setting ServerStarting to 0
4133 at runtime, which was bad for Apache::DBI on win32 a long
4134 time ago:
4135
4136 $Apache::ServerStarting and $Apache::ServerStarting = 0;
4137
4138 If this code is still needed in Apache::ASP->handler() let
4139 me know.
4140
4141 + check to make sure data in internal database is a HASH ref
4142 before using it for session garbage collection. This is to
4143 help prevent against internal database corruption in a
4144 network share that does not support flock() file locking.
4145
4146 + For new XMLSubs ASP type <%= %> argument interpolation
4147 activated with XMLSubsPerlArgs 0, data references can now
4148 be passed in addition to SCALAR/string references, so one
4149 can pass an object reference like so:
4150
4151 <my:tag value="<%= $Object %>" />
4152
4153 This will only work as long as the variable interpolation <%= %>
4154 are flushed against the containing " " or ' ', or else the object
4155 reference will be stringified when it is concatenated with
4156 the rest of the data.
4157
4158 Testing for this feature was added to ./t/xmlsubs_aspargs.t
4159
4160 This feature is still experimental, and its interface may change.
4161 However it is slated for the 3.0 release as default method,
4162 so feedback is appreciated.
4163
4164 + For new XMLSubs ASP type <%= %> argument interpolation
4165 activated with XMLSubsPerlArgs 0, <% %> will no longer work,
4166 just <%= %>, as in
4167
4168 <my:tag value="some value <%= $value %> more data" />
4169
4170 This feature is still experimental, and its interface may change.
4171 However it is slated for the 3.0 release as default method,
4172 so feedback is appreciated.
41614173
41624174 $VERSION = 2.45; $DATE="10/13/2002"
4163 ++New XMLSubsPerlArgs config, default 1, indicates how
4164 XMLSubs arguments have always been parsed. If set to 0,
4165 will enable new XMLSubs args that are more ASP like with
4166 <%= %> for dynamic interpolation, such as:
4167
4168 <my:xmlsub arg="<%= $data %>" arg2="text <%= $data2 %>" />
4175 ++New XMLSubsPerlArgs config, default 1, indicates how
4176 XMLSubs arguments have always been parsed. If set to 0,
4177 will enable new XMLSubs args that are more ASP like with
4178 <%= %> for dynamic interpolation, such as:
4179
4180 <my:xmlsub arg="<%= $data %>" arg2="text <%= $data2 %>" />
41694181
4170 Settings XMLSubsPerlArgs to 0 is experimental for now, but
4171 will become the default by Apache::ASP version 3.0
4172
4173 ++Optimization for static HTML/XML files that are served up
4174 via Apache::ASP so that they are not compiled into perl subroutines
4175 first. This makes especially native XSLT both faster & take
4176 less memory to serve, before XSL & XML files being transformed
4177 by XSLT would both be compiled as normal ASP script first, so
4178 now this will happen if they really are ASP scripts with embedded
4179 <% %> code blocks & XMLSubs being executed.
4180
4181 +Consolidate some config data for Apache::ASP->Loader to use
4182 globals in @Apache::ASP::CompileChecksumKeys to know which
4183 config data is important for precompiling ASP scripts.
4184
4185 +Further streamlined code compilation. Now both base
4186 scripts and includes use the internal CompileInclude() API
4187 to generate code.
4188
4189 -Fixed runtime HTML error output when Debug is set to -2/2,
4190 so that script correctly again gets rendered in final perl form.
4191 Added compile time error output to ./site/eg/syntax_error.htm
4192 when a special link is clicked for a quick visual test.
4193
4194 -Cleaned up some bad coding practices in ./site/eg/global.asa
4195 associated changes in other example files. Comment example
4196 global.asa some for the first time reader
4197
4198 -DemoASP.pm examples module needed "use strict" fix, thanks
4199 to Allan Vest for bug report
4200
4201 --$rv = $Response->Include({ File => ..., Cache => 1});
4202 now works to get the first returned value fetched from
4203 the cache. Before, because a list was always returned,
4204 $rv would have been equal to the number of items returned,
4205 even if the return value list has just one element.
4206
4207 (d) added site/robots.txt file with just a comment for
4208 search engine indexing
4209
4210 -fixed ./site/eg/binary_write.htm to not use
4211 $Response->{ContentLength} because it does not exist.
4212 Fixed it to use $Response->AddHeader now instead
4182 Settings XMLSubsPerlArgs to 0 is experimental for now, but
4183 will become the default by Apache::ASP version 3.0
4184
4185 ++Optimization for static HTML/XML files that are served up
4186 via Apache::ASP so that they are not compiled into perl subroutines
4187 first. This makes especially native XSLT both faster & take
4188 less memory to serve, before XSL & XML files being transformed
4189 by XSLT would both be compiled as normal ASP script first, so
4190 now this will happen if they really are ASP scripts with embedded
4191 <% %> code blocks & XMLSubs being executed.
4192
4193 +Consolidate some config data for Apache::ASP->Loader to use
4194 globals in @Apache::ASP::CompileChecksumKeys to know which
4195 config data is important for precompiling ASP scripts.
4196
4197 +Further streamlined code compilation. Now both base
4198 scripts and includes use the internal CompileInclude() API
4199 to generate code.
4200
4201 -Fixed runtime HTML error output when Debug is set to -2/2,
4202 so that script correctly again gets rendered in final perl form.
4203 Added compile time error output to ./site/eg/syntax_error.asp
4204 when a special link is clicked for a quick visual test.
4205
4206 -Cleaned up some bad coding practices in ./site/eg/global.asa
4207 associated changes in other example files. Comment example
4208 global.asa some for the first time reader
4209
4210 -DemoASP.pm examples module needed "use strict" fix, thanks
4211 to Allan Vest for bug report
4212
4213 --$rv = $Response->Include({ File => ..., Cache => 1});
4214 now works to get the first returned value fetched from
4215 the cache. Before, because a list was always returned,
4216 $rv would have been equal to the number of items returned,
4217 even if the return value list has just one element.
4218
4219 (d) added site/robots.txt file with just a comment for
4220 search engine indexing
4221
4222 -fixed ./site/eg/binary_write.htm to not use
4223 $Response->{ContentLength} because it does not exist.
4224 Fixed it to use $Response->AddHeader now instead
42134225
42144226 $VERSION = 2.41; $DATE="09/29/2002"
4215 -Removed CVS Revision tag from Apache::ASP::Date, which
4216 was causing bad revision numbers in CPAN after CVS integration
4217 of Apache::ASP
4218
4219 +removed cgi/asp link to ../asp-perl from distribution. This
4220 link was for the deprecated asp script which is now asp-perl
4227 -Removed CVS Revision tag from Apache::ASP::Date, which
4228 was causing bad revision numbers in CPAN after CVS integration
4229 of Apache::ASP
4230
4231 +removed cgi/asp link to ../asp-perl from distribution. This
4232 link was for the deprecated asp script which is now asp-perl
42214233
42224234 $VERSION = 2.39; $DATE="09/10/2002"
4223 -Turn off $^W explicitly before reloading global.asa. Reloading
4224 global.asa when $^W is set will trigger subroutine redefinition
4225 warnings. Reloading global.asa should occur without any problems
4226 under normal usage of the system, thus this work around.
4227
4228 This fix is important to UseStrict functionality because warnings
4229 automatically become thrown as die() errors with UseStrict enabled,
4230 so we have to disable normal soft warnings here.
4231
4232 -$Response->Include() runtime errors now throw a die() that
4233 can be trapped. This was old functionality that has been restored.
4234 Other compile time errors should still trigger a hard error
4235 like script compilation, global.asa, or $Response->Include()
4236 without an eval()
4237
4238 +Some better error handling with Debug 3 or -3 set, cleaned
4239 up developer errors messages somewhat.
4235 -Turn off $^W explicitly before reloading global.asa. Reloading
4236 global.asa when $^W is set will trigger subroutine redefinition
4237 warnings. Reloading global.asa should occur without any problems
4238 under normal usage of the system, thus this work around.
4239
4240 This fix is important to UseStrict functionality because warnings
4241 automatically become thrown as die() errors with UseStrict enabled,
4242 so we have to disable normal soft warnings here.
4243
4244 -$Response->Include() runtime errors now throw a die() that
4245 can be trapped. This was old functionality that has been restored.
4246 Other compile time errors should still trigger a hard error
4247 like script compilation, global.asa, or $Response->Include()
4248 without an eval()
4249
4250 +Some better error handling with Debug 3 or -3 set, cleaned
4251 up developer errors messages somewhat.
42404252
42414253 $VERSION = 2.37; $DATE="07/03/2002"
4242 -Fixed the testing directory structures for t/long_names.t
4243 so that tar software like Archive::Tar & Solaris tar that
4244 have problems with long file names will still be able
4245 to untar distribution successfully. Now t/long_names.t
4246 generates its testing directory structures at runtime.
4247
4248 -Fixes for "make test" to work under perl 5.8.0 RC2,
4249 courtesy of Manabu Higashida
4250
4251 +SessionQueryForce setting created for disabling use of cookies
4252 for $Session session-id passing, rather requiring use of SessionQuery*
4253 functionality for session-id passing via URL query string.
4254
4255 By default, even when SessionQuery* options are used, cookies will
4256 be used if available with SessionQuery* functionality acting only
4257 as a backup, so this makes it so that cookies will never be used.
4258
4259 +Escape ' with HTMLEncode() to &#39;
4260
4261 -Trying to fix t/server_mail.t to work better for platforms
4262 that it should skip testing on. Updated t/server.t test case.
4263
4264 +Remove exit() from Makefile.PL so CPAN.pm's automatic
4265 follow prereq mechanism works correctly. Thanks to Slaven Rezic
4266 for pointing this out.
4267
4268 +Added Apache::compat loading in mod_perl environment for better
4269 mod_perl 2.0 support.
4254 -Fixed the testing directory structures for t/long_names.t
4255 so that tar software like Archive::Tar & Solaris tar that
4256 have problems with long file names will still be able
4257 to untar distribution successfully. Now t/long_names.t
4258 generates its testing directory structures at runtime.
4259
4260 -Fixes for "make test" to work under perl 5.8.0 RC2,
4261 courtesy of Manabu Higashida
4262
4263 +SessionQueryForce setting created for disabling use of cookies
4264 for $Session session-id passing, rather requiring use of SessionQuery*
4265 functionality for session-id passing via URL query string.
4266
4267 By default, even when SessionQuery* options are used, cookies will
4268 be used if available with SessionQuery* functionality acting only
4269 as a backup, so this makes it so that cookies will never be used.
4270
4271 +Escape ' with HTMLEncode() to &#39;
4272
4273 -Trying to fix t/server_mail.t to work better for platforms
4274 that it should skip testing on. Updated t/server.t test case.
4275
4276 +Remove exit() from Makefile.PL so CPAN.pm's automatic
4277 follow prereq mechanism works correctly. Thanks to Slaven Rezic
4278 for pointing this out.
4279
4280 +Added Apache::compat loading in mod_perl environment for better
4281 mod_perl 2.0 support.
42704282
42714283 $VERSION = 2.35; $DATE="05/30/2002"
4272 +Destroy better $Server & $Response objects so that my
4273 closure references to these to not attempt to work in the future
4274 against invalid internal data. There was enough data left in these
4275 old objects to make debugging the my closure problem confusing, where
4276 it looked like the ASP object state became invalid.
4277
4278 +Added system debug diagnostics to inspect StateManager group cleanup
4279
4280 (d) Documentation update about flock() work around for
4281 Win95/Win98/WinMe systems, confirmed by Rex Arul
4282
4283 (d) Documentation/site build bug found by Mitsunobu Ozato,
4284 where <% %> not being escaped correctly with $Server->HTMLEncode().
4285 New japanese documentation project started by him
4286 at http://sourceforge.jp/projects/apache-asp-jp/
4287
4288 -InitPackageGlobals() called after new Apache::ASP object created so
4289 core system templates can be compiled even when there was a runtime
4290 compilation error of user templates. Bug fix needed pointed out by
4291 Eamon Daly
4284 +Destroy better $Server & $Response objects so that my
4285 closure references to these to not attempt to work in the future
4286 against invalid internal data. There was enough data left in these
4287 old objects to make debugging the my closure problem confusing, where
4288 it looked like the ASP object state became invalid.
4289
4290 +Added system debug diagnostics to inspect StateManager group cleanup
4291
4292 (d) Documentation update about flock() work around for
4293 Win95/Win98/WinMe systems, confirmed by Rex Arul
4294
4295 (d) Documentation/site build bug found by Mitsunobu Ozato,
4296 where <% %> not being escaped correctly with $Server->HTMLEncode().
4297 New japanese documentation project started by him
4298 at http://sourceforge.jp/projects/apache-asp-jp/
4299
4300 -InitPackageGlobals() called after new Apache::ASP object created so
4301 core system templates can be compiled even when there was a runtime
4302 compilation error of user templates. Bug fix needed pointed out by
4303 Eamon Daly
42924304
42934305 $VERSION = 2.33; $DATE="04/29/2002"
4294 - fixed up t/server_mail.t test to skip if a sendmail server
4295 is not available on localhost. We only want the test to run
4296 if there is a server to test against.
4297
4298 + removed cgi/asp script, just a symlink now to the ./asp-perl script
4299 which in this way deprecates it. I had it hard linked, but the
4300 distribution did not untar very well on win32 platform.
4301
4302 + Reordered the modules in Bundle::Apache::ASP for a cleaner install.
4303
4304 - Fixed bug where XMLSubs where removing <?xml version ... ?> tag
4305 when it was needed in XSLT mode.
4306
4307 + $Server->Mail({ CC => '...', BCC => '...' }), now works to send
4308 CC & BCC headers/recipients.
4309
4310 + Removed $Apache::ASP::Register definition which defined the current
4311 executing Apache::ASP object. Only one part of the application was
4312 using it, and this has been fixed. This would have been an unsafe
4313 use of globals for a threaded environment.
4314
4315 + Decreased latency when doing Application_OnStart, used to sleep(1)
4316 for CleanupMaster sync, but this is not necessary for Application_OnStart
4317 scenario
4318
4319 + Restructure code / core templates for MailErrorsTo funcationality.
4320 Wrote test mail_error.t to cover this. $ENV{REMOTE_USER} will now
4321 be displayed in the MailErrorsTo message when defined from 401 basic auth.
4322
4323 + $Server->RegisterCleanup should be thread safe now, as it no longer relies
4324 on access to @Apache::ASP::Cleanup for storing the CODE ref stack.
4325
4326 + test t/inode_names.t for InodeNames and other file tests covering case
4327 of long file names.
4328
4329 - Fixed long file name sub identifier bug. Added test t/long_names.t.
4330
4331 + CacheDir may now be set independently of StateDir. It used to default
4332 to StateDir if it was set.
4333
4334 ++ Decomposition of modules like Apache::ASP::Session & Apache::ASP::Application
4335 out of ASP.pm file. This should make the source more developer friendly.
4336
4337 This selective code compilation also speeds up CGI requests that do not
4338 need to load unneeded modules like Apache::ASP::Session, by about 50%,
4339 so where CGI mode ran at about 2.1 hits/sec before, now for
4340 light requests that do not load $Session & $Application, requests
4341 run at 3.4 hits/sec, this is on a dual PIII-450 linux 2.4.x
4342
4343 - Caching like for XSLTCache now works in CGI mode.
4344 This was a bug that it did not before.
4345
4346 + $Server->File() API added, acts as a wrapper around
4347 Apache->request->filename Added test in t/server.t
4348
4349 ++ *** EXPERIMENTAL / ALPHA FEATURE NOTE BEGIN ***
4350
4351 New $PERLLIB/Apache/ASP/Share/ directory created to
4352 hold system & user contributed components, which will be found
4353 on the $Server->MapInclude() path, which helps $Response->Include
4354 search '.',Global,IncludesDir, and now Apache::ASP::Share for
4355 includes to load at runtime.
4356
4357 The syntax for loading a shared include is to prefix the file
4358 name with Share:: as in:
4359
4360 $Response->TrapInclude('Share::CORE/MailError.inc');
4361
4362 New test to cover this at t/share.t
4363
4364 This feature is experimental. The naming convention may change
4365 and the feature may disappear altogether, so only use if you
4366 are interesting in experimenting with this feature & will
4367 provide feedback about how it works.
4368
4369 *** EXPERIMENTAL / ALPHA FEATURE NOTE END ***
4370
4371 + asp-perl script now uses ./asp.conf instead of ./asp.config
4372 for runtime configuration via %Config defined there. Update docs
4373 for running in standalone CGI mode
4374
4375 + Make use of MANFEST.SKIP to not publish the dev/* files anymore.
4376
4377 - Script_OnEnd guaranteed to run after $Response->End, but
4378 it will not run if there was an error earlier in the request.
4379
4380 + lots of new test cases covering behaviour of $Response->End
4381 and $Response->Redirect under various conditions like XMLSubs
4382 and SoftRedirect and global.asa Script_OnStart
4383
4384 + asp-perl will be installed into the bin executables when
4385 Apache::ASP is installed. asp-perl is the command line version
4386 of Apache::ASP that can also be used to run script in CGI mode.
4387 Test case covering asp-perl functionality.
4388
4389 + asp CGI/command line script now called asp-perl. I picked this
4390 name because Apache::ASP often has the name asp-perl in distributions
4391 of the module.
4392
4393 + Apache::ASP::CGI::Test class now subclass of Apache::ASP::CGI. To facilitate
4394 this Apache::ASP::CGI::init() now called OO like Apache::ASP::CGI->init()
4395 Fixed up places where the old style was called. New Test class allows
4396 a dummy Apache request object to be built which caches header & body output
4397 for later inspection instead of writing it to STDOUT.
4398
4399 - $Response->Redirect() under SoftRedirect 1 will not first Clear() buffer
4400
4401 - $Response->Redirect() in an XMLSubs will work now ... behavior
4402 of $Response->Flush() being turned off in an XMLSubs was interfering with this.
4403
4404 + srand() init tracking done better, thanks for patch from Ime Smits
4405
4406 + Added file/directory being used for precompilation in
4407 Apache::ASP->Loader($file, ...) to output like:
4408
4409 [Mon Feb 04 20:19:22 2002] [error] [asp] 4215 (re)compiled 22 scripts
4410 of 22 loaded for $file
4411
4412 This is so that when precompiling multiple web sites
4413 each with different directories, one can easier see the
4414 compile output relevant to the Loader() command being run.
4415
4416 + better decomp of Apache::ASP site build files at ./build/* files,
4417 which is good should anyone look at it for ideas.
4418
4419 + improved test suite to error when unintended output results from
4420 t/*.t test scripts.
4421
4422 - () now supported in XMLSubsMatch config, added xmlsubsmatch.t test...
4423 specifically a config like
4424
4425 PerlSetVar (aaa|bbb):\w+
4426
4427 should now work. Thanks for bug report from David Kulp.
4428
4429 + Added an early srand() for better $ServerID creation
4430
4431 + Work around for DSO problems where $r is not always correctly
4432 defined in Apache::ASP::handler(). Thanks to Tom Lear for patch.
4306 - fixed up t/server_mail.t test to skip if a sendmail server
4307 is not available on localhost. We only want the test to run
4308 if there is a server to test against.
4309
4310 + removed cgi/asp script, just a symlink now to the ./asp-perl script
4311 which in this way deprecates it. I had it hard linked, but the
4312 distribution did not untar very well on win32 platform.
4313
4314 + Reordered the modules in Bundle::Apache::ASP for a cleaner install.
4315
4316 - Fixed bug where XMLSubs where removing <?xml version ... ?> tag
4317 when it was needed in XSLT mode.
4318
4319 + $Server->Mail({ CC => '...', BCC => '...' }), now works to send
4320 CC & BCC headers/recipients.
4321
4322 + Removed $Apache::ASP::Register definition which defined the current
4323 executing Apache::ASP object. Only one part of the application was
4324 using it, and this has been fixed. This would have been an unsafe
4325 use of globals for a threaded environment.
4326
4327 + Decreased latency when doing Application_OnStart, used to sleep(1)
4328 for CleanupMaster sync, but this is not necessary for Application_OnStart
4329 scenario
4330
4331 + Restructure code / core templates for MailErrorsTo funcationality.
4332 Wrote test mail_error.t to cover this. $ENV{REMOTE_USER} will now
4333 be displayed in the MailErrorsTo message when defined from 401 basic auth.
4334
4335 + $Server->RegisterCleanup should be thread safe now, as it no longer relies
4336 on access to @Apache::ASP::Cleanup for storing the CODE ref stack.
4337
4338 + test t/inode_names.t for InodeNames and other file tests covering case
4339 of long file names.
4340
4341 - Fixed long file name sub identifier bug. Added test t/long_names.t.
4342
4343 + CacheDir may now be set independently of StateDir. It used to default
4344 to StateDir if it was set.
4345
4346 ++ Decomposition of modules like Apache::ASP::Session & Apache::ASP::Application
4347 out of ASP.pm file. This should make the source more developer friendly.
4348
4349 This selective code compilation also speeds up CGI requests that do not
4350 need to load unneeded modules like Apache::ASP::Session, by about 50%,
4351 so where CGI mode ran at about 2.1 hits/sec before, now for
4352 light requests that do not load $Session & $Application, requests
4353 run at 3.4 hits/sec, this is on a dual PIII-450 linux 2.4.x
4354
4355 - Caching like for XSLTCache now works in CGI mode.
4356 This was a bug that it did not before.
4357
4358 + $Server->File() API added, acts as a wrapper around
4359 Apache->request->filename Added test in t/server.t
4360
4361 ++ *** EXPERIMENTAL / ALPHA FEATURE NOTE BEGIN ***
4362
4363 New $PERLLIB/Apache/ASP/Share/ directory created to
4364 hold system & user contributed components, which will be found
4365 on the $Server->MapInclude() path, which helps $Response->Include
4366 search '.',Global,IncludesDir, and now Apache::ASP::Share for
4367 includes to load at runtime.
4368
4369 The syntax for loading a shared include is to prefix the file
4370 name with Share:: as in:
4371
4372 $Response->TrapInclude('Share::CORE/MailError.inc');
4373
4374 New test to cover this at t/share.t
4375
4376 This feature is experimental. The naming convention may change
4377 and the feature may disappear altogether, so only use if you
4378 are interesting in experimenting with this feature & will
4379 provide feedback about how it works.
4380
4381 *** EXPERIMENTAL / ALPHA FEATURE NOTE END ***
4382
4383 + asp-perl script now uses ./asp.conf instead of ./asp.config
4384 for runtime configuration via %Config defined there. Update docs
4385 for running in standalone CGI mode
4386
4387 + Make use of MANFEST.SKIP to not publish the dev/* files anymore.
4388
4389 - Script_OnEnd guaranteed to run after $Response->End, but
4390 it will not run if there was an error earlier in the request.
4391
4392 + lots of new test cases covering behaviour of $Response->End
4393 and $Response->Redirect under various conditions like XMLSubs
4394 and SoftRedirect and global.asa Script_OnStart
4395
4396 + asp-perl will be installed into the bin executables when
4397 Apache::ASP is installed. asp-perl is the command line version
4398 of Apache::ASP that can also be used to run script in CGI mode.
4399 Test case covering asp-perl functionality.
4400
4401 + asp CGI/command line script now called asp-perl. I picked this
4402 name because Apache::ASP often has the name asp-perl in distributions
4403 of the module.
4404
4405 + Apache::ASP::CGI::Test class now subclass of Apache::ASP::CGI. To facilitate
4406 this Apache::ASP::CGI::init() now called OO like Apache::ASP::CGI->init()
4407 Fixed up places where the old style was called. New Test class allows
4408 a dummy Apache request object to be built which caches header & body output
4409 for later inspection instead of writing it to STDOUT.
4410
4411 - $Response->Redirect() under SoftRedirect 1 will not first Clear() buffer
4412
4413 - $Response->Redirect() in an XMLSubs will work now ... behavior
4414 of $Response->Flush() being turned off in an XMLSubs was interfering with this.
4415
4416 + srand() init tracking done better, thanks for patch from Ime Smits
4417
4418 + Added file/directory being used for precompilation in
4419 Apache::ASP->Loader($file, ...) to output like:
4420
4421 [Mon Feb 04 20:19:22 2002] [error] [asp] 4215 (re)compiled 22 scripts
4422 of 22 loaded for $file
4423
4424 This is so that when precompiling multiple web sites
4425 each with different directories, one can easier see the
4426 compile output relevant to the Loader() command being run.
4427
4428 + better decomp of Apache::ASP site build files at ./build/* files,
4429 which is good should anyone look at it for ideas.
4430
4431 + improved test suite to error when unintended output results from
4432 t/*.t test scripts.
4433
4434 - () now supported in XMLSubsMatch config, added xmlsubsmatch.t test...
4435 specifically a config like
4436
4437 PerlSetVar (aaa|bbb):\w+
4438
4439 should now work. Thanks for bug report from David Kulp.
4440
4441 + Added an early srand() for better $ServerID creation
4442
4443 + Work around for DSO problems where $r is not always correctly
4444 defined in Apache::ASP::handler(). Thanks to Tom Lear for patch.
44334445
44344446 $VERSION = 2.31; $DATE="01/22/2002";
4435 + $Server->MapInclude() API extension created to wrap up Apache::ASP::SearchDirs
4436 functionality so one may do an conditional check for an include existence befor
4437 executing $Response->Include(). Added API test to server.t
4438
4439 + $Server->Transfer() now allows arguments like $Response->Include(), and now acts just
4440 as a wrapper for:
4441
4442 $Response->Include($file, @args);
4443 $Response->End();
4444
4445 added test case at t/server_transfer.t
4446
4447 + Removed dependency of StatINC functionality on Apache::Symbol. Apache::Symbol
4448 is no longer required. Added test of t/stat_inc.t for correct StatINC initialization
4449 for platforms where Devel::Symdump is present.
4450
4451 + Better error message when $Request->Params has not been defined with RequestParams
4452 config & it gets used in script. Added test case as t/request_params_none.t
4453
4454 + Directories cannot now be included as scripts via $Response->Include(), added
4455 test case to t/include.t
4456
4457 - No longer make $Response->Flush dependent on $Response->IsClientConnected() to
4458 be true to write output to client. There have been spurious errors reported
4459 about the new ( >= 2.25 ) IsClientConnected code, and this will limit the impact
4460 of that functionality possibly not working still to those users explicitly using
4461 that API.
4462
4463 + $Response->AddHeader($header_name, $value) now will set $Response members
4464 for these headers: Content-Type, Cache-Control, Expires. This is to avoid
4465 both the application & Apache::ASP sending out duplicate headers. Added
4466 test cases for this to t/response.t
4467
4468 + split up Bundle::Apache::ASP into that, and Bundle::Apache::ASP::Extra
4469 the former with just the required modules to run, and the latter
4470 for extra functionality in Apache::ASP
4471
4472 + new $Request->{Method} member to return $r->method of GET or POST that
4473 client browser is requesting, added t/request.t sub test to cover this member.
4447 + $Server->MapInclude() API extension created to wrap up Apache::ASP::SearchDirs
4448 functionality so one may do an conditional check for an include existence befor
4449 executing $Response->Include(). Added API test to server.t
4450
4451 + $Server->Transfer() now allows arguments like $Response->Include(), and now acts just
4452 as a wrapper for:
4453
4454 $Response->Include($file, @args);
4455 $Response->End();
4456
4457 added test case at t/server_transfer.t
4458
4459 + Removed dependency of StatINC functionality on Apache::Symbol. Apache::Symbol
4460 is no longer required. Added test of t/stat_inc.t for correct StatINC initialization
4461 for platforms where Devel::Symdump is present.
4462
4463 + Better error message when $Request->Params has not been defined with RequestParams
4464 config & it gets used in script. Added test case as t/request_params_none.t
4465
4466 + Directories cannot now be included as scripts via $Response->Include(), added
4467 test case to t/include.t
4468
4469 - No longer make $Response->Flush dependent on $Response->IsClientConnected() to
4470 be true to write output to client. There have been spurious errors reported
4471 about the new ( >= 2.25 ) IsClientConnected code, and this will limit the impact
4472 of that functionality possibly not working still to those users explicitly using
4473 that API.
4474
4475 + $Response->AddHeader($header_name, $value) now will set $Response members
4476 for these headers: Content-Type, Cache-Control, Expires. This is to avoid
4477 both the application & Apache::ASP sending out duplicate headers. Added
4478 test cases for this to t/response.t
4479
4480 + split up Bundle::Apache::ASP into that, and Bundle::Apache::ASP::Extra
4481 the former with just the required modules to run, and the latter
4482 for extra functionality in Apache::ASP
4483
4484 + new $Request->{Method} member to return $r->method of GET or POST that
4485 client browser is requesting, added t/request.t sub test to cover this member.
44744486
44754487 $VERSION = 2.29; $DATE="11/19/2001";
4476 +Added some extra help text to the ./cgi/asp --help message
4477 to clarify how to pass arguments to a script from the command line.
4478
4479 +When using $Server->Mail() API, if Content-Type header is set,
4480 and MIME-Version is not, then a "MIME-Version: 1.0" header will be sent
4481 for the email. This is correct according to RFC 1521 which specifies
4482 for the first time the Content-Type: header for email documents.
4483 Thanks to Philip Mak for pointing out this correct behavior.
4484
4485 +Made dependent on MLDBM::Sync version .25 to pass the taint_check.t test
4486
4487 +Improved server_mail.t test to work with mail servers were relaying is denied
4488
4489 +Added <html><body> tags to MailErrorsTo email
4490
4491 --Fixed SessionCount / Session_OnEnd bug, where these things were not
4492 working for $Sessions that never had anything written to them.
4493 This bug was introduced in 2.23/2.25 release.
4494
4495 There was an optimization in 2.23/2.25 where a $Session that was never
4496 used does not write its state lock file & dbm files to disk, only if
4497 it gets written too like $Session->{MARK}++. Tracking of these NULL $Sessions
4498 then is handled solely in the internal database. For $Session garbage
4499 collection though which would fire Session_OnEnd events and update
4500 SessionCount, the Apache::ASP::State->GroupMembers() function was just
4501 looking for state files on disk ... now it looks in the internal database
4502 too for SessionID records for garbage collection.
4503
4504 Added a test at ./t/session_events.t for these things.
4505
4506 +Some optimizations for $Session API use.
4507
4508 +Added support for XSLT via XML::LibXSLT, patch courtesy of Michael Buschauer
4509
4510 -Got rid of an warning when recompiling changing includes under perl 5.6.1...
4511 undef($code) method did not work for this perl version, rather undef(&$code) does.
4512 Stopped using using Apache::Symbol for this when available.
4513
4514 -Make Apache::ASP script run under perl taint checking -T for perl 5.6.1...
4515 $code =~ tr///; does not work to untaint here, so much use the slower:
4516 $code =~ /^(.*)$/s; $code = $1; method to untaint.
4517
4518 -Check for inline includes changing, included in a dynamic included
4519 loaded at runtime via $Response->Include(). Added test case for
4520 this at t/include_change.t. If an inline include of a dynamic include
4521 changes, the dynamic include should get recompiled now.
4522
4523 -Make OK to use again with PerlTaintCheck On, with MLDBM::Sync 2.25.
4524 Fixed in ASP.pm, t/global.asa, and created new t/taint_check.t test script
4525
4526 +Load more modules when Apache::ASP is loaded so parent will share more
4527 with children httpd:
4528 Apache::Symbol
4529 Devel::Symdump
4530 Config
4531 lib
4532 MLDBM::Sync::SDBM_File
4533
4534 +When FileUploadMax bytes is exceeded for a file upload, there will not
4535 be an odd error anymore resulting from $CGI::POST_MAX being triggered,
4536 instead the file upload input will simply be ignored via $CGI::DISABLE_UPLOADS.
4537 This gives the developer the opportunity to tell the user the the file upload
4538 was too big, as demonstrated by the ./site/eg/file_upload.asp example.
4539
4540 To not let the web client POST a lot of data to your scripts as a form
4541 of a denial of service attack use the apache config LimitRequestBody for the
4542 max limits. You can think of PerlSetVar FileUploadMax as a soft limit, and
4543 apache's LimitRequestBody as a hard limit.
4544
4545 --Under certain circumstances with file upload, it seems that IsClientConnected()
4546 would return an aborted client value from $r->connection->aborted, so
4547 the buffer output data would not be flushed to the client, and
4548 the HTML page would return to the browser empty. This would be under
4549 normal file upload use. One work-around was to make sure to initialize
4550 the $Request object before $Response->IsClientConnected is called,
4551 then $r->connection->aborted returns the right value.
4488 +Added some extra help text to the ./cgi/asp --help message
4489 to clarify how to pass arguments to a script from the command line.
4490
4491 +When using $Server->Mail() API, if Content-Type header is set,
4492 and MIME-Version is not, then a "MIME-Version: 1.0" header will be sent
4493 for the email. This is correct according to RFC 1521 which specifies
4494 for the first time the Content-Type: header for email documents.
4495 Thanks to Philip Mak for pointing out this correct behavior.
4496
4497 +Made dependent on MLDBM::Sync version .25 to pass the taint_check.t test
4498
4499 +Improved server_mail.t test to work with mail servers were relaying is denied
4500
4501 +Added <html><body> tags to MailErrorsTo email
4502
4503 --Fixed SessionCount / Session_OnEnd bug, where these things were not
4504 working for $Sessions that never had anything written to them.
4505 This bug was introduced in 2.23/2.25 release.
4506
4507 There was an optimization in 2.23/2.25 where a $Session that was never
4508 used does not write its state lock file & dbm files to disk, only if
4509 it gets written too like $Session->{MARK}++. Tracking of these NULL $Sessions
4510 then is handled solely in the internal database. For $Session garbage
4511 collection though which would fire Session_OnEnd events and update
4512 SessionCount, the Apache::ASP::State->GroupMembers() function was just
4513 looking for state files on disk ... now it looks in the internal database
4514 too for SessionID records for garbage collection.
4515
4516 Added a test at ./t/session_events.t for these things.
4517
4518 +Some optimizations for $Session API use.
4519
4520 +Added support for XSLT via XML::LibXSLT, patch courtesy of Michael Buschauer
4521
4522 -Got rid of an warning when recompiling changing includes under perl 5.6.1...
4523 undef($code) method did not work for this perl version, rather undef(&$code) does.
4524 Stopped using using Apache::Symbol for this when available.
4525
4526 -Make Apache::ASP script run under perl taint checking -T for perl 5.6.1...
4527 $code =~ tr///; does not work to untaint here, so much use the slower:
4528 $code =~ /^(.*)$/s; $code = $1; method to untaint.
4529
4530 -Check for inline includes changing, included in a dynamic included
4531 loaded at runtime via $Response->Include(). Added test case for
4532 this at t/include_change.t. If an inline include of a dynamic include
4533 changes, the dynamic include should get recompiled now.
4534
4535 -Make OK to use again with PerlTaintCheck On, with MLDBM::Sync 2.25.
4536 Fixed in ASP.pm, t/global.asa, and created new t/taint_check.t test script
4537
4538 +Load more modules when Apache::ASP is loaded so parent will share more
4539 with children httpd:
4540 Apache::Symbol
4541 Devel::Symdump
4542 Config
4543 lib
4544 MLDBM::Sync::SDBM_File
4545
4546 +When FileUploadMax bytes is exceeded for a file upload, there will not
4547 be an odd error anymore resulting from $CGI::POST_MAX being triggered,
4548 instead the file upload input will simply be ignored via $CGI::DISABLE_UPLOADS.
4549 This gives the developer the opportunity to tell the user the the file upload
4550 was too big, as demonstrated by the ./site/eg/file_upload.asp example.
4551
4552 To not let the web client POST a lot of data to your scripts as a form
4553 of a denial of service attack use the apache config LimitRequestBody for the
4554 max limits. You can think of PerlSetVar FileUploadMax as a soft limit, and
4555 apache's LimitRequestBody as a hard limit.
4556
4557 --Under certain circumstances with file upload, it seems that IsClientConnected()
4558 would return an aborted client value from $r->connection->aborted, so
4559 the buffer output data would not be flushed to the client, and
4560 the HTML page would return to the browser empty. This would be under
4561 normal file upload use. One work-around was to make sure to initialize
4562 the $Request object before $Response->IsClientConnected is called,
4563 then $r->connection->aborted returns the right value.
45524564
4553 This problem was probably introduced with IsClientConnected() code changes
4554 starting in the 2.25 release.
4565 This problem was probably introduced with IsClientConnected() code changes
4566 starting in the 2.25 release.
45554567
45564568 $VERSION = 2.27; $DATE="10/31/2001";
4557 + Wrapped call to $r->connection->fileno in eval {} so to
4558 preserve backwards compatibility with older mod_perl versions
4559 that do not have this method defined. Thanks to Helmut Zeilinger
4560 for catching this.
4561
4562 + removed ./dev directory from distribution, useless clutter
4563
4564 + Removed dependency on HTTP::Date by taking code into
4565 Apache::ASP as Apache::ASP::Date. This relieves
4566 the dependency of Apache::ASP on libwww LWP libraries.
4567 If you were using HTTP::Date functions before without loading
4568 "use HTTP::Date;" on your own, you will have to do this now.
4569
4570 + Streamlined code execution. Especially worked on
4571 $Response->IsClientConnected which gets called during
4572 a normal request execution, and got rid of IO::Select
4573 dependency. Some function style calls instead of OO style
4574 calls where private functions were being invokes that one
4575 would not need to override.
4576
4577 - Fixed possible bug when flushing a data buffer where there
4578 is just a '0' in it.
4579
4580 + Updated docs to note that StateCache config was deprecated
4581 as of 2.23. Removed remaining code that referenced the config.
4582
4583 + Removed references to unused OrderCollections code.
4584
4585 - Better Cache meta key, lower chance of collision with
4586 unrelated data since its using the full MD5 keyspace now
4587
4588 + Optimized some debugging statements that resulted
4589 from recent development.
4590
4591 + Tie::TextDir .04 and above is supported for StateDB
4592 and CacheDB settings with MLDBM::Sync .21. This is good for
4593 CacheDB where output is larger and there are not many
4594 versions to cache, like for XSLTCache, where the site is
4595 mostly static.
4596
4597 + Better RESOURCES section to web site, especially with adding
4598 some links to past Apache::ASP articles & presentations.
4569 + Wrapped call to $r->connection->fileno in eval {} so to
4570 preserve backwards compatibility with older mod_perl versions
4571 that do not have this method defined. Thanks to Helmut Zeilinger
4572 for catching this.
4573
4574 + removed ./dev directory from distribution, useless clutter
4575
4576 + Removed dependency on HTTP::Date by taking code into
4577 Apache::ASP as Apache::ASP::Date. This relieves
4578 the dependency of Apache::ASP on libwww LWP libraries.
4579 If you were using HTTP::Date functions before without loading
4580 "use HTTP::Date;" on your own, you will have to do this now.
4581
4582 + Streamlined code execution. Especially worked on
4583 $Response->IsClientConnected which gets called during
4584 a normal request execution, and got rid of IO::Select
4585 dependency. Some function style calls instead of OO style
4586 calls where private functions were being invokes that one
4587 would not need to override.
4588
4589 - Fixed possible bug when flushing a data buffer where there
4590 is just a '0' in it.
4591
4592 + Updated docs to note that StateCache config was deprecated
4593 as of 2.23. Removed remaining code that referenced the config.
4594
4595 + Removed references to unused OrderCollections code.
4596
4597 - Better Cache meta key, lower chance of collision with
4598 unrelated data since its using the full MD5 keyspace now
4599
4600 + Optimized some debugging statements that resulted
4601 from recent development.
4602
4603 + Tie::TextDir .04 and above is supported for StateDB
4604 and CacheDB settings with MLDBM::Sync .21. This is good for
4605 CacheDB where output is larger and there are not many
4606 versions to cache, like for XSLTCache, where the site is
4607 mostly static.
4608
4609 + Better RESOURCES section to web site, especially with adding
4610 some links to past Apache::ASP articles & presentations.
45994611
46004612 $VERSION = 2.25; $DATE="10/11/2001";
4601 + Improved ./site/apps/search application, for better
4602 search results at Apache::ASP site. Also, reengineered
4603 application better, with more perl code moved to global.asa.
4604 Make use of MLDBM::Sync::SDBM_File, where search database
4605 before was engineering around SDBM_File's shortcomings.
4606
4607 - Fix for SessionSerialize config, which broke in 2.23
4608 Also, added t/session_serialize.t to test suite to catch
4609 this problem in the future.
4613 + Improved ./site/apps/search application, for better
4614 search results at Apache::ASP site. Also, reengineered
4615 application better, with more perl code moved to global.asa.
4616 Make use of MLDBM::Sync::SDBM_File, where search database
4617 before was engineering around SDBM_File's shortcomings.
4618
4619 - Fix for SessionSerialize config, which broke in 2.23
4620 Also, added t/session_serialize.t to test suite to catch
4621 this problem in the future.
46104622
46114623 $VERSION = 2.23; $DATE="10/11/2001";
4612 +Make sure a couple other small standard modules get loaded
4613 upon "PerlModule Apache::ASP", like Time::HiRes, Class::Struct,
4614 and MLDBM::Serializer::Data::Dumper. If not available
4615 these modules won't cause errors, but will promote child httpd
4616 RAM sharing if they are.
4617
4618 -XMLSubs args parsing fix so an arg like z-index
4619 does not error under UseStrict. This is OK now:
4620
4621 <my:layer z-index=3 top=0 left=0> HTML </my:layer>
4622
4623 -Only remove outermost <SCRIPT> tags from global.asa
4624 for IIS/PerlScript compatibility. Used to remove
4625 all <SCRIPT> tags, which hurt when some subs in globa.asa
4626 would be printing some JavaScript.
4627
4628 +$Response->{IsClientConnected} now updated correctly
4629 before global.asa Script_OnStart. $Response->IsClientConnect()
4630 can be used for accurate accounting, while
4631 $Response->{IsClientConnected} only gets updated
4632 after $Response->Flush(). Added test cases to response.t
4633
4634 +$Server->HTMLEncode(\$data) API extension, now can take
4635 scalar ref, which can give a 5% improvement in benchmarks
4636 for data 100K in size.
4637
4638 -Access to $Application is locked when Application_OnEnd &
4639 Application_OnStart is called, creating a critical section
4640 for use of $Application
4641
4642 ++MLDBM::Sync used now for core DBM support in Apache::ASP::State.
4643 This drastically simplifies/stabilizes the code in there
4644 and will make it easier for future SQL database plugins.
4645
4646 +New API for accessing ASP object information in non content
4647 handler phases:
4648
4649 use Apache::ASP;
4650 sub My::Auth::handler {
4651 my $r = shift;
4652 my $ASP = Apache::ASP->new($r)
4653 my $Session = $ASP->Session;
4654 }
4655
4656 In the above example, $Session would be the same $Session
4657 object created later while running the ASP script for this
4658 same request.
4659
4660 Added t/asp_object.t test for this. Fixed global.asa to only
4661 init StateDir when application.asp starts which is the first
4662 test script to run.
4663
4664 -Fixed on Win32 to make Apache::ASP->new($r) able to create
4665 multiple master ASP objects per request. Was not reentrant
4666 safe before, particularly with state locking for dbms like
4667 $Application & $Session.
4668
4669 ++Output caching for includes, built on same layer ( extended )
4670 as XSLTCache, test suite at t/cache.t. Enabled with special
4671 arguments to
4672
4673 $Response->Include(\%args, @include_args)
4674 $Response->TrapInclude(\%args, @include_args)
4675 $Server->Execute(\%args, @include_args)
4676
4677 where %args = (
4678 File => 'file.inc',
4679 Cache => 1, # to activate cache layer
4680 Expires => 3600, # to expire in one hour
4681 LastModified => time() - 600, # to expire if cached before 10 minutes ago
4682 Key => $Request->Form, # to cache based on checksum of serialized form data,
4683 Clear => 1, # to not allow fetch from cache this time, will always execute include
4684 );
4685
4686 Like the XSLTCache, it uses MLDBM::Sync::SDBM_File
4687 by default, but can use DB_File or GDBM_File if
4688 CacheDB is set to these.
4689
4690 See t/cache.t for API support until this is documented.
4691
4692 +CacheSize now supports units of M, K, B like
4693
4694 CacheSize 10M
4695 CacheSize 10240K
4696 CacheSize 10000000B
4697 CacheSize 10000000
4698
4699 -Better handling of $Session->Abandon() so multiple
4700 request to the same session while its being destroyed
4701 will have the right effect.
4702
4703 +Optimized XMLSubs parsing. Scripts with lots lof XMLSubs
4704 now parse faster for the first time. One test script with
4705 almost 200 such tags went from a parse time of around 3 seconds
4706 to .7 seconds after optimizations.
4707
4708 +Updated performance tuning docs, particularly for using
4709 Apache::ASP->Loader()
4710
4711 +$Server->URL($url, \%params) now handles array refs
4712 in the params values like
4713 $Server->URL($url, { key => [ qw( value1 value2 ) ] })
4714
4715 This is so that query string data found in
4716 $Request->QueryString that gets parsed into this form
4717 from a string like: ?key=value&key=value2 would be
4718 able to be reused passed back to $Server->URL to
4719 create self referencing URLs more easily.
4720
4721 -Bug fix where XMLSubs like <s:td /> now works on perl
4722 5.005xx, thanks to Philip Mak for reporting & fix.
4723
4724 +When searching for included files, will now join
4725 the absolute path of the directory of the script
4726 with the name of the file if its a relative file
4727 name like ./header.inc. Before, would just look
4728 for something like ././header.inc by using '.'
4729 as the first directory to look for includes in.
4730
4731 The result of this is that scripts in two directories
4732 configured with the same Global setting should be able
4733 to have separate local header.inc files without causing
4734 a cached namespace collision.
4735
4736 +$Server->Config() call will return a hash ref
4737 to all the config setting for that request, like
4738 Apache->dir_config would.
4739
4740 -StatINC setting with Apache::ASP->Loader() works again.
4741 This makes StatINC & StatINCMatch settings viable
4742 for production & development use when the system has
4743 very many modules.
4744
4745 -Cookieless session support with configs like SessionQueryParse
4746 and SessionQuery now work for URLs with frags in them
4747 like http://localhost?arg=value#frag
4748
4749 +@rv = $Response->Include() now works where there are
4750 multiple return values from an include like:
4751 <% return(1,2); %>
4624 +Make sure a couple other small standard modules get loaded
4625 upon "PerlModule Apache::ASP", like Time::HiRes, Class::Struct,
4626 and MLDBM::Serializer::Data::Dumper. If not available
4627 these modules won't cause errors, but will promote child httpd
4628 RAM sharing if they are.
4629
4630 -XMLSubs args parsing fix so an arg like z-index
4631 does not error under UseStrict. This is OK now:
4632
4633 <my:layer z-index=3 top=0 left=0> HTML </my:layer>
4634
4635 -Only remove outermost <SCRIPT> tags from global.asa
4636 for IIS/PerlScript compatibility. Used to remove
4637 all <SCRIPT> tags, which hurt when some subs in globa.asa
4638 would be printing some JavaScript.
4639
4640 +$Response->{IsClientConnected} now updated correctly
4641 before global.asa Script_OnStart. $Response->IsClientConnect()
4642 can be used for accurate accounting, while
4643 $Response->{IsClientConnected} only gets updated
4644 after $Response->Flush(). Added test cases to response.t
4645
4646 +$Server->HTMLEncode(\$data) API extension, now can take
4647 scalar ref, which can give a 5% improvement in benchmarks
4648 for data 100K in size.
4649
4650 -Access to $Application is locked when Application_OnEnd &
4651 Application_OnStart is called, creating a critical section
4652 for use of $Application
4653
4654 ++MLDBM::Sync used now for core DBM support in Apache::ASP::State.
4655 This drastically simplifies/stabilizes the code in there
4656 and will make it easier for future SQL database plugins.
4657
4658 +New API for accessing ASP object information in non content
4659 handler phases:
4660
4661 use Apache::ASP;
4662 sub My::Auth::handler {
4663 my $r = shift;
4664 my $ASP = Apache::ASP->new($r)
4665 my $Session = $ASP->Session;
4666 }
4667
4668 In the above example, $Session would be the same $Session
4669 object created later while running the ASP script for this
4670 same request.
4671
4672 Added t/asp_object.t test for this. Fixed global.asa to only
4673 init StateDir when application.asp starts which is the first
4674 test script to run.
4675
4676 -Fixed on Win32 to make Apache::ASP->new($r) able to create
4677 multiple master ASP objects per request. Was not reentrant
4678 safe before, particularly with state locking for dbms like
4679 $Application & $Session.
4680
4681 ++Output caching for includes, built on same layer ( extended )
4682 as XSLTCache, test suite at t/cache.t. Enabled with special
4683 arguments to
4684
4685 $Response->Include(\%args, @include_args)
4686 $Response->TrapInclude(\%args, @include_args)
4687 $Server->Execute(\%args, @include_args)
4688
4689 where %args = (
4690 File => 'file.inc',
4691 Cache => 1, # to activate cache layer
4692 Expires => 3600, # to expire in one hour
4693 LastModified => time() - 600, # to expire if cached before 10 minutes ago
4694 Key => $Request->Form, # to cache based on checksum of serialized form data,
4695 Clear => 1, # to not allow fetch from cache this time, will always execute include
4696 );
4697
4698 Like the XSLTCache, it uses MLDBM::Sync::SDBM_File
4699 by default, but can use DB_File or GDBM_File if
4700 CacheDB is set to these.
4701
4702 See t/cache.t for API support until this is documented.
4703
4704 +CacheSize now supports units of M, K, B like
4705
4706 CacheSize 10M
4707 CacheSize 10240K
4708 CacheSize 10000000B
4709 CacheSize 10000000
4710
4711 -Better handling of $Session->Abandon() so multiple
4712 request to the same session while its being destroyed
4713 will have the right effect.
4714
4715 +Optimized XMLSubs parsing. Scripts with lots lof XMLSubs
4716 now parse faster for the first time. One test script with
4717 almost 200 such tags went from a parse time of around 3 seconds
4718 to .7 seconds after optimizations.
4719
4720 +Updated performance tuning docs, particularly for using
4721 Apache::ASP->Loader()
4722
4723 +$Server->URL($url, \%params) now handles array refs
4724 in the params values like
4725 $Server->URL($url, { key => [ qw( value1 value2 ) ] })
4726
4727 This is so that query string data found in
4728 $Request->QueryString that gets parsed into this form
4729 from a string like: ?key=value&key=value2 would be
4730 able to be reused passed back to $Server->URL to
4731 create self referencing URLs more easily.
4732
4733 -Bug fix where XMLSubs like <s:td /> now works on perl
4734 5.005xx, thanks to Philip Mak for reporting & fix.
4735
4736 +When searching for included files, will now join
4737 the absolute path of the directory of the script
4738 with the name of the file if its a relative file
4739 name like ./header.inc. Before, would just look
4740 for something like ././header.inc by using '.'
4741 as the first directory to look for includes in.
4742
4743 The result of this is that scripts in two directories
4744 configured with the same Global setting should be able
4745 to have separate local header.inc files without causing
4746 a cached namespace collision.
4747
4748 +$Server->Config() call will return a hash ref
4749 to all the config setting for that request, like
4750 Apache->dir_config would.
4751
4752 -StatINC setting with Apache::ASP->Loader() works again.
4753 This makes StatINC & StatINCMatch settings viable
4754 for production & development use when the system has
4755 very many modules.
4756
4757 -Cookieless session support with configs like SessionQueryParse
4758 and SessionQuery now work for URLs with frags in them
4759 like http://localhost?arg=value#frag
4760
4761 +@rv = $Response->Include() now works where there are
4762 multiple return values from an include like:
4763 <% return(1,2); %>
47524764
47534765 $VERSION = 2.21; $DATE="8/5/2001";
4754 +Documented RequestParams config in CONFIG misc section.
4755
4756 +Documented new XSLT caching directives.
4757
4758 +Updated ./site/eg/.htaccess XSLT example config
4759 to use XSLTCache setting.
4760
4761 +New FAQ section on why perl variables are sticky globals,
4762 suggested by Mark Seger.
4763
4764 -push Global directory onto @INC during ASP script execution
4765 Protect contents of original @INC with local. This makes
4766 things compatible with .09 Apache::ASP where we always had
4767 Global in @INC. Fixed needed by Henrik Tougaard
4768
4769 - ; is a valid separator like & for QueryString Parameters
4770 Fixed wanted by Anders
4771
4772 -XSMLSubsMatch doc fix in CONFIG section
4773
4774 +Reduces number of Session groups to 16 from 32, so
4775 session manager for small user sets will be that much faster.
4776
4777 +optimizations for internal database, $Application, and $Session
4778 creation.
4779
4780 +XSLTCache must be set for XSLT caching to begin using CacheDir
4781
4782 +CacheDB like StateDB bug sets dbm format for caching, which
4783 defaults to MLDBM::Sync::SDBM_File, which works well for caching
4784 output sizes < 50K
4785
4786 +CacheDir config for XSLT caching ... defaults to StateDir
4787
4788 +CacheSize in bytes determines whether the caches in CacheDir
4789 are deleted at the end of the request. A cache will be
4790 reset in this way back to 0 bytes. Defaults to 10000000 bytes
4791 or about 10M.
4792
4793 +Caching infrastructure work that is being used in XSLT
4794 can be leveraged later for output caching of includes,
4795 or arbitrary user caching.
4796
4797 -t/server_mail.t test now uses valid email for testing
4798 purposes ... doesn't actually send a mail, but for SMTP
4799 runtime validation purposes it should be OK.
4800
4801 +fixed where POST data was read from under MOD_PERL,
4802 harmless bug this was that just generated the wrong
4803 system debugging message.
4766 +Documented RequestParams config in CONFIG misc section.
4767
4768 +Documented new XSLT caching directives.
4769
4770 +Updated ./site/eg/.htaccess XSLT example config
4771 to use XSLTCache setting.
4772
4773 +New FAQ section on why perl variables are sticky globals,
4774 suggested by Mark Seger.
4775
4776 -push Global directory onto @INC during ASP script execution
4777 Protect contents of original @INC with local. This makes
4778 things compatible with .09 Apache::ASP where we always had
4779 Global in @INC. Fixed needed by Henrik Tougaard
4780
4781 - ; is a valid separator like & for QueryString Parameters
4782 Fixed wanted by Anders
4783
4784 -XSMLSubsMatch doc fix in CONFIG section
4785
4786 +Reduces number of Session groups to 16 from 32, so
4787 session manager for small user sets will be that much faster.
4788
4789 +optimizations for internal database, $Application, and $Session
4790 creation.
4791
4792 +XSLTCache must be set for XSLT caching to begin using CacheDir
4793
4794 +CacheDB like StateDB bug sets dbm format for caching, which
4795 defaults to MLDBM::Sync::SDBM_File, which works well for caching
4796 output sizes < 50K
4797
4798 +CacheDir config for XSLT caching ... defaults to StateDir
4799
4800 +CacheSize in bytes determines whether the caches in CacheDir
4801 are deleted at the end of the request. A cache will be
4802 reset in this way back to 0 bytes. Defaults to 10000000 bytes
4803 or about 10M.
4804
4805 +Caching infrastructure work that is being used in XSLT
4806 can be leveraged later for output caching of includes,
4807 or arbitrary user caching.
4808
4809 -t/server_mail.t test now uses valid email for testing
4810 purposes ... doesn't actually send a mail, but for SMTP
4811 runtime validation purposes it should be OK.
4812
4813 +fixed where POST data was read from under MOD_PERL,
4814 harmless bug this was that just generated the wrong
4815 system debugging message.
48044816
48054817 $VERSION = 2.19; $DATE="7/10/2001";
4806 +update docs in various parts
4807
4808 +added ./make_httpd/build_httpds.sh scripts for quick builds
4809 of apache + mod_perl + mod_ssl
4810
4811 ++plain CGI mode available for ASP execution.
4812 cgi/asp script can now be used to execute ASP
4813 scripts in CGI mode. See CGI perldoc section for more info.
4814 The examples in ./site/eg have been set up to run
4815 in cgi mode if desired. Configuration in CGI section
4816 only tested for Apache on Linux.
4817
4818 -Fixed some faulty or out of date docs in XML/XSLT section.
4819
4820 +added t/server_mail.t test for $Server->Mail(), requires
4821 Net::SMTP to be configured properly to succeed.
4822
4823 +Net::SMTP debugging not enabled by Debug 1,2,3 configs,
4824 not only when system debugging is set with Debug -1,-2,-3
4825 However, a Debug param passed to $Server->Mail() will
4826 sucessfully override the Debug -1,-2,-3 setting even
4827 when its Debug => 0
4828
4829 -Check for undef values during stats for inline includes
4830 so we don't trigger unintialized warnings
4831
4832 +Documented ';' may separate many directories in the IncludesDir
4833 setting for creating a more flexible includes search path.
4818 +update docs in various parts
4819
4820 +added ./make_httpd/build_httpds.sh scripts for quick builds
4821 of apache + mod_perl + mod_ssl
4822
4823 ++plain CGI mode available for ASP execution.
4824 cgi/asp script can now be used to execute ASP
4825 scripts in CGI mode. See CGI perldoc section for more info.
4826 The examples in ./site/eg have been set up to run
4827 in cgi mode if desired. Configuration in CGI section
4828 only tested for Apache on Linux.
4829
4830 -Fixed some faulty or out of date docs in XML/XSLT section.
4831
4832 +added t/server_mail.t test for $Server->Mail(), requires
4833 Net::SMTP to be configured properly to succeed.
4834
4835 +Net::SMTP debugging not enabled by Debug 1,2,3 configs,
4836 not only when system debugging is set with Debug -1,-2,-3
4837 However, a Debug param passed to $Server->Mail() will
4838 sucessfully override the Debug -1,-2,-3 setting even
4839 when its Debug => 0
4840
4841 -Check for undef values during stats for inline includes
4842 so we don't trigger unintialized warnings
4843
4844 +Documented ';' may separate many directories in the IncludesDir
4845 setting for creating a more flexible includes search path.
48344846
48354847 $VERSION = 2.17; $DATE="6/17/2001";
4836 +Added ASP perl mmm-mode subclass and configuration
4837 in editors/mmm-asp-perl.el file for better emacs support.
4838 Updated SYNTAX/Editors documentation.
4839
4840 +Better debugging error message for Debug 2 or 3 settings
4841 for global.asa errors. Limit debug output for lines
4842 preceding rendered script.
4843
4844 -In old inline include mode, there should no longer
4845 be the error "need id for includes" when using
4846 $Response->Include() ... if DynamicIncludes were
4847 enabled, this problem would not have likely occured
4848 anyway. DynamicIncludes are preferrable to use so
4849 that compiled includes can be shared between scripts.
4850 This bug was likely introduced in version 2.11.
4851
4852 -Removed logging from $Response->BinaryWrite() in regular
4853 debug mode 1 or 2. Logging still enabled in system Debug mode, -1 or -2
4854
4855 -Removed other extra system debugging call that is really not
4856 necessary.
4848 +Added ASP perl mmm-mode subclass and configuration
4849 in editors/mmm-asp-perl.el file for better emacs support.
4850 Updated SYNTAX/Editors documentation.
4851
4852 +Better debugging error message for Debug 2 or 3 settings
4853 for global.asa errors. Limit debug output for lines
4854 preceding rendered script.
4855
4856 -In old inline include mode, there should no longer
4857 be the error "need id for includes" when using
4858 $Response->Include() ... if DynamicIncludes were
4859 enabled, this problem would not have likely occured
4860 anyway. DynamicIncludes are preferrable to use so
4861 that compiled includes can be shared between scripts.
4862 This bug was likely introduced in version 2.11.
4863
4864 -Removed logging from $Response->BinaryWrite() in regular
4865 debug mode 1 or 2. Logging still enabled in system Debug mode, -1 or -2
4866
4867 -Removed other extra system debugging call that is really not
4868 necessary.
48574869
48584870 $VERSION = 2.15; $DATE="06/12/2001";
4859 -Fix for running under perl 5.6.1 by removing parser optimization
4860 introduced in 2.11.
4861
4862 -Now file upload forms, forms with ENCTYPE="multipart/form-data"
4863 can have multiple check boxes and select items marked for
4864 @params = $Request->Form('param_name') functionality. This
4865 will be demonstrated via the ./site/eg/file_upload.asp example.
4871 -Fix for running under perl 5.6.1 by removing parser optimization
4872 introduced in 2.11.
4873
4874 -Now file upload forms, forms with ENCTYPE="multipart/form-data"
4875 can have multiple check boxes and select items marked for
4876 @params = $Request->Form('param_name') functionality. This
4877 will be demonstrated via the ./site/eg/file_upload.asp example.
48664878
48674879 $VERSION = 2.11; $DATE="05/29/2001";
4868 +Parser optimization from Dariusz Pietrzak
4869
4870 -work around for global destruction error message for perl 5.6
4871 during install
4872
4873 +$Response->{IsClientConnected} now will be set
4874 correctly with ! $r->connection->aborted after each
4875 $Response->Flush()
4876
4877 +New XSLTParser config which can be set to XML::XSLT or
4878 XML::Sablotron. XML::Sablotron renders 10 times faster,
4879 but differently. XML::XSLT is pure perl, so has wider
4880 platform support than XML::Sablotron. This config affects
4881 both the XSLT config and the $Server->XSLT() method.
4882
4883 +New $Server->XSLT(\$xsl_data, \$xml_data) API which
4884 allows runtime XSLT on components instead of having to process
4885 the entire ASP output as XSLT.
4886
4887 -XSLT support for XML::XSL 0.32. Things broke after .24.
4888
4889 -XSLTCacheSize config no longer supported. Was a bad
4890 Tie::Cache implementation. Should be file based cache
4891 to greatly increases cache hit ratio.
4892
4893 ++$Response->Include(), $Response->TrapInclude(),
4894 and $Server->Execute() will all take a scalar ref
4895 or \'asdfdsafa' type code as their first argument to execute
4896 a raw script instead of a script file name. At this time,
4897 compilation of such a script, will not be cached. It is
4898 compiled/executed as an anonymous subroutine and will be freed
4899 when it goes out of scope.
4900
4901 + -p argument to cgi/asp script to set GlobalPackage
4902 config for static site builds
4903
4904 -pod commenting fix where windows clients are used for
4905 ASP script generation.
4906
4907 +Some nice performance enhancements, thank to submissions from
4908 Ime Smits. Added some 1-2% per request execution speed.
4909
4910 +Added StateDB MLDBM::Sync::SDBM_File support for faster
4911 $Session + $Application than DB_File, yet still overcomes
4912 SDBM_File's 1024 bytes value limitation. Documented in
4913 StateDB config, and added Makefile.PL entry.
4914
4915 +Removed deprecated MD5 use and replace with Digest::MD5 calls
4916
4917 +PerlSetVar InodeNames 1 config which will compile scripts hashed by
4918 their device & inode identifiers, from a stat($file)[0,1] call.
4919 This allows for script directories, the Global directory,
4920 and IncludesDir directories to be symlinked to without
4921 recompiling identical scripts. Likely only works on Unix
4922 systems. Thanks to Ime Smits for this one.
4923
4924 +Streamlined code internally so that includes & scripts were
4925 compiled by same code. This is a baby step toward fusing
4926 include & script code compilation models, leading to being
4927 able to compile bits of scripts on the fly as ASP subs,
4928 and being able to garbage collect ASP code subroutines.
4929
4930 -removed @_ = () in script compilation which would trigger warnings
4931 under PerlWarn being set, thanks for Carl Lipo for reporting this.
4932
4933 -StatINC/StatINCMatch fix for not undeffing compiled includes
4934 and pages in the GlobalPackage namespace
4935
4936 -Create new HTML::FillInForm object for each FormFill
4937 done, to avoid potential bug with multiple forms filled
4938 by same object. Thanks to Jim Pavlick for the tip.
4939
4940 +Added PREREQ_PM to Makefile.PL, so CPAN installation will
4941 pick up the necessary modules correctly, without having
4942 to use Bundle::Apache::ASP, thanks to Michael Davis.
4943
4944 + > mode for opening lock files, not >>, since its faster
4945
4946 +$Response->Flush() fixed, by giving $| = 1 perl hint
4947 to $r->print() and the rest of the perl sub.
4948
4949 +$Response->{Cookies}{cookie_name}{Expires} = -86400 * 300;
4950 works so negative relative time may be used to expire cookies.
4951
4952 +Count() + Key() Collection class API implementations
4953
4954 +Added editors/aasp.vim VIM syntax file for Apache::ASP,
4955 courtesy of Jon Topper.
4956
4957 ++Better line numbering with #line perl pragma. Especially
4958 helps with inline includes. Lots of work here, & integrated
4959 with Debug 2 runtime pretty print debugging.
4960
4961 +$Response->{Debug} member toggles on/off whether
4962 $Response->Debug() is active, overriding the Debug setting
4963 for this purpose. Documented.
4964
4965 -When Filter is on, Content-Length won't be set and compression
4966 won't be used. These things would not work with a filtering
4967 handler after Apache::ASP
4880 +Parser optimization from Dariusz Pietrzak
4881
4882 -work around for global destruction error message for perl 5.6
4883 during install
4884
4885 +$Response->{IsClientConnected} now will be set
4886 correctly with ! $r->connection->aborted after each
4887 $Response->Flush()
4888
4889 +New XSLTParser config which can be set to XML::XSLT or
4890 XML::Sablotron. XML::Sablotron renders 10 times faster,
4891 but differently. XML::XSLT is pure perl, so has wider
4892 platform support than XML::Sablotron. This config affects
4893 both the XSLT config and the $Server->XSLT() method.
4894
4895 +New $Server->XSLT(\$xsl_data, \$xml_data) API which
4896 allows runtime XSLT on components instead of having to process
4897 the entire ASP output as XSLT.
4898
4899 -XSLT support for XML::XSL 0.32. Things broke after .24.
4900
4901 -XSLTCacheSize config no longer supported. Was a bad
4902 Tie::Cache implementation. Should be file based cache
4903 to greatly increases cache hit ratio.
4904
4905 ++$Response->Include(), $Response->TrapInclude(),
4906 and $Server->Execute() will all take a scalar ref
4907 or \'asdfdsafa' type code as their first argument to execute
4908 a raw script instead of a script file name. At this time,
4909 compilation of such a script, will not be cached. It is
4910 compiled/executed as an anonymous subroutine and will be freed
4911 when it goes out of scope.
4912
4913 + -p argument to cgi/asp script to set GlobalPackage
4914 config for static site builds
4915
4916 -pod commenting fix where windows clients are used for
4917 ASP script generation.
4918
4919 +Some nice performance enhancements, thank to submissions from
4920 Ime Smits. Added some 1-2% per request execution speed.
4921
4922 +Added StateDB MLDBM::Sync::SDBM_File support for faster
4923 $Session + $Application than DB_File, yet still overcomes
4924 SDBM_File's 1024 bytes value limitation. Documented in
4925 StateDB config, and added Makefile.PL entry.
4926
4927 +Removed deprecated MD5 use and replace with Digest::MD5 calls
4928
4929 +PerlSetVar InodeNames 1 config which will compile scripts hashed by
4930 their device & inode identifiers, from a stat($file)[0,1] call.
4931 This allows for script directories, the Global directory,
4932 and IncludesDir directories to be symlinked to without
4933 recompiling identical scripts. Likely only works on Unix
4934 systems. Thanks to Ime Smits for this one.
4935
4936 +Streamlined code internally so that includes & scripts were
4937 compiled by same code. This is a baby step toward fusing
4938 include & script code compilation models, leading to being
4939 able to compile bits of scripts on the fly as ASP subs,
4940 and being able to garbage collect ASP code subroutines.
4941
4942 -removed @_ = () in script compilation which would trigger warnings
4943 under PerlWarn being set, thanks for Carl Lipo for reporting this.
4944
4945 -StatINC/StatINCMatch fix for not undeffing compiled includes
4946 and pages in the GlobalPackage namespace
4947
4948 -Create new HTML::FillInForm object for each FormFill
4949 done, to avoid potential bug with multiple forms filled
4950 by same object. Thanks to Jim Pavlick for the tip.
4951
4952 +Added PREREQ_PM to Makefile.PL, so CPAN installation will
4953 pick up the necessary modules correctly, without having
4954 to use Bundle::Apache::ASP, thanks to Michael Davis.
4955
4956 + > mode for opening lock files, not >>, since its faster
4957
4958 +$Response->Flush() fixed, by giving $| = 1 perl hint
4959 to $r->print() and the rest of the perl sub.
4960
4961 +$Response->{Cookies}{cookie_name}{Expires} = -86400 * 300;
4962 works so negative relative time may be used to expire cookies.
4963
4964 +Count() + Key() Collection class API implementations
4965
4966 +Added editors/aasp.vim VIM syntax file for Apache::ASP,
4967 courtesy of Jon Topper.
4968
4969 ++Better line numbering with #line perl pragma. Especially
4970 helps with inline includes. Lots of work here, & integrated
4971 with Debug 2 runtime pretty print debugging.
4972
4973 +$Response->{Debug} member toggles on/off whether
4974 $Response->Debug() is active, overriding the Debug setting
4975 for this purpose. Documented.
4976
4977 -When Filter is on, Content-Length won't be set and compression
4978 won't be used. These things would not work with a filtering
4979 handler after Apache::ASP
49684980
49694981 $VERSION = 2.09; $DATE="01/30/2001";
4970 +Examples in ./site/eg are now UseStrict friendly.
4971 Also fixed up ./site/eg/ssi_filter.ssi example.
4972
4973 +Auto purge of old stale session group directories, increasing
4974 session manager performance when using Sessions when migrating
4975 to Apache::ASP 2.09+ from older versions.
4976
4977 +SessionQueryParse now works for all $Response->{ContentType}
4978 starting with 'text' ... before just worked with text/html,
4979 now other text formats like wml will work too.
4980
4981 +32 groups instead of 64, better inactive site session group purging.
4982
4983 +Default session-id length back up to 32 hex bytes.
4984 Better security vs. performance, security more important,
4985 especially when performance difference was very little.
4986
4987 +PerlSetVar RequestParams 1 creates $Request->Params
4988 object with combined contents of $Request->QueryString
4989 and $Request->Form
4990
4991 ++FormFill feature via HTML::FillInForm. Activate with
4992 $Response->{FormFill} = 1 or PerlSetVar FormFill 1
4993 See site/eg/formfill.asp for example.
4994
4995 ++XMLSubs tags of the same name may be embedded in each other
4996 recursively now.
4997
4998 +No umask() use on Win32 as it seems unclear what it would do
4999
5000 +simpler Apache::ASP::State file handle mode of >> when opening
5001 lock file. saves doing a -e $file test.
5002
5003 +AuthServerVariables config to init $Request->ServerVariables
5004 with basic auth data as documented. This used to be default
5005 behavior, but triggers "need AuthName" warnings from recent
5006 versions of Apache when AuthName is not set.
5007
5008 -Renamed Apache::ASP::Loader class to Apache::ASP::Load
5009 as it collided with the Apache::ASP->Loader() function
5010 namespace. Class used internally by Apache::ASP->Loader()
5011 so no public API changed here.
5012
5013 +-Read of POST input for $Request->BinaryRead() even
5014 if its not from a form. Only set up $Request->Form
5015 if this is from a form POST.
5016
5017 +faster POST/GET param parsing
4982 +Examples in ./site/eg are now UseStrict friendly.
4983 Also fixed up ./site/eg/ssi_filter.ssi example.
4984
4985 +Auto purge of old stale session group directories, increasing
4986 session manager performance when using Sessions when migrating
4987 to Apache::ASP 2.09+ from older versions.
4988
4989 +SessionQueryParse now works for all $Response->{ContentType}
4990 starting with 'text' ... before just worked with text/html,
4991 now other text formats like wml will work too.
4992
4993 +32 groups instead of 64, better inactive site session group purging.
4994
4995 +Default session-id length back up to 32 hex bytes.
4996 Better security vs. performance, security more important,
4997 especially when performance difference was very little.
4998
4999 +PerlSetVar RequestParams 1 creates $Request->Params
5000 object with combined contents of $Request->QueryString
5001 and $Request->Form
5002
5003 ++FormFill feature via HTML::FillInForm. Activate with
5004 $Response->{FormFill} = 1 or PerlSetVar FormFill 1
5005 See site/eg/formfill.asp for example.
5006
5007 ++XMLSubs tags of the same name may be embedded in each other
5008 recursively now.
5009
5010 +No umask() use on Win32 as it seems unclear what it would do
5011
5012 +simpler Apache::ASP::State file handle mode of >> when opening
5013 lock file. saves doing a -e $file test.
5014
5015 +AuthServerVariables config to init $Request->ServerVariables
5016 with basic auth data as documented. This used to be default
5017 behavior, but triggers "need AuthName" warnings from recent
5018 versions of Apache when AuthName is not set.
5019
5020 -Renamed Apache::ASP::Loader class to Apache::ASP::Load
5021 as it collided with the Apache::ASP->Loader() function
5022 namespace. Class used internally by Apache::ASP->Loader()
5023 so no public API changed here.
5024
5025 +-Read of POST input for $Request->BinaryRead() even
5026 if its not from a form. Only set up $Request->Form
5027 if this is from a form POST.
5028
5029 +faster POST/GET param parsing
50185030
50195031 $VERSION = 2.07; $DATE="11/26/2000";
5020 -+-+ Session Manager
5021 empty state group directories are not removed, thus alleviating
5022 one potential race condition. This impacted performance
5023 on idle sites severely as there were now 256 directories
5024 to check, so made many performance enhancements to the
5025 session manager. The session manager is built to handle
5026 up to 20,000 client sessions over a 20 minute period. It
5027 will slow the system down as it approaches this capacity.
5028
5029 One such enhancement was session-ids now being 11 bytes long
5030 so that its .lock file is only 16 characters in length.
5031 Supposedly some file systems lookup files 16 characters or
5032 less in a fast hashed lookup. This new session-id has
5033 4.4 x 10^12 possible values. I try to keep this space as
5034 large as possible to prevent a brute force attack.
5035
5036 Another enhancement was to limit the group directories
5037 to 64 by only allowing the session-id prefix to be [0-3][0-f]
5038 instead of [0-f][0-f], checking 64 empty directories on an
5039 idle site takes little time for the session manager, compared
5040 to 256 which felt significant from the client end, especially
5041 on Win32 where requests are serialized.
5042
5043 If upgrading to this version, you would do well to delete
5044 empty StateDir group directories while your site is idle.
5045 Upgrading during an idle time will have a similar effect,
5046 as old Apache::ASP versions would delete empty directories.
5047
5048 -$Application->GetSession($session_id) now creates
5049 an session object that only lasts until the next
5050 invocation of $Application->GetSession(). This is
5051 to avoid opening too many file handles at once,
5052 where each session requires opening a lock file.
5053
5054 +added experimental support for Apache::Filter 1.013
5055 filter_register call
5056
5057 +make test cases for $Response->Include() and
5058 $Response->TrapInclude()
5059
5060 +Documented CollectionItem config.
5061
5062 +New $Request->QueryString('multiple args')->Count()
5063 interface implemented for CollectionItem config.
5064 Also $Request->QueryString('multiple args')->Item(1) method.
5065 Note ASP collections start counting at 1.
5066
5067 --fixed race condition, where multiple processes might
5068 try creating the same state directory at the same time, with
5069 one winning, and one generating an error. Now, web process
5070 will recheck for directory existence and error if
5071 it doesn't.
5072
5073 -global.asa compilation will be cached correctly, not
5074 sure when this broke. It was getting reloaded every request.
5075
5076 -StateAllWrite config, when set creates state files
5077 with a+rw or 0666 permissions, and state directories
5078 with a+rwx or 0777 permissions. This allows web servers
5079 running as different users on the same machine to share a
5080 common StateDir config. Also StateGroupWrite config
5081 with perms 0770 and 0660 respectively.
5082
5083 -Apache::ASP->Loader() now won't follow links to
5084 directories when searching for scripts to load.
5085
5086 +New RegisterIncludes config which is on by default only
5087 when using Apache::ASP->Loader(), for compiling includes
5088 when precompiling scripts.
5089
5090 +Apache::ASP::CompileInclude path optimized, which underlies
5091 $Response->Include()
5092
5093 +$Request->QueryString->('foo')->Item() syntax enabled
5094 with CollectionItem config setting. Default syntax
5095 supported is $Request->QueryString('foo') which is
5096 in compatible. Other syntax like $Request->{Form}{foo}
5097 and $Request->Form->Item('foo') will work in either case.
5098
5099 +New fix suggested for missing Apache reference in
5100 Apache::ASP handler startup for RedHat RPMs. Added
5101 to error message.
5102
5103 --Backup flock() unlocking try for QNX will not corrupt the
5104 normal flock() LOCK_UN usage, after trying to unlock a file
5105 that doesn't exist. This bug was uncovered from the below
5106 group deletion race condition that existed.
5107
5108 -Session garbage collection will not delete new group
5109 directories that have just been created but are empty.
5110 There was a race condition where a new group directory would
5111 be created, but then deleted by a garbage collector before
5112 it could be initialized correctly with new state files.
5113
5114 +Better random session-id checksums for $Session creation.
5115 per process srand() initialization, because srand()
5116 may be called once prefork and never called again.
5117 Call without arguments to rely on perl's decent rand
5118 seeding. Then when calling rand() in Secret() we have
5119 enough random data, that even if someone else calls srand()
5120 to something fixed, should not mess things up terribly since
5121 we checksum things like $$ & time, as well as perl memory
5122 references.
5123
5124 +XMLSubs installation make test.
5125
5126 -Fix for multiline arguments for XMLSubs
5032 -+-+ Session Manager
5033 empty state group directories are not removed, thus alleviating
5034 one potential race condition. This impacted performance
5035 on idle sites severely as there were now 256 directories
5036 to check, so made many performance enhancements to the
5037 session manager. The session manager is built to handle
5038 up to 20,000 client sessions over a 20 minute period. It
5039 will slow the system down as it approaches this capacity.
5040
5041 One such enhancement was session-ids now being 11 bytes long
5042 so that its .lock file is only 16 characters in length.
5043 Supposedly some file systems lookup files 16 characters or
5044 less in a fast hashed lookup. This new session-id has
5045 4.4 x 10^12 possible values. I try to keep this space as
5046 large as possible to prevent a brute force attack.
5047
5048 Another enhancement was to limit the group directories
5049 to 64 by only allowing the session-id prefix to be [0-3][0-f]
5050 instead of [0-f][0-f], checking 64 empty directories on an
5051 idle site takes little time for the session manager, compared
5052 to 256 which felt significant from the client end, especially
5053 on Win32 where requests are serialized.
5054
5055 If upgrading to this version, you would do well to delete
5056 empty StateDir group directories while your site is idle.
5057 Upgrading during an idle time will have a similar effect,
5058 as old Apache::ASP versions would delete empty directories.
5059
5060 -$Application->GetSession($session_id) now creates
5061 an session object that only lasts until the next
5062 invocation of $Application->GetSession(). This is
5063 to avoid opening too many file handles at once,
5064 where each session requires opening a lock file.
5065
5066 +added experimental support for Apache::Filter 1.013
5067 filter_register call
5068
5069 +make test cases for $Response->Include() and
5070 $Response->TrapInclude()
5071
5072 +Documented CollectionItem config.
5073
5074 +New $Request->QueryString('multiple args')->Count()
5075 interface implemented for CollectionItem config.
5076 Also $Request->QueryString('multiple args')->Item(1) method.
5077 Note ASP collections start counting at 1.
5078
5079 --fixed race condition, where multiple processes might
5080 try creating the same state directory at the same time, with
5081 one winning, and one generating an error. Now, web process
5082 will recheck for directory existence and error if
5083 it doesn't.
5084
5085 -global.asa compilation will be cached correctly, not
5086 sure when this broke. It was getting reloaded every request.
5087
5088 -StateAllWrite config, when set creates state files
5089 with a+rw or 0666 permissions, and state directories
5090 with a+rwx or 0777 permissions. This allows web servers
5091 running as different users on the same machine to share a
5092 common StateDir config. Also StateGroupWrite config
5093 with perms 0770 and 0660 respectively.
5094
5095 -Apache::ASP->Loader() now won't follow links to
5096 directories when searching for scripts to load.
5097
5098 +New RegisterIncludes config which is on by default only
5099 when using Apache::ASP->Loader(), for compiling includes
5100 when precompiling scripts.
5101
5102 +Apache::ASP::CompileInclude path optimized, which underlies
5103 $Response->Include()
5104
5105 +$Request->QueryString->('foo')->Item() syntax enabled
5106 with CollectionItem config setting. Default syntax
5107 supported is $Request->QueryString('foo') which is
5108 in compatible. Other syntax like $Request->{Form}{foo}
5109 and $Request->Form->Item('foo') will work in either case.
5110
5111 +New fix suggested for missing Apache reference in
5112 Apache::ASP handler startup for RedHat RPMs. Added
5113 to error message.
5114
5115 --Backup flock() unlocking try for QNX will not corrupt the
5116 normal flock() LOCK_UN usage, after trying to unlock a file
5117 that doesn't exist. This bug was uncovered from the below
5118 group deletion race condition that existed.
5119
5120 -Session garbage collection will not delete new group
5121 directories that have just been created but are empty.
5122 There was a race condition where a new group directory would
5123 be created, but then deleted by a garbage collector before
5124 it could be initialized correctly with new state files.
5125
5126 +Better random session-id checksums for $Session creation.
5127 per process srand() initialization, because srand()
5128 may be called once prefork and never called again.
5129 Call without arguments to rely on perl's decent rand
5130 seeding. Then when calling rand() in Secret() we have
5131 enough random data, that even if someone else calls srand()
5132 to something fixed, should not mess things up terribly since
5133 we checksum things like $$ & time, as well as perl memory
5134 references.
5135
5136 +XMLSubs installation make test.
5137
5138 -Fix for multiline arguments for XMLSubs
51275139
51285140 $VERSION = 2.03; $DATE="08/01/2000";
5129 +License change to GPL. See LICENSE section.
5130
5131 +Setup of www.apache-asp.org site, finally!
5132
5133 -get rid of Apache::ASP->Loader() warning message for perl 5.6.0
5141 +License change to GPL. See LICENSE section.
5142
5143 +Setup of www.apache-asp.org site, finally!
5144
5145 -get rid of Apache::ASP->Loader() warning message for perl 5.6.0
51345146
51355147 $VERSION = 2.01; $DATE="07/22/2000";
5136 +$data_ref = $Response->TrapInclude('file.inc') API
5137 extension which allows for easy post processing of
5138 data from includes
5139
5140 +./site/eg/source.inc syntax highlighting improvements
5141
5142 +XMLSubsMatch compile time parsing performance improvement
5148 +$data_ref = $Response->TrapInclude('file.inc') API
5149 extension which allows for easy post processing of
5150 data from includes
5151
5152 +./site/eg/source.inc syntax highlighting improvements
5153
5154 +XMLSubsMatch compile time parsing performance improvement
51435155
51445156 $VERSION = 2.00; $DATE="07/15/2000";
5145 -UniquePackages config works again, broke a couple versions back
5146
5147 +better error handling for methods called on $Application
5148 that don't exist, hard to debug before
5157 -UniquePackages config works again, broke a couple versions back
5158
5159 +better error handling for methods called on $Application
5160 that don't exist, hard to debug before
51495161
51505162 $VERSION = 1.95; $DATE="07/10/2000";
5151 !!!!! EXAMPLES SECURITY BUG FOUND & FIXED !!!!!
5152
5153 --FIXED: distribution example ./site/eg/source.asp now parses
5154 out special characters of the open() call when reading local
5155 files.
5156
5157 This bug would allow a malicious user possible writing
5158 of files in the same directory as the source.asp script. This
5159 writing exploit would only have effect if the web server user
5160 has write permission on those files.
5161
5162 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5163
5164 -$0 now set to transferred file, when using $Server->Transfer
5165
5166 -Fix for XMLSubsMatch parsing on cases with 2 or more args passed
5167 to tag sub that was standalone like
5168 <Apps:header type="header" title="Moo" foo="moo" />
5163 !!!!! EXAMPLES SECURITY BUG FOUND & FIXED !!!!!
5164
5165 --FIXED: distribution example ./site/eg/source.asp now parses
5166 out special characters of the open() call when reading local
5167 files.
5168
5169 This bug would allow a malicious user possible writing
5170 of files in the same directory as the source.asp script. This
5171 writing exploit would only have effect if the web server user
5172 has write permission on those files.
5173
5174 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5175
5176 -$0 now set to transferred file, when using $Server->Transfer
5177
5178 -Fix for XMLSubsMatch parsing on cases with 2 or more args passed
5179 to tag sub that was standalone like
5180 <Apps:header type="header" title="Moo" foo="moo" />
51695181
51705182 $VERSION = 1.93; $DATE="07/03/2000";
5171 -sub second timing with Time::HiRes was adding <!-- -->
5172 comments by HTML by default, which would possibly
5173 break specific programs looking for precise HTML output.
5174 Now this behavior must be explicitly turned on with
5175 the TimeHiRes config setting.
5176
5177 These comments will only appear in HTML only if
5178 Debug is enabled as well.
5179
5180 Timed log entries will only occur if
5181 system debugging is enabled, with Debug -1 or -2
5183 -sub second timing with Time::HiRes was adding <!-- -->
5184 comments by HTML by default, which would possibly
5185 break specific programs looking for precise HTML output.
5186 Now this behavior must be explicitly turned on with
5187 the TimeHiRes config setting.
5188
5189 These comments will only appear in HTML only if
5190 Debug is enabled as well.
5191
5192 Timed log entries will only occur if
5193 system debugging is enabled, with Debug -1 or -2
51825194
51835195 $VERSION = 1.91; $DATE="07/02/2000";
5184 +Documented XMLSubsMatch & XSLT* configuration
5185 settings in CONFIG section.
5186
5187 +XSLT XSL template is now first executed as an
5188 ASP script just like the XML scripts. This is
5189 just one step away now from implementing XSP logic.
5190
5191 +$Server->Execute and $Server->Transfer API extensions
5192 implemented. Execute is the same as $Request->Include()
5193 and $Server->Transfer is like an apache internal redirect
5194 but keeps the current ASP objects for the next script.
5195
5196 Added examples, transfer.htm, and modified dynamic_includes.htm.
5197
5198 +Better compile time error debugging with Debug 2 or -2.
5199 Will hilite/link the buggy line for global.asa errors,
5200 include errors, and XML/XSLT errors just like with
5201 ASP scripts before.
5202
5203 +Nice source hiliting when viewing source for the example
5204 scripts.
5205
5206 +Runtime string writing optimization for static HTML going
5207 through $Response.
5208
5209 +New version numbering just like everyone else. Starting at 1.91
5210 since I seem to be off by a factor of 10, last release would have
5211 been 1.9.
5196 +Documented XMLSubsMatch & XSLT* configuration
5197 settings in CONFIG section.
5198
5199 +XSLT XSL template is now first executed as an
5200 ASP script just like the XML scripts. This is
5201 just one step away now from implementing XSP logic.
5202
5203 +$Server->Execute and $Server->Transfer API extensions
5204 implemented. Execute is the same as $Request->Include()
5205 and $Server->Transfer is like an apache internal redirect
5206 but keeps the current ASP objects for the next script.
5207
5208 Added examples, transfer.htm, and modified dynamic_includes.htm.
5209
5210 +Better compile time error debugging with Debug 2 or -2.
5211 Will hilite/link the buggy line for global.asa errors,
5212 include errors, and XML/XSLT errors just like with
5213 ASP scripts before.
5214
5215 +Nice source hiliting when viewing source for the example
5216 scripts.
5217
5218 +Runtime string writing optimization for static HTML going
5219 through $Response.
5220
5221 +New version numbering just like everyone else. Starting at 1.91
5222 since I seem to be off by a factor of 10, last release would have
5223 been 1.9.
52125224
52135225 $VERSION = 0.19; $DATE="NOT RELEASED";
5214 +XMLSubsMatch and XSLT* settings documented in
5215 the XML/XSLT section of the site/README.
5216
5217 -XMLSubsMatch will strip parens in a pattern match
5218 so it does not interfere with internal matching use.
5219
5220 +XSLT integration allowing XML to be rendered by XSLT
5221 on the fly. XSLT specifies XSL file to transform XML.
5222 XSLTMatch is a regexp that matches XML file names, like \.xml$,
5223 which will be transformed by XSLT setting, default .*
5226 +XMLSubsMatch and XSLT* settings documented in
5227 the XML/XSLT section of the site/README.
5228
5229 -XMLSubsMatch will strip parens in a pattern match
5230 so it does not interfere with internal matching use.
5231
5232 +XSLT integration allowing XML to be rendered by XSLT
5233 on the fly. XSLT specifies XSL file to transform XML.
5234 XSLTMatch is a regexp that matches XML file names, like \.xml$,
5235 which will be transformed by XSLT setting, default .*
52245236
5225 XSLTCacheSize when specified uses Tie::Cache to cached XML DOMs
5226 internally and cache XSLT transformations output per XML/XSL
5227 combination. XML DOM objects can take a lot of RAM, so use
5228 this setting judiciously like setting to 100. Definitely
5229 experiment with this value.
5230
5231 +More client info in the error mail feature, including
5232 client IP, form data, query string, and HTTP_* client headers
5233
5234 +With Time::HiRes loaded, and Debug set to non 0,
5235 will add a <!-- Apache::ASP served request in xx.xx seconds -->
5236 to text/html output, similar to Cocoon, per user request
5237 Will also add this to the system debug error log output
5238 when Debug is < 0
5239
5240 -bug fix on object initialization optimization earlier
5241 in this release, that was introduced for faster event
5242 handler execution.
5243
5244 +Apache::ASP::Parse() takes a file name, scalar, or
5245 scalar ref for arguments of data to parse for greater
5246 integration ability with other applications.
5247
5248 +PodComments optimization, small speed increase at
5249 compilation time.
5250
5251 +String optimization on internal rendering that avoids
5252 unnecessary copying of static html, by using refs. Should
5253 make a small difference on sites with large amounts of
5254 static html.
5255
5256 +CompressGzip setting which, when Compress::Zlib is installed,
5257 will compress text/html automatically going out to the web
5258 browser if the client supports gzip encoding.
5259
5260 ++Script_OnFlush event handler, and auxiliary work optimizing
5261 asp events in general. $Response->{BinaryRef} created which
5262 is a reference to outgoing output, which can be used
5263 to modify the data at runtime before it goes out to the client.
5264
5265 +Some code optimizations that boost speed from 22 to 24
5266 hits per second when using Sessions without $Application,
5267 on a simple hello world benchmark on a WinNT PII300.
5268
5269 ++Better SessionManagement, more aware of server farms that
5270 don't have reliable NFS locking. The key here is to have only
5271 one process on one server in charge of session garbage collection
5272 at any one time, and try to create this situation with a snazzy
5273 CleanupMaster routine. This is done by having a process register
5274 itself in the internal database with a server key created at
5275 apache start time. If this key gets stale, another process can
5276 become the master, and this period will not exceed the period
5277 SessionTimeout / StateManager.
5278
5279 ** Work on session manager sponsored by LRN, http://www.lrn.com. **
5280 ** This work was used to deploy a server farm in production with **
5281 ** NFS mounted StateDir. Thanks to Craig Samuel for his belief in **
5282 ** open source. :) **
5283
5284 Future work for server farm capabilities might include breaking
5285 up the internal database into one of 256 internal databases
5286 hashed by the first 2 chars of the session id. Also on the plate
5287 is Apache::Session like abilities with locking and/or data storage
5288 occuring in a SQL database. The first dbs to be done will include
5289 MySQL & Oracle.
5290
5291 +Better session security which will create a new session id for an
5292 incoming session id that does not match one already seen. This will
5293 help for those with Search engines that have bookmarked
5294 pages with the session ids in the query strings. This breaks away
5295 from standard ASP session id implementation which will automatically
5296 use the session id presented by the browser, now a new session id will
5297 be returned if the presented one is invalid or expired.
5298
5299 -$Application->GetSession will only return a session if
5300 one already existed. It would create one before by default.
5301
5302 +Script_OnFlush global.asa event handler, and $Response->{BinaryRef}
5303 member which is a scalar reference to the content about to be flushed.
5304 See ./site/eg/global.asa for example usage, used in this case to
5305 insert font tags on the fly into the output.
5306
5307 +Highlighting and linking of line error when Debug is set to 2 or -2.
5308
5309 --removed fork() call from flock() backup routine? How did
5310 that get in there? Oh right, testing on Win32. :(
5311 Very painful lesson this one, sorry to whom it may concern.
5312
5313 +$Application->SessionCount support turned off by default
5314 must enable with SessionCount config option. This feature
5315 puts an unnecessary load on busy sites, so not default
5316 behavior now.
5317
5318 ++XMLSubsMatch setting that allows the developer to
5319 create custom tags XML style that execute perl subroutines.
5320 See ./site/eg/xml_subs.asp
5321
5322 +MailFrom config option that defaults the From: field for
5323 mails sent via the Mail* configs and $Server->Mail()
5324
5325 +$Server->Mail(\%mail, %smtp_args) API extension
5326
5327 +MailErrorsTo & MailAlertTo now can take comma
5328 separated email addresses for multiple recipients.
5329
5330 -tracking of subroutines defined in scripts and includes so
5331 StatINC won't undefine them when reloading the GlobalPackage,
5332 and so an warning will be logged when another script redefines
5333 the same subroutine name, which has been the bane of at least
5334 a few developers.
5335
5336 -Loader() will now recompile dynamic includes that
5337 have changed, even if main including script has not.
5338 This is useful if you are using Loader() in a
5339 PerlRestartHandler, for reloading scripts when
5340 gracefully restarting apache.
5341
5342 -Apache::ASP used to always set the status to 200 by
5343 default explicitly with $r->status(). This would be
5344 a problem if a script was being used to as a 404
5345 ErrorDocument, because it would always return a 200 error
5346 code, which is just wrong. $Response->{Status} is now
5347 undefined by default and will only be used if set by
5348 the developer.
5349
5350 Note that by default a script will still return a 200 status,
5351 but $Response->{Status} may be used to override this behavior.
5352
5353 +$Server->Config($setting) API extension that allows developer
5354 to access config settings like Global, StateDir, etc., and is a
5355 wrapper around Apache->dir_config($setting)
5356
5357 +Loader() will log the number of scripts
5358 recompiled and the number of scripts checked, instead
5359 of just the number of scripts recompiled, which is
5360 misleading as it reports 0 for child httpds after
5361 a parent fork that used Loader() upon startup.
5362
5363 -Apache::ASP->Loader() would have a bad error if it didn't load
5364 any scripts when given a directory, prints "loaded 0 scripts" now
5237 XSLTCacheSize when specified uses Tie::Cache to cached XML DOMs
5238 internally and cache XSLT transformations output per XML/XSL
5239 combination. XML DOM objects can take a lot of RAM, so use
5240 this setting judiciously like setting to 100. Definitely
5241 experiment with this value.
5242
5243 +More client info in the error mail feature, including
5244 client IP, form data, query string, and HTTP_* client headers
5245
5246 +With Time::HiRes loaded, and Debug set to non 0,
5247 will add a <!-- Apache::ASP served request in xx.xx seconds -->
5248 to text/html output, similar to Cocoon, per user request
5249 Will also add this to the system debug error log output
5250 when Debug is < 0
5251
5252 -bug fix on object initialization optimization earlier
5253 in this release, that was introduced for faster event
5254 handler execution.
5255
5256 +Apache::ASP::Parse() takes a file name, scalar, or
5257 scalar ref for arguments of data to parse for greater
5258 integration ability with other applications.
5259
5260 +PodComments optimization, small speed increase at
5261 compilation time.
5262
5263 +String optimization on internal rendering that avoids
5264 unnecessary copying of static html, by using refs. Should
5265 make a small difference on sites with large amounts of
5266 static html.
5267
5268 +CompressGzip setting which, when Compress::Zlib is installed,
5269 will compress text/html automatically going out to the web
5270 browser if the client supports gzip encoding.
5271
5272 ++Script_OnFlush event handler, and auxiliary work optimizing
5273 asp events in general. $Response->{BinaryRef} created which
5274 is a reference to outgoing output, which can be used
5275 to modify the data at runtime before it goes out to the client.
5276
5277 +Some code optimizations that boost speed from 22 to 24
5278 hits per second when using Sessions without $Application,
5279 on a simple hello world benchmark on a WinNT PII300.
5280
5281 ++Better SessionManagement, more aware of server farms that
5282 don't have reliable NFS locking. The key here is to have only
5283 one process on one server in charge of session garbage collection
5284 at any one time, and try to create this situation with a snazzy
5285 CleanupMaster routine. This is done by having a process register
5286 itself in the internal database with a server key created at
5287 apache start time. If this key gets stale, another process can
5288 become the master, and this period will not exceed the period
5289 SessionTimeout / StateManager.
5290
5291 ** Work on session manager sponsored by LRN, http://www.lrn.com. **
5292 ** This work was used to deploy a server farm in production with **
5293 ** NFS mounted StateDir. Thanks to Craig Samuel for his belief in **
5294 ** open source. :) **
5295
5296 Future work for server farm capabilities might include breaking
5297 up the internal database into one of 256 internal databases
5298 hashed by the first 2 chars of the session id. Also on the plate
5299 is Apache::Session like abilities with locking and/or data storage
5300 occuring in a SQL database. The first dbs to be done will include
5301 MySQL & Oracle.
5302
5303 +Better session security which will create a new session id for an
5304 incoming session id that does not match one already seen. This will
5305 help for those with Search engines that have bookmarked
5306 pages with the session ids in the query strings. This breaks away
5307 from standard ASP session id implementation which will automatically
5308 use the session id presented by the browser, now a new session id will
5309 be returned if the presented one is invalid or expired.
5310
5311 -$Application->GetSession will only return a session if
5312 one already existed. It would create one before by default.
5313
5314 +Script_OnFlush global.asa event handler, and $Response->{BinaryRef}
5315 member which is a scalar reference to the content about to be flushed.
5316 See ./site/eg/global.asa for example usage, used in this case to
5317 insert font tags on the fly into the output.
5318
5319 +Highlighting and linking of line error when Debug is set to 2 or -2.
5320
5321 --removed fork() call from flock() backup routine? How did
5322 that get in there? Oh right, testing on Win32. :(
5323 Very painful lesson this one, sorry to whom it may concern.
5324
5325 +$Application->SessionCount support turned off by default
5326 must enable with SessionCount config option. This feature
5327 puts an unnecessary load on busy sites, so not default
5328 behavior now.
5329
5330 ++XMLSubsMatch setting that allows the developer to
5331 create custom tags XML style that execute perl subroutines.
5332 See ./site/eg/xml_subs.asp
5333
5334 +MailFrom config option that defaults the From: field for
5335 mails sent via the Mail* configs and $Server->Mail()
5336
5337 +$Server->Mail(\%mail, %smtp_args) API extension
5338
5339 +MailErrorsTo & MailAlertTo now can take comma
5340 separated email addresses for multiple recipients.
5341
5342 -tracking of subroutines defined in scripts and includes so
5343 StatINC won't undefine them when reloading the GlobalPackage,
5344 and so an warning will be logged when another script redefines
5345 the same subroutine name, which has been the bane of at least
5346 a few developers.
5347
5348 -Loader() will now recompile dynamic includes that
5349 have changed, even if main including script has not.
5350 This is useful if you are using Loader() in a
5351 PerlRestartHandler, for reloading scripts when
5352 gracefully restarting apache.
5353
5354 -Apache::ASP used to always set the status to 200 by
5355 default explicitly with $r->status(). This would be
5356 a problem if a script was being used to as a 404
5357 ErrorDocument, because it would always return a 200 error
5358 code, which is just wrong. $Response->{Status} is now
5359 undefined by default and will only be used if set by
5360 the developer.
5361
5362 Note that by default a script will still return a 200 status,
5363 but $Response->{Status} may be used to override this behavior.
5364
5365 +$Server->Config($setting) API extension that allows developer
5366 to access config settings like Global, StateDir, etc., and is a
5367 wrapper around Apache->dir_config($setting)
5368
5369 +Loader() will log the number of scripts
5370 recompiled and the number of scripts checked, instead
5371 of just the number of scripts recompiled, which is
5372 misleading as it reports 0 for child httpds after
5373 a parent fork that used Loader() upon startup.
5374
5375 -Apache::ASP->Loader() would have a bad error if it didn't load
5376 any scripts when given a directory, prints "loaded 0 scripts" now
53655377
53665378 $VERSION = 0.18; $DATE="02/03/2000";
5367 +Documented SessionQuery* & $Server->URL() and
5368 cleaned up formatting some, as well as redoing
5369 some of the sections ordering for better readability.
5370 Document the cookieless session functionality more
5371 in a new SESSIONS section. Also documented new
5372 FileUpload configs and $Request->FileUpload collection.
5373 Documented StatScripts.
5374
5375 +StatScripts setting which if set to 0 will not reload
5376 includes, global.asa, or scripts when changed.
5377
5378 +FileUpload file handles cleanup at garbage collection
5379 time so developer does not have to worry about lazy coding
5380 and undeffing filehandles used in code. Also set
5381 uploaded filehandles to binmode automatically on Win32
5382 platforms, saving the developer yet more typing.
5383
5384 +FileUploadTemp setting, default 0, if set will leave
5385 a temp file on disk during the request, which may be
5386 helpful for processing by other programs, but is also
5387 a security risk in that others could potentially read
5388 this file while the script is running.
5389
5390 The path to the temp file will be available at
5391 $Request->{FileUpload}{$form_field}{TempFile}.
5392 The regular use of file uploads remains the same
5393 with the <$filehandle> to the upload at
5394 $Request->{Form}{$form_field}.
5395
5396 +FileUploadMax setting, default 0, currently an
5397 alias for $CGI::POST_MAX, which determines the
5398 max size for a file upload in bytes.
5399
5400 +SessionQueryParse only auto parses session-ids
5401 into links when a session-id COOKIE is NOT found.
5402 This feature is only enabled then when a user has
5403 disabled cookies, so the runtime penalty of this
5404 feature won't drag down the whole site, since most
5405 users will have cookies turned on.
5406
5407 -StatINC & StatINCMatch will not undef Fnctl.pm flock
5408 functions constants like O_RDWR, because the code references
5409 are not well trackable. This would result in sporadic 500 server
5410 errors when a changed module was reloaded that imported O_* flock
5411 functions from Fnctl.
5412
5413 +SessionQueryParse & SessionQueryParseMatch
5414 settings that enable auto parsing session ids into
5415 URLs for cookieless sessions. Will pick up URLs in
5416 <a href>, <area href>, <form action>, <frame src>,
5417 <iframe src>, <img src>, <input src>, <link href>
5418 $Response->Redirect($URL) and the first URL in
5419 script tags like <script>*.location.href=$URL</script>
5420
5421 These settings require that buffering be enabled, as
5422 Apache::ASP will parse through the buffer to parse the URLs.
5423
5424 With SessionQueryParse on, it will just parse non-absolute
5425 URLs, but with SessionQueryParseMatch set to some server
5426 url regexp, like ^http://localhost , will also parse
5427 in the session id for URLs that match that.
5428
5429 When testing, the performance hit from this parsing
5430 a script dropped from 12.5 hits/sec on my WinNT box
5431 to 11.7 hits per second for 1K of buffered output.
5432 The difference is .007 of my PII300's processing power
5433 per second.
5434
5435 For 10K of output then, my guess is that this speed
5436 of script, would be slowed to 6.8 hits per second.
5437 This kind of performance hit would also slow a
5438 script running at 40 hits per second on a UNIX box
5439 to 31 hits/sec for 1K, and to 11 hits/sec for 10K parsed.
5440
5441 Your mileage may vary and you will have to test the difference
5442 yourself. Get yourself a valid URL with a session-id in
5443 it, and run it through ab, or Socrates, with SessionQuery
5444 turned on, and then with SessionQueryParse set to see
5445 the difference. SessionQuery just enables of session id
5446 setting from the query string but will not auto parse urls.
5447
5448 -If buffering, Content-Length will again be set.
5449 It broke, probably while I was tuning in the past
5450 couple versions.
5451
5452 +UseStrict setting compiles all scripts including
5453 global.asa with "use strict" turned on for catching
5454 more coding errors. With this setting enabled,
5455 use strict errors die during compilation forcing
5456 Apache::ASP to try to recompile the script until
5457 successful.
5458
5459 -Object use in includes like $Response->Write()
5460 no longer error with "use strict" programming.
5461
5462 +SessionQuery config setting with $Server->URL($url, { %params } )
5463 alpha API extensions to enable cookieless sessions.
5464
5465 +Debugging not longer produces internal debugging
5466 by default. Set to -1,-2 for internal debugging
5467 for Debug settings 1 & 2.
5468
5469 +Both StateSerializer & StateDB can be changed
5470 without affecting a live web site, by storing
5471 the configurations for $Application & $Session
5472 in an internal database, so that if $Session was
5473 created with SDBM_File for the StateDB (default),
5474 it will keep this StateDB setting until it ends.
5475
5476 +StateSerializer config setting. Default Data::Dumper,
5477 can also be set to Storable. Controls how data is
5478 serialized before writing to $Application & $Session.
5479
5480 +Beefed up the make test suite.
5481
5482 +Improved the locking, streamlining a bit of the
5483 $Application / $Session setup process. Bench is up to
5484 22 from 21 hits / sec on dev NT box.
5485
5486 +Cut more fat for faster startup, now on my dev box
5487 I get 44 hits per sec Apache::ASP vs. 48 Embperl
5488 vs. 52 CGI via Apache::Registry for the HelloWorld Scripts.
5489
5490 -Improved linking for the online site documentation,
5491 where a few links before were bad.
5379 +Documented SessionQuery* & $Server->URL() and
5380 cleaned up formatting some, as well as redoing
5381 some of the sections ordering for better readability.
5382 Document the cookieless session functionality more
5383 in a new SESSIONS section. Also documented new
5384 FileUpload configs and $Request->FileUpload collection.
5385 Documented StatScripts.
5386
5387 +StatScripts setting which if set to 0 will not reload
5388 includes, global.asa, or scripts when changed.
5389
5390 +FileUpload file handles cleanup at garbage collection
5391 time so developer does not have to worry about lazy coding
5392 and undeffing filehandles used in code. Also set
5393 uploaded filehandles to binmode automatically on Win32
5394 platforms, saving the developer yet more typing.
5395
5396 +FileUploadTemp setting, default 0, if set will leave
5397 a temp file on disk during the request, which may be
5398 helpful for processing by other programs, but is also
5399 a security risk in that others could potentially read
5400 this file while the script is running.
5401
5402 The path to the temp file will be available at
5403 $Request->{FileUpload}{$form_field}{TempFile}.
5404 The regular use of file uploads remains the same
5405 with the <$filehandle> to the upload at
5406 $Request->{Form}{$form_field}.
5407
5408 +FileUploadMax setting, default 0, currently an
5409 alias for $CGI::POST_MAX, which determines the
5410 max size for a file upload in bytes.
5411
5412 +SessionQueryParse only auto parses session-ids
5413 into links when a session-id COOKIE is NOT found.
5414 This feature is only enabled then when a user has
5415 disabled cookies, so the runtime penalty of this
5416 feature won't drag down the whole site, since most
5417 users will have cookies turned on.
5418
5419 -StatINC & StatINCMatch will not undef Fnctl.pm flock
5420 functions constants like O_RDWR, because the code references
5421 are not well trackable. This would result in sporadic 500 server
5422 errors when a changed module was reloaded that imported O_* flock
5423 functions from Fnctl.
5424
5425 +SessionQueryParse & SessionQueryParseMatch
5426 settings that enable auto parsing session ids into
5427 URLs for cookieless sessions. Will pick up URLs in
5428 <a href>, <area href>, <form action>, <frame src>,
5429 <iframe src>, <img src>, <input src>, <link href>
5430 $Response->Redirect($URL) and the first URL in
5431 script tags like <script>*.location.href=$URL</script>
5432
5433 These settings require that buffering be enabled, as
5434 Apache::ASP will parse through the buffer to parse the URLs.
5435
5436 With SessionQueryParse on, it will just parse non-absolute
5437 URLs, but with SessionQueryParseMatch set to some server
5438 url regexp, like ^http://localhost , will also parse
5439 in the session id for URLs that match that.
5440
5441 When testing, the performance hit from this parsing
5442 a script dropped from 12.5 hits/sec on my WinNT box
5443 to 11.7 hits per second for 1K of buffered output.
5444 The difference is .007 of my PII300's processing power
5445 per second.
5446
5447 For 10K of output then, my guess is that this speed
5448 of script, would be slowed to 6.8 hits per second.
5449 This kind of performance hit would also slow a
5450 script running at 40 hits per second on a UNIX box
5451 to 31 hits/sec for 1K, and to 11 hits/sec for 10K parsed.
5452
5453 Your mileage may vary and you will have to test the difference
5454 yourself. Get yourself a valid URL with a session-id in
5455 it, and run it through ab, or Socrates, with SessionQuery
5456 turned on, and then with SessionQueryParse set to see
5457 the difference. SessionQuery just enables of session id
5458 setting from the query string but will not auto parse urls.
5459
5460 -If buffering, Content-Length will again be set.
5461 It broke, probably while I was tuning in the past
5462 couple versions.
5463
5464 +UseStrict setting compiles all scripts including
5465 global.asa with "use strict" turned on for catching
5466 more coding errors. With this setting enabled,
5467 use strict errors die during compilation forcing
5468 Apache::ASP to try to recompile the script until
5469 successful.
5470
5471 -Object use in includes like $Response->Write()
5472 no longer error with "use strict" programming.
5473
5474 +SessionQuery config setting with $Server->URL($url, { %params } )
5475 alpha API extensions to enable cookieless sessions.
5476
5477 +Debugging not longer produces internal debugging
5478 by default. Set to -1,-2 for internal debugging
5479 for Debug settings 1 & 2.
5480
5481 +Both StateSerializer & StateDB can be changed
5482 without affecting a live web site, by storing
5483 the configurations for $Application & $Session
5484 in an internal database, so that if $Session was
5485 created with SDBM_File for the StateDB (default),
5486 it will keep this StateDB setting until it ends.
5487
5488 +StateSerializer config setting. Default Data::Dumper,
5489 can also be set to Storable. Controls how data is
5490 serialized before writing to $Application & $Session.
5491
5492 +Beefed up the make test suite.
5493
5494 +Improved the locking, streamlining a bit of the
5495 $Application / $Session setup process. Bench is up to
5496 22 from 21 hits / sec on dev NT box.
5497
5498 +Cut more fat for faster startup, now on my dev box
5499 I get 44 hits per sec Apache::ASP vs. 48 Embperl
5500 vs. 52 CGI via Apache::Registry for the HelloWorld Scripts.
5501
5502 -Improved linking for the online site documentation,
5503 where a few links before were bad.
54925504
54935505 $VERSION = 0.17; $DATE="11/15/99";
5494 ++20%+ faster startup script execution, as measured by the
5495 HelloWorld bench. I cut a lot of the fat out of
5496 the code, and is now at least 20% faster on startup
5497 both with and without state.
5498
5499 On my dev (NT, apache 1.3.6+mod_perl) machine, I now get:
5500
5501 42 hits per sec on Apache::ASP HelloWorld bench
5502 46 hits per sec on Embperl (1.2b10) and
5503 51 hits per sec for CGI Apache::Registry scripts
5504
5505 Before Apache::ASP was clocking some 31 hits per sec.
5506 Apache::ASP also went from 75 to 102 hits per second
5507 on Solaris.
5508
5509 +PerlTaintCheck On friendly. This is mod_perl's way
5510 of providing -T taint checking. When Apache::ASP
5511 is used with state objects like $Session or $Application,
5512 MLDBM must also be made taint friendly with:
5513
5514 $MLDBM::RemoveTaint = 1;
5515
5516 which could be put in the global.asa. Documented.
5517
5518 +Added $Response->ErrorDocument($error_code, $uri_or_string)
5519 API extension which allows for setting of Apache's error
5520 document at runtime. This is really just a wrapper
5521 for Apache->custom_response() renamed so it syncs with
5522 the Apache ErrorDocument config setting. Updated
5523 documentation, and added error_document.htm example.
5524
5525 =OrderCollections setting was added, but then REMOVED
5526 because it was not going to be used. It bound
5527 $Request->* collections/hashes to Tie::IxHash, so that data
5528 in those collections would be read in the order the
5529 browser sent it, when eaching through or with keys.
5530
5531 -global.asa will be reloaded when changed. This broke
5532 when I optimized the modification times with (stat($file))[9]
5533 rather than "use File::stat; stat($file)->mtime"
5534
5535 -Make Apache::ASP->Loader() PerlRestartHandler safe,
5536 had some unstrict code that was doing the wrong thing.
5537
5538 -IncludesDir config now works with DynamicIncludes.
5539
5540 +DebugBufferLength feature added, giving control to
5541 how much buffered output gets shown when debugging errors.
5542
5543 ++Tuning of $Response->Write(), which processes all
5544 static html internally, to be almost 50% faster for
5545 its typical use, when BufferingOn is enabled, and
5546 CgiHeaders are disabled, both being defaults.
5547
5548 This can show significant speed improvements for tight
5549 loops that render ASP output.
5550
5551 +Auto linking of ./site/eg/ text to example scripts
5552 at web site.
5553
5554 +$Application->GetSession($session_id) API extension, useful
5555 for managing active user sessions when storing session ids
5556 in $Application. Documented.
5557
5558 -disable use of flock() on Win95/98 where it is unimplemented
5559
5560 -@array context of $Request->Form('name') returns
5561 undef when value for 'name' is undefined. Put extra
5562 logic in there to make sure this happens.
5506 ++20%+ faster startup script execution, as measured by the
5507 HelloWorld bench. I cut a lot of the fat out of
5508 the code, and is now at least 20% faster on startup
5509 both with and without state.
5510
5511 On my dev (NT, apache 1.3.6+mod_perl) machine, I now get:
5512
5513 42 hits per sec on Apache::ASP HelloWorld bench
5514 46 hits per sec on Embperl (1.2b10) and
5515 51 hits per sec for CGI Apache::Registry scripts
5516
5517 Before Apache::ASP was clocking some 31 hits per sec.
5518 Apache::ASP also went from 75 to 102 hits per second
5519 on Solaris.
5520
5521 +PerlTaintCheck On friendly. This is mod_perl's way
5522 of providing -T taint checking. When Apache::ASP
5523 is used with state objects like $Session or $Application,
5524 MLDBM must also be made taint friendly with:
5525
5526 $MLDBM::RemoveTaint = 1;
5527
5528 which could be put in the global.asa. Documented.
5529
5530 +Added $Response->ErrorDocument($error_code, $uri_or_string)
5531 API extension which allows for setting of Apache's error
5532 document at runtime. This is really just a wrapper
5533 for Apache->custom_response() renamed so it syncs with
5534 the Apache ErrorDocument config setting. Updated
5535 documentation, and added error_document.htm example.
5536
5537 =OrderCollections setting was added, but then REMOVED
5538 because it was not going to be used. It bound
5539 $Request->* collections/hashes to Tie::IxHash, so that data
5540 in those collections would be read in the order the
5541 browser sent it, when eaching through or with keys.
5542
5543 -global.asa will be reloaded when changed. This broke
5544 when I optimized the modification times with (stat($file))[9]
5545 rather than "use File::stat; stat($file)->mtime"
5546
5547 -Make Apache::ASP->Loader() PerlRestartHandler safe,
5548 had some unstrict code that was doing the wrong thing.
5549
5550 -IncludesDir config now works with DynamicIncludes.
5551
5552 +DebugBufferLength feature added, giving control to
5553 how much buffered output gets shown when debugging errors.
5554
5555 ++Tuning of $Response->Write(), which processes all
5556 static html internally, to be almost 50% faster for
5557 its typical use, when BufferingOn is enabled, and
5558 CgiHeaders are disabled, both being defaults.
5559
5560 This can show significant speed improvements for tight
5561 loops that render ASP output.
5562
5563 +Auto linking of ./site/eg/ text to example scripts
5564 at web site.
5565
5566 +$Application->GetSession($session_id) API extension, useful
5567 for managing active user sessions when storing session ids
5568 in $Application. Documented.
5569
5570 -disable use of flock() on Win95/98 where it is unimplemented
5571
5572 -@array context of $Request->Form('name') returns
5573 undef when value for 'name' is undefined. Put extra
5574 logic in there to make sure this happens.
55635575
55645576 $VERSION = 0.16; $DATE="09/22/99";
5565 -$Response->{Buffer} and PerlSetVar BufferingOn
5566 configs now work when set to 0, to unbuffer output,
5567 and send it out to the web client as the script generates it.
5568
5569 Buffering is enabled by default, as it is faster, and
5570 allows a script to error cleanly in the middle of execution.
5571
5572 +more bullet proof loading of Apache::Symbol, changed the
5573 way Apache::ASP loads modules in general. It used to
5574 check for the module to load every time, if it hadn't loaded
5575 successfully before, but now it just tries once per httpd,
5576 so the web server will have to be restarted to see new installed
5577 modules. This is just for modules that Apache::ASP relies on.
5578
5579 Old modules that are changed or updated with an installation
5580 are still reloaded with the StatINC settings if so configured.
5581
5582 +ASP web site wraps <font face="courier new"> around <pre>
5583 tags now to override the other font used for the text
5584 areas. The spacing was all weird in Netscape before
5585 for <pre> sections.
5586
5587 -Fixed Content-Length calculation when using the Clean
5588 option, so that the length is calculated after the HTML
5589 is clean, not before. This would cause a browser to
5590 hang sometimes.
5591
5592 +Added IncludesDir config option that if set will also be
5593 used to check for includes, so that includes may easily be
5594 shared between applications. By default only Global and
5595 the directory the script is in are checked for includes.
5596
5597 Also added IncludesDir as a possible configuration option
5598 for Apache::ASP->Loader()
5599
5600 -Re-enabled the Application_OnStart & OnEnd events, after
5601 breaking them when implementing the AllowApplicationState
5602 config setting.
5603
5604 +Better pre-fork caching ... StatINC & StatINCMatch are now
5605 args for Apache::ASP->Loader(), so StatINC symbols loading
5606 may be done pre-fork and shared between httpds. This lowers
5607 the child httpd init cost of StatINC. Documented.
5608
5609 +Made Apache::ASP Basic Authorization friendly so authentication
5610 can be handled by ASP scripts. If AuthName and AuthType Apache
5611 config directives are set, and a $Response->{Status} is set to
5612 401, a user will be prompted for username/password authentication
5613 and the entered data will show up in ServerVariables as:
5614 $env = $Request->ServerVariables
5615 $env->{REMOTE_USER} = $env->{AUTH_USER} = username
5616 $env->{AUTH_PASSWD} = password
5617 $env->{AUTH_NAME} = your realm
5618 $env->{AUTH_TYPE} = 'Basic'
5619
5620 This is the same place to find auth data as if Apache had some
5621 authentication handler deal with the auth phase separately.
5622
5623 -MailErrorsTo should report the right file now that generates
5624 the error.
5577 -$Response->{Buffer} and PerlSetVar BufferingOn
5578 configs now work when set to 0, to unbuffer output,
5579 and send it out to the web client as the script generates it.
5580
5581 Buffering is enabled by default, as it is faster, and
5582 allows a script to error cleanly in the middle of execution.
5583
5584 +more bullet proof loading of Apache::Symbol, changed the
5585 way Apache::ASP loads modules in general. It used to
5586 check for the module to load every time, if it hadn't loaded
5587 successfully before, but now it just tries once per httpd,
5588 so the web server will have to be restarted to see new installed
5589 modules. This is just for modules that Apache::ASP relies on.
5590
5591 Old modules that are changed or updated with an installation
5592 are still reloaded with the StatINC settings if so configured.
5593
5594 +ASP web site wraps <font face="courier new"> around <pre>
5595 tags now to override the other font used for the text
5596 areas. The spacing was all weird in Netscape before
5597 for <pre> sections.
5598
5599 -Fixed Content-Length calculation when using the Clean
5600 option, so that the length is calculated after the HTML
5601 is clean, not before. This would cause a browser to
5602 hang sometimes.
5603
5604 +Added IncludesDir config option that if set will also be
5605 used to check for includes, so that includes may easily be
5606 shared between applications. By default only Global and
5607 the directory the script is in are checked for includes.
5608
5609 Also added IncludesDir as a possible configuration option
5610 for Apache::ASP->Loader()
5611
5612 -Re-enabled the Application_OnStart & OnEnd events, after
5613 breaking them when implementing the AllowApplicationState
5614 config setting.
5615
5616 +Better pre-fork caching ... StatINC & StatINCMatch are now
5617 args for Apache::ASP->Loader(), so StatINC symbols loading
5618 may be done pre-fork and shared between httpds. This lowers
5619 the child httpd init cost of StatINC. Documented.
5620
5621 +Made Apache::ASP Basic Authorization friendly so authentication
5622 can be handled by ASP scripts. If AuthName and AuthType Apache
5623 config directives are set, and a $Response->{Status} is set to
5624 401, a user will be prompted for username/password authentication
5625 and the entered data will show up in ServerVariables as:
5626 $env = $Request->ServerVariables
5627 $env->{REMOTE_USER} = $env->{AUTH_USER} = username
5628 $env->{AUTH_PASSWD} = password
5629 $env->{AUTH_NAME} = your realm
5630 $env->{AUTH_TYPE} = 'Basic'
5631
5632 This is the same place to find auth data as if Apache had some
5633 authentication handler deal with the auth phase separately.
5634
5635 -MailErrorsTo should report the right file now that generates
5636 the error.
56255637
56265638 $VERSION = 0.15; $DATE="08/24/1999";
5627 --State databases like $Session, $Application are
5628 now tied/untied to every lock/unlock triggered by read/write
5629 access. This was necessary for correctness issues, so that
5630 database file handles are flushed appropriately between writes
5631 in a highly concurrent multi-process environment.
5632
5633 This problem raised its ugly head because under high volume,
5634 a DB_File can become corrupt if not flushed correctly.
5635 Unfortunately, there is no way to flush SDBM_Files & DB_Files
5636 consistently other than to tie/untie the databases every access.
5637
5638 DB_File may be used optionally for StateDB, but the default is
5639 to use SDBM_File which is much faster, but limited to 1024 byte
5640 key/value pairs.
5641
5642 For SDBM_Files before, if there were too many concurrent
5643 writes to a shared database like $Application, some of the
5644 writes would not be saved because another process
5645 might overwrite the changes with its own.
5646
5647 There is now a 10 fold performance DECREASE associated
5648 with reading from and writing to files like $Session
5649 and $Application. With rough benchmarks I can get about
5650 100 increments (++) now per second to $Session->{count}, where
5651 before I could get 1000 increments / second.
5652
5653 You can improve this if you have many reads / writes happening
5654 at the same time, by placing locking code around the group like
5639 --State databases like $Session, $Application are
5640 now tied/untied to every lock/unlock triggered by read/write
5641 access. This was necessary for correctness issues, so that
5642 database file handles are flushed appropriately between writes
5643 in a highly concurrent multi-process environment.
5644
5645 This problem raised its ugly head because under high volume,
5646 a DB_File can become corrupt if not flushed correctly.
5647 Unfortunately, there is no way to flush SDBM_Files & DB_Files
5648 consistently other than to tie/untie the databases every access.
5649
5650 DB_File may be used optionally for StateDB, but the default is
5651 to use SDBM_File which is much faster, but limited to 1024 byte
5652 key/value pairs.
5653
5654 For SDBM_Files before, if there were too many concurrent
5655 writes to a shared database like $Application, some of the
5656 writes would not be saved because another process
5657 might overwrite the changes with its own.
5658
5659 There is now a 10 fold performance DECREASE associated
5660 with reading from and writing to files like $Session
5661 and $Application. With rough benchmarks I can get about
5662 100 increments (++) now per second to $Session->{count}, where
5663 before I could get 1000 increments / second.
5664
5665 You can improve this if you have many reads / writes happening
5666 at the same time, by placing locking code around the group like
56555667
5656 $Session->Lock();
5657 $Session->{count}++;
5658 $Session->{count}++;
5659 $Session->{count}++;
5660 $Session->UnLock();
5661
5662 This method will reduce the number of ties to the $Session database
5663 from 6 to 1 for this kind of code, and will improve the performance
5664 dramatically.
5665
5666 Also, instead of using explicit $Session locking, you can
5667 create an automatic lock on $Session per script by setting
5668 SessionSerialize in your config to 1. The danger here is
5669 if you have any long running scripts, the user will have
5670 to wait for it to finish before another script can be run.
5671
5672 To see the number of lock/unlocks or ties/unties to each database
5673 during a script execution, look at the last lines of debug output
5674 to your error log when Debug is set to 1. This can help you
5675 performance tweak access to these databases.
5676
5677 +Updated documentation with new config settings and
5678 API extensions.
5679
5680 +Added AllowApplicationState config option which allows
5681 you to leave $Application undefined, and will not
5682 execute Application_OnStart or Application_OnEnd.
5683 This can be a slight performance increase of 2-3% if
5684 you are not using $Application, but are using $Session.
5685
5686 +Added $Session->Lock() / $Session->UnLock() API routines
5687 necessary additions since access to session is not
5688 serialized by default like IIS ASP. Also prompted
5689 by change in locking code which retied to SDBM_File
5690 or DB_File each lock. If you $Session->Lock / UnLock
5691 around many read/writes, you will increase performance.
5692
5693 +Added StateCache config which, if set will cache
5694 the file handle locks for $Application and an internal
5695 database used for tracking $Session info. This caching can
5696 make an ASP application perform up to 10% faster,
5697 at a cost of each web server process holding 2 more
5698 cached file handles open, per ASP application using
5699 this configuration. The data written to or read from
5700 these state databases is not cached, just the locking
5701 file handles are held open.
5702
5703 -Added in much more locking in session manager
5704 and session garbage collector to help avoid collisions
5705 between the two. There were definite windows that the
5706 two would collide in, during which bad things could
5707 happen on a high volume site.
5708
5709 -Fixed some warnings in DESTROY and ParseParams()
5668 $Session->Lock();
5669 $Session->{count}++;
5670 $Session->{count}++;
5671 $Session->{count}++;
5672 $Session->UnLock();
5673
5674 This method will reduce the number of ties to the $Session database
5675 from 6 to 1 for this kind of code, and will improve the performance
5676 dramatically.
5677
5678 Also, instead of using explicit $Session locking, you can
5679 create an automatic lock on $Session per script by setting
5680 SessionSerialize in your config to 1. The danger here is
5681 if you have any long running scripts, the user will have
5682 to wait for it to finish before another script can be run.
5683
5684 To see the number of lock/unlocks or ties/unties to each database
5685 during a script execution, look at the last lines of debug output
5686 to your error log when Debug is set to 1. This can help you
5687 performance tweak access to these databases.
5688
5689 +Updated documentation with new config settings and
5690 API extensions.
5691
5692 +Added AllowApplicationState config option which allows
5693 you to leave $Application undefined, and will not
5694 execute Application_OnStart or Application_OnEnd.
5695 This can be a slight performance increase of 2-3% if
5696 you are not using $Application, but are using $Session.
5697
5698 +Added $Session->Lock() / $Session->UnLock() API routines
5699 necessary additions since access to session is not
5700 serialized by default like IIS ASP. Also prompted
5701 by change in locking code which retied to SDBM_File
5702 or DB_File each lock. If you $Session->Lock / UnLock
5703 around many read/writes, you will increase performance.
5704
5705 +Added StateCache config which, if set will cache
5706 the file handle locks for $Application and an internal
5707 database used for tracking $Session info. This caching can
5708 make an ASP application perform up to 10% faster,
5709 at a cost of each web server process holding 2 more
5710 cached file handles open, per ASP application using
5711 this configuration. The data written to or read from
5712 these state databases is not cached, just the locking
5713 file handles are held open.
5714
5715 -Added in much more locking in session manager
5716 and session garbage collector to help avoid collisions
5717 between the two. There were definite windows that the
5718 two would collide in, during which bad things could
5719 happen on a high volume site.
5720
5721 -Fixed some warnings in DESTROY and ParseParams()
57105722
57115723 $VERSION = 0.14; $DATE="07/29/1999";
5712 -CGI & StatINC or StatINCMatch would have bad results
5713 at times, with StatINC deleting dynamically compiled
5714 CGI subroutines, that were imported into other scripts
5715 and modules namespaces.
5716
5717 A couple tweaks, and now StatINC & CGI play nice again ;)
5718 StatINCMatch should be safe to use in production with CGI.
5719 This affects in particular environments that use file upload,
5720 since CGI is loaded automatically by Apache::ASP to handle
5721 file uploads.
5722
5723 This fix should also affect other seemingly random
5724 times when StatINC or StatINCMatch don't seem to do
5725 the right thing.
5726
5727 +use of ASP objects like $Response are now "use strict"
5728 safe in scripts, while UniquePackages config is set.
5729
5730 +Better handling of "use strict" errors in ASP scripts.
5731 The error is detected, and the developer is pointed to the
5732 Apache error log for the exact error.
5733
5734 The script with "use strict" errors will be recompiled again. Its seems
5735 though that "use strict" will only throw its error once, so that a script
5736 can be recompiled with the same errors, and work w/o any use strict
5737 error messaging.
5724 -CGI & StatINC or StatINCMatch would have bad results
5725 at times, with StatINC deleting dynamically compiled
5726 CGI subroutines, that were imported into other scripts
5727 and modules namespaces.
5728
5729 A couple tweaks, and now StatINC & CGI play nice again ;)
5730 StatINCMatch should be safe to use in production with CGI.
5731 This affects in particular environments that use file upload,
5732 since CGI is loaded automatically by Apache::ASP to handle
5733 file uploads.
5734
5735 This fix should also affect other seemingly random
5736 times when StatINC or StatINCMatch don't seem to do
5737 the right thing.
5738
5739 +use of ASP objects like $Response are now "use strict"
5740 safe in scripts, while UniquePackages config is set.
5741
5742 +Better handling of "use strict" errors in ASP scripts.
5743 The error is detected, and the developer is pointed to the
5744 Apache error log for the exact error.
5745
5746 The script with "use strict" errors will be recompiled again. Its seems
5747 though that "use strict" will only throw its error once, so that a script
5748 can be recompiled with the same errors, and work w/o any use strict
5749 error messaging.
57385750
57395751 $VERSION = 0.12; $DATE="07/01/1999";
5740 -Compiles are now 10 +times faster for scripts with lots of big
5741 embedded perl blocks <% #perl %>
5742
5743 Compiles were slow because of an old PerlScript compatibility
5744 parsing trick where $Request->QueryString('hi')->{item}
5745 would be parsed to $Request->QueryString('hi') which works.
5746 I think the regexp that I was using had O(n^2) characteristics
5747 and it took a really big perl block to 10 +seconds to parse
5748 to understand there was a problem :(
5749
5750 I doubt anyone needed this compatibility, I don't even see
5751 any code that looks like this in the online PerlScript examples,
5752 so I've commented out this parsing trick for now. If you
5753 need me to bring back this functionality, it will be in the
5754 form of a config setting.
5755
5756 For information on PerlScript compatibility, see the PerlScript
5757 section in the ASP docs.
5758
5759 -Added UniquePackages config option, that if set brings back
5760 the old method of compiling each ASP script into its own
5761 separate package. As of v.10, scripts are compiled by default
5762 into the same package, so that scripts, dynamic includes & global.asa
5763 can share globals. This BROKE scripts in the same ASP Application
5764 that defined the same sub routines, as their subs would redefine
5765 each other.
5766
5767 UniquePackages has scripts compiled into separate perl packages,
5768 so they may define subs with the same name, w/o fear of overlap.
5769 Under this settings, scripts will not be able to share globals.
5770
5771 -Secure field for cookies in $Response->Cookies() must be TRUE to
5772 force cookie to be secure. Before, it just had to be defined,
5773 which gave wrong behavior for Secure => 0.
5774
5775 +$Response->{IsClientConnected} set to one by default. Will
5776 work out a real value when I upgrade to apache 1.3.6. This
5777 value has no meaning before, as apache aborts the perl code
5778 when a client drops its connection in earlier versions.
5779
5780 +better compile time debugging of dynamic includes, with
5781 Debug 2 setting
5782
5783 +"use strict" friendly handling of compiling dynamic includes
5784 with errors
5752 -Compiles are now 10 +times faster for scripts with lots of big
5753 embedded perl blocks <% #perl %>
5754
5755 Compiles were slow because of an old PerlScript compatibility
5756 parsing trick where $Request->QueryString('hi')->{item}
5757 would be parsed to $Request->QueryString('hi') which works.
5758 I think the regexp that I was using had O(n^2) characteristics
5759 and it took a really big perl block to 10 +seconds to parse
5760 to understand there was a problem :(
5761
5762 I doubt anyone needed this compatibility, I don't even see
5763 any code that looks like this in the online PerlScript examples,
5764 so I've commented out this parsing trick for now. If you
5765 need me to bring back this functionality, it will be in the
5766 form of a config setting.
5767
5768 For information on PerlScript compatibility, see the PerlScript
5769 section in the ASP docs.
5770
5771 -Added UniquePackages config option, that if set brings back
5772 the old method of compiling each ASP script into its own
5773 separate package. As of v.10, scripts are compiled by default
5774 into the same package, so that scripts, dynamic includes & global.asa
5775 can share globals. This BROKE scripts in the same ASP Application
5776 that defined the same sub routines, as their subs would redefine
5777 each other.
5778
5779 UniquePackages has scripts compiled into separate perl packages,
5780 so they may define subs with the same name, w/o fear of overlap.
5781 Under this settings, scripts will not be able to share globals.
5782
5783 -Secure field for cookies in $Response->Cookies() must be TRUE to
5784 force cookie to be secure. Before, it just had to be defined,
5785 which gave wrong behavior for Secure => 0.
5786
5787 +$Response->{IsClientConnected} set to one by default. Will
5788 work out a real value when I upgrade to apache 1.3.6. This
5789 value has no meaning before, as apache aborts the perl code
5790 when a client drops its connection in earlier versions.
5791
5792 +better compile time debugging of dynamic includes, with
5793 Debug 2 setting
5794
5795 +"use strict" friendly handling of compiling dynamic includes
5796 with errors
57855797
57865798 $VERSION = 0.11; $DATE="06/24/1999";
5787 +Lots of documentation updates
5788
5789 +The MailHost config option is the smtp server used for
5790 relay emails for the Mail* config options.
5791
5792 +MailAlertTo config option used for sending a short administrative
5793 alert for an internal ASP error, server code 500. This is the
5794 compliment to MailErrorsTo, but is suited for sending a to a
5795 small text based pager. The email sent by MailErrorsTo would
5796 then be checked by the web admin for quick response & debugging
5797 for the incident.
5798
5799 The MailAlertPeriod config specifies the time in minutes during
5800 which only one alert will be sent, which defaults to 20.
5801
5802 +MailErrorsTo config options sends the results of a 500 error
5803 to the email address specified as if Debug were set to 2.
5804 If Debug 2 is set, this config will not be on, as it is
5805 for production use only. Debug settings less than 2 only
5806 log errors to the apache server error log.
5807
5808 -StatINCMatch / StatINC can be used in production and work
5809 even after a server graceful restart, which is essential for
5810 a production server.
5811
5812 -Content-Length header is set again, if BufferingOn is set, and
5813 haven't $Response->Flush()'d. This broke when I introduce
5814 the Script_OnEnd event handler.
5815
5816 +Optimized reloading of the GlobalPackage perl module upon changes,
5817 so that scripts and dynamic includes don't have to be recompiled.
5818 The global.asa will still have to be though. Since we started
5819 compiling all routines into a package that can be named with
5820 GlobalPackage, we've been undeffing compiled scripts and includes
5821 when the real GlobalPackage changed on disk, as we do a full sweep
5822 through the namespace. Now, we skip those subs that we know to
5823 be includes or scripts.
5824
5825 -Using Apache::Symbol::undef() to undefine precompiled scripts
5826 and includes when reloading those scripts. Doing just an undef()
5827 would sometimes result in an "active subroutine undef" error.
5828 This bug came out when I started thrashing the StatINC system
5829 for production use.
5830
5831 +StatINCMatch setting created for production use reloading of
5832 perl modules. StatINCMatch allows StatINC reloading of a
5833 subset of all the modules defined in %INC, those that match
5834 $module =~ /$StatINCMatch/, where module is some module name
5835 like Class/Struct.pm
5836
5837 +Reoptimized pod comment parsing. I slowed it down to sync
5838 lines numbers in the last version, but found another corner I could cut.
5799 +Lots of documentation updates
5800
5801 +The MailHost config option is the smtp server used for
5802 relay emails for the Mail* config options.
5803
5804 +MailAlertTo config option used for sending a short administrative
5805 alert for an internal ASP error, server code 500. This is the
5806 compliment to MailErrorsTo, but is suited for sending a to a
5807 small text based pager. The email sent by MailErrorsTo would
5808 then be checked by the web admin for quick response & debugging
5809 for the incident.
5810
5811 The MailAlertPeriod config specifies the time in minutes during
5812 which only one alert will be sent, which defaults to 20.
5813
5814 +MailErrorsTo config options sends the results of a 500 error
5815 to the email address specified as if Debug were set to 2.
5816 If Debug 2 is set, this config will not be on, as it is
5817 for production use only. Debug settings less than 2 only
5818 log errors to the apache server error log.
5819
5820 -StatINCMatch / StatINC can be used in production and work
5821 even after a server graceful restart, which is essential for
5822 a production server.
5823
5824 -Content-Length header is set again, if BufferingOn is set, and
5825 haven't $Response->Flush()'d. This broke when I introduce
5826 the Script_OnEnd event handler.
5827
5828 +Optimized reloading of the GlobalPackage perl module upon changes,
5829 so that scripts and dynamic includes don't have to be recompiled.
5830 The global.asa will still have to be though. Since we started
5831 compiling all routines into a package that can be named with
5832 GlobalPackage, we've been undeffing compiled scripts and includes
5833 when the real GlobalPackage changed on disk, as we do a full sweep
5834 through the namespace. Now, we skip those subs that we know to
5835 be includes or scripts.
5836
5837 -Using Apache::Symbol::undef() to undefine precompiled scripts
5838 and includes when reloading those scripts. Doing just an undef()
5839 would sometimes result in an "active subroutine undef" error.
5840 This bug came out when I started thrashing the StatINC system
5841 for production use.
5842
5843 +StatINCMatch setting created for production use reloading of
5844 perl modules. StatINCMatch allows StatINC reloading of a
5845 subset of all the modules defined in %INC, those that match
5846 $module =~ /$StatINCMatch/, where module is some module name
5847 like Class/Struct.pm
5848
5849 +Reoptimized pod comment parsing. I slowed it down to sync
5850 lines numbers in the last version, but found another corner I could cut.
58395851
58405852 $VERSION = 0.10; $DATE="05/24/1999";
5841 += improvement; - = bug fix
5842
5843 +Added index.html file to ./eg to help people wade through
5844 the examples. This one has been long overdue.
5845
5846 +Clean config option, or setting $Response->{Clean} to 1 - 9,
5847 uses HTML::Clean to compress text/html output of ASP scripts.
5848 I like the Clean 1 setting which is lightweight, stripping
5849 white space for about 10% compression, at a cost of less than
5850 a 5% performance penalty.
5851
5852 +Using pod style commenting no longer confuses the line
5853 numbering. ASP script line numbers are almost exactly match
5854 their compiled perl version, except that normal inline includes
5855 (not dynamic) insert extra text which can confuse line numbering.
5856 If you want perl error line numbers to entirely sync with your
5857 ASP scripts, I would suggest learning how to use dynamic includes,
5858 as opposed to inline includes.
5859
5860 -Wrapped StatINC reloading of libs in an eval, and capturing
5861 error for Debug 2 setting. This makes changing libs with StatINC
5862 on a little more friendly when there are errors.
5863
5864 -$Request->QueryString() now stores multiple values for the
5865 same key, just as $Request->Form() has since v.07. In
5866 wantarray() context like @vals = $Request->QueryString('dupkey'),
5867 @vals will store whatever values where associated with dupkey
5868 in the query string like (1,2) from: ?dupkey=1&dupkey=2
5869
5870 +The GlobalPackage config directive may be defined
5871 to explicitly set the perl module that all scripts and global.asa
5872 are compiled into.
5873
5874 -Dynamic includes may be in the Global directory, just like
5875 normal includes.
5876
5877 +Perl script generated from asp scripts should match line
5878 for line, seen in errors, except when using inline (default)
5879 includes, pod comments, or <% #comment %> perl comments, which
5880 will throw off the line counts by adding text, removing
5881 text, or having an extra newline added, respectively.
5882
5883 -Script_OnEnd may now send output to the browser. Before
5884 $main::Response->End() was being called at the end of the
5885 main script preventing further output.
5886
5887 ++All scripts are compiled as routines in a namespace uniquely defined by
5888 the global.asa of the ASP application. Thus, scripts, includes, and
5889 global.asa routines will share all globals defined in the global.asa
5890 namespace. This means that globals between scripts will be shared, and
5891 globals defined in a global.asa will be available to scripts.
5892
5893 Scripts used to have their own namespace, thus globals
5894 were not shared between them.
5895
5896 +a -o $output_dir switch on the ./cgi/asp script allows
5897 it to execute scripts and write their output to an output
5898 directory. Useful for building static html sites, based on
5899 asp scripts. An example use would be:
5900
5901 asp -b -o out *.asp
5902
5903 Without an output directory, script output is written to STDOUT
5853 += improvement; - = bug fix
5854
5855 +Added index.html file to ./eg to help people wade through
5856 the examples. This one has been long overdue.
5857
5858 +Clean config option, or setting $Response->{Clean} to 1 - 9,
5859 uses HTML::Clean to compress text/html output of ASP scripts.
5860 I like the Clean 1 setting which is lightweight, stripping
5861 white space for about 10% compression, at a cost of less than
5862 a 5% performance penalty.
5863
5864 +Using pod style commenting no longer confuses the line
5865 numbering. ASP script line numbers are almost exactly match
5866 their compiled perl version, except that normal inline includes
5867 (not dynamic) insert extra text which can confuse line numbering.
5868 If you want perl error line numbers to entirely sync with your
5869 ASP scripts, I would suggest learning how to use dynamic includes,
5870 as opposed to inline includes.
5871
5872 -Wrapped StatINC reloading of libs in an eval, and capturing
5873 error for Debug 2 setting. This makes changing libs with StatINC
5874 on a little more friendly when there are errors.
5875
5876 -$Request->QueryString() now stores multiple values for the
5877 same key, just as $Request->Form() has since v.07. In
5878 wantarray() context like @vals = $Request->QueryString('dupkey'),
5879 @vals will store whatever values where associated with dupkey
5880 in the query string like (1,2) from: ?dupkey=1&dupkey=2
5881
5882 +The GlobalPackage config directive may be defined
5883 to explicitly set the perl module that all scripts and global.asa
5884 are compiled into.
5885
5886 -Dynamic includes may be in the Global directory, just like
5887 normal includes.
5888
5889 +Perl script generated from asp scripts should match line
5890 for line, seen in errors, except when using inline (default)
5891 includes, pod comments, or <% #comment %> perl comments, which
5892 will throw off the line counts by adding text, removing
5893 text, or having an extra newline added, respectively.
5894
5895 -Script_OnEnd may now send output to the browser. Before
5896 $main::Response->End() was being called at the end of the
5897 main script preventing further output.
5898
5899 ++All scripts are compiled as routines in a namespace uniquely defined
5900 by the global.asa of the ASP application. Thus, scripts, includes, and
5901 global.asa routines will share all globals defined in the global.asa
5902 namespace. This means that globals between scripts will be shared, and
5903 globals defined in a global.asa will be available to scripts.
5904
5905 Scripts used to have their own namespace, thus globals
5906 were not shared between them.
5907
5908 +a -o $output_dir switch on the ./cgi/asp script allows
5909 it to execute scripts and write their output to an output
5910 directory. Useful for building static html sites, based on
5911 asp scripts. An example use would be:
5912
5913 asp -b -o out *.asp
5914
5915 Without an output directory, script output is written to STDOUT
59045916
59055917 $VERSION = 0.09; $DATE="04/22/1999";
5906 +Updated Makefile.PL optional modules output for CGI & DB_File
5907
5908 +Improved docs on $Response->Cookies() and $Request->Cookies()
5909
5910 +Added PERFORMANCE doc to main README, and added sub section
5911 on precompiling scripts with Apache::ASP->Loader()
5912
5913 +Naming of CompileIncludes switched over to DynamicIncludes
5914 for greater clarity.
5915
5916 +Dynamic includes can now reference ASP objects like $Session
5917 w/o the $main::* syntax. These subs are no longer anonymous
5918 subs, and are now compiled into the namespace of the global.asa package.
5919
5920 +Apache::ASP->Loader() precompiles dynamic includes too. Making this work
5921 required fixing some subtle bugs / dependencies in the compiling process.
5922
5923 +Added Apache::ASP->Loader() similar to Apache::RegistryLoader for
5924 precompiling ASP scripts. Precompile a whole site at server
5925 startup with one function call.
5926
5927 +Prettied the error messaging with Debug 2.
5928
5929 +$Response->Debug(@args) debugging extension, which
5930 allows a developer to hook into the module's debugging,
5931 and only have @args be written to error_log when Debug is greater
5932 than 0.
5933
5934 -Put write locking code around State writes, like $Session
5935 and $Application. I thought I fixed this bug a while ago.
5936
5937 -API change: converted $Session->Timeout() and $Session->SessionID()
5938 methods into $Session->{Timeout} and $Session->{SessionID} properties.
5939 The use of these properties as methods is deprecated, but
5940 backwards compatibility will remain. Updated ./eg/session.asp
5941 to use these new properties.
5942
5943 +Implemented $Response->{PICS} which if set sends out a PICS-Label
5944 HTTP header, useful for ratings.
5945
5946 +Implemented $Response->{CacheControl} and $Response->{Charset} members.
5947 By default, CacheControl is 'private', and this value gets sent out
5948 every request as HTTP header Cache-Control. Charset appends itself
5949 onto the content type header.
5950
5951 +Implemented $Request->BinaryRead(), $Request->{TotalBytes},
5952 documented them, and updated ./eg/form.asp for an example usage.
5953
5954 +Implemented $Response->BinaryWrite(), documented, and created
5955 and example in ./eg/binary_write.htm
5956
5957 +Implemented $Server->MapPath() and created example of its use
5958 in ./eg/server.htm
5959
5960 -$Request->Form() now reads file uploads correctly with
5961 the latest CGI.pm, where $Request->Form('file_field') returns
5962 the actual file name uploaded, which can be used as a file handle
5963 to read in the data. Before, $Request->Form('file_field') would
5964 return a glob that looks like *Fh::filename, so to get the file
5965 name, you would have to parse it like =~ s/^\*Fh\:\://,
5966 which you no longer have to do. As long as parsing was done as
5967 mentioned, the change should be backwards compatible.
5968
5969 +Updated +enhanced documentation on file uploads. Created extra
5970 comments about it as an FAQ, and under $Response->Form(), the latter
5971 being an obvious place for a developer to look for it.
5972
5973 +Updated ./eg/file_upload.asp to show use of non file form data,
5974 with which we had a bug before.
5975
5976 +Finished retieing *STDIN to cached STDIN contents, so that
5977 CGI input routines may be used transparently, along side with
5978 use of $Request->Form()
5979
5980 +Cleaned up and optimized $Request code
5981
5982 +Updated documentation for CGI input & file uploads. Created
5983 file upload FAQ.
5984
5985 +Reworked ./eg/cgi.htm example to use CGI input routines
5986 after doing a native read of STDIN.
5987
5988 ++Added dynamic includes with <!--include file=file args=@args-->
5989 extension. This style of include is compiled as an anonymous sub &
5990 cached, and then executed with @args passed to the subroutine for
5991 execution. This is include may also be rewritten as a new API
5992 extension: $Response->Include('file', @args)
5993
5994 +Added ./eg/compiled_includes.htm example documenting new dynamic includes.
5995
5996 +Documented SSI: native file includes, and the rest with filtering
5997 to Apache::SSI
5998
5999 +Turned the documentation of Filter config to value of Off so
6000 people won't cut and paste the On config by default.
6001
6002 +Added SecureSession config option, which forces session cookie to
6003 be sent only under https secured www page requests.
6004
6005 +Added StateDB config option allows use of DB_File for $Session, since
6006 default use of SDBM_File is limited. See StateDB in README.
6007
6008 +file include syntax w/o quotes supported like <!--#include file=test.inc-->
6009
6010 +Nested includes are supported, with includes including each other.
6011 Recursive includes are detected and errors out when an include has been
6012 included 100 times for a script. Better to quit early than
6013 have a process spin out of control. (PORTABLE ? probably not)
6014
6015 +Allow <!--include file=file.inc--> notation w/o quotes around file names
6016
6017 -PerlSetEnv apache conf setting now get passed through to
6018 $Request->ServerVariables. This update has ServerVariables
6019 getting data from %ENV instead of $r->cgi_env
6020
6021 +README FAQ for PerlHandler errors
5918 +Updated Makefile.PL optional modules output for CGI & DB_File
5919
5920 +Improved docs on $Response->Cookies() and $Request->Cookies()
5921
5922 +Added PERFORMANCE doc to main README, and added sub section
5923 on precompiling scripts with Apache::ASP->Loader()
5924
5925 +Naming of CompileIncludes switched over to DynamicIncludes
5926 for greater clarity.
5927
5928 +Dynamic includes can now reference ASP objects like $Session
5929 w/o the $main::* syntax. These subs are no longer anonymous
5930 subs, and are now compiled into the namespace of the global.asa package.
5931
5932 +Apache::ASP->Loader() precompiles dynamic includes too. Making this work
5933 required fixing some subtle bugs / dependencies in the compiling process.
5934
5935 +Added Apache::ASP->Loader() similar to Apache::RegistryLoader for
5936 precompiling ASP scripts. Precompile a whole site at server
5937 startup with one function call.
5938
5939 +Prettied the error messaging with Debug 2.
5940
5941 +$Response->Debug(@args) debugging extension, which
5942 allows a developer to hook into the module's debugging,
5943 and only have @args be written to error_log when Debug is greater
5944 than 0.
5945
5946 -Put write locking code around State writes, like $Session
5947 and $Application. I thought I fixed this bug a while ago.
5948
5949 -API change: converted $Session->Timeout() and $Session->SessionID()
5950 methods into $Session->{Timeout} and $Session->{SessionID} properties.
5951 The use of these properties as methods is deprecated, but
5952 backwards compatibility will remain. Updated ./eg/session.asp
5953 to use these new properties.
5954
5955 +Implemented $Response->{PICS} which if set sends out a PICS-Label
5956 HTTP header, useful for ratings.
5957
5958 +Implemented $Response->{CacheControl} and $Response->{Charset} members.
5959 By default, CacheControl is 'private', and this value gets sent out
5960 every request as HTTP header Cache-Control. Charset appends itself
5961 onto the content type header.
5962
5963 +Implemented $Request->BinaryRead(), $Request->{TotalBytes},
5964 documented them, and updated ./eg/form.asp for an example usage.
5965
5966 +Implemented $Response->BinaryWrite(), documented, and created
5967 and example in ./eg/binary_write.htm
5968
5969 +Implemented $Server->MapPath() and created example of its use
5970 in ./eg/server.htm
5971
5972 -$Request->Form() now reads file uploads correctly with
5973 the latest CGI.pm, where $Request->Form('file_field') returns
5974 the actual file name uploaded, which can be used as a file handle
5975 to read in the data. Before, $Request->Form('file_field') would
5976 return a glob that looks like *Fh::filename, so to get the file
5977 name, you would have to parse it like =~ s/^\*Fh\:\://,
5978 which you no longer have to do. As long as parsing was done as
5979 mentioned, the change should be backwards compatible.
5980
5981 +Updated +enhanced documentation on file uploads. Created extra
5982 comments about it as an FAQ, and under $Response->Form(), the latter
5983 being an obvious place for a developer to look for it.
5984
5985 +Updated ./eg/file_upload.asp to show use of non file form data,
5986 with which we had a bug before.
5987
5988 +Finished retieing *STDIN to cached STDIN contents, so that
5989 CGI input routines may be used transparently, along side with
5990 use of $Request->Form()
5991
5992 +Cleaned up and optimized $Request code
5993
5994 +Updated documentation for CGI input & file uploads. Created
5995 file upload FAQ.
5996
5997 +Reworked ./eg/cgi.htm example to use CGI input routines
5998 after doing a native read of STDIN.
5999
6000 ++Added dynamic includes with <!--include file=file args=@args-->
6001 extension. This style of include is compiled as an anonymous sub &
6002 cached, and then executed with @args passed to the subroutine for
6003 execution. This is include may also be rewritten as a new API
6004 extension: $Response->Include('file', @args)
6005
6006 +Added ./eg/compiled_includes.htm example documenting new dynamic includes.
6007
6008 +Documented SSI: native file includes, and the rest with filtering
6009 to Apache::SSI
6010
6011 +Turned the documentation of Filter config to value of Off so
6012 people won't cut and paste the On config by default.
6013
6014 +Added SecureSession config option, which forces session cookie to
6015 be sent only under https secured www page requests.
6016
6017 +Added StateDB config option allows use of DB_File for $Session, since
6018 default use of SDBM_File is limited. See StateDB in README.
6019
6020 +file include syntax w/o quotes supported like <!--#include file=test.inc-->
6021
6022 +Nested includes are supported, with includes including each other.
6023 Recursive includes are detected and errors out when an include has been
6024 included 100 times for a script. Better to quit early than
6025 have a process spin out of control. (PORTABLE ? probably not)
6026
6027 +Allow <!--include file=file.inc--> notation w/o quotes around file names
6028
6029 -PerlSetEnv apache conf setting now get passed through to
6030 $Request->ServerVariables. This update has ServerVariables
6031 getting data from %ENV instead of $r->cgi_env
6032
6033 +README FAQ for PerlHandler errors
60226034
60236035 $VERSION = 0.08; $DATE="02/06/1999";
6024 ++SSI with Apache::Filter & Apache::SSI, see config options & ./eg files
6025 Currently filtering only works in the direction Apache::ASP -> Apache::SSI,
6026 will not work the other way around, as SSI must come last in a set of filters
6027
6028 +SSI file includes may reference files in the Global directory, better
6029 code sharing
6030
6031 - <% @array... %> no longer dropped from code.
6032
6033 +perl =pod comments are stripped from script before compiling, and associated
6034 PodComments configuration options.
6035
6036 +Command line cgi/asp script takes various options, and allows execution
6037 of multiple asp scripts at one time. This script should be used for
6038 command line debugging. This is also the beginning of building
6039 a static site from asp scripts with the -b option, suppressing headers.
6040
6041 +$Response->AddHeader('Set-Cookie') works for multiple cookies.
6042
6043 -$Response->Cookies('foo', '0') works, was dropping 0 because of boolean test
6044
6045 -Fixed up some config doc errors.
6036 ++SSI with Apache::Filter & Apache::SSI, see config options & ./eg files
6037 Currently filtering only works in the direction Apache::ASP -> Apache::SSI,
6038 will not work the other way around, as SSI must come last in a set of filters
6039
6040 +SSI file includes may reference files in the Global directory, better
6041 code sharing
6042
6043 - <% @array... %> no longer dropped from code.
6044
6045 +perl =pod comments are stripped from script before compiling, and associated
6046 PodComments configuration options.
6047
6048 +Command line cgi/asp script takes various options, and allows execution
6049 of multiple asp scripts at one time. This script should be used for
6050 command line debugging. This is also the beginning of building
6051 a static site from asp scripts with the -b option, suppressing headers.
6052
6053 +$Response->AddHeader('Set-Cookie') works for multiple cookies.
6054
6055 -$Response->Cookies('foo', '0') works, was dropping 0 because of boolean test
6056
6057 -Fixed up some config doc errors.
60466058
60476059 $VERSION = 0.07; $DATE="01/20/1999";
6048 -removed SIG{__WARN__} handler, it was a bad idea.
6049
6050 -fixes file locking on QNX, work around poor flock porting
6051
6052 +removed message about Win32::OLE on UNIX platforms from Makefile.PL
6053
6054 -Better lock garbage collection. Works with StatINC seamlessly.
6055
6056 -Multiple select forms now work in array context with $Response->Form()
6057 @values = $Response->Form('multi');
6058
6059 -Better CGI.pm compatibility with $r->header_out('Content-type'),
6060 improved garbage collection under modperl, esp. w/ file uploads
6060 -removed SIG{__WARN__} handler, it was a bad idea.
6061
6062 -fixes file locking on QNX, work around poor flock porting
6063
6064 +removed message about Win32::OLE on UNIX platforms from Makefile.PL
6065
6066 -Better lock garbage collection. Works with StatINC seamlessly.
6067
6068 -Multiple select forms now work in array context with $Response->Form()
6069 @values = $Response->Form('multi');
6070
6071 -Better CGI.pm compatibility with $r->header_out('Content-type'),
6072 improved garbage collection under modperl, esp. w/ file uploads
60616073
60626074 $VERSION = 0.06; $DATE="12/21/1998";
6063 +Application_OnStart & Application_OnEnd event handlers support.
6064
6065 -Compatible with CGI.pm 2.46 headers()
6066
6067 -Compatible with CGI.pm $q = new CGI({}), caveat: does not set params
6068
6069 +use strict; followed by use of objects like $Session is fine.
6070
6071 -Multiple cookies may be set per script execution.
6072
6073 +file upload implemented via CGI.pm
6074
6075 ++global.asa implemented with events Session_OnStart and Session_OnEnd
6076 working appropriately.
6077
6078 +StateDir configuration directive implemented.
6079 StateDir allows the session state directory to be specified separately
6080 from the Global directory, useful for operating systems with caching file
6081 systems.
6082
6083 +StateManager config directive. StateManager specifies how frequently
6084 Sessions are cleaned up, with 10 (default) meaning that old Sessions
6085 will be cleaned up 10 times per SessionTimeout period (default 20 minutes).
6086
6087 +$Application->SessionCount() implemented, non-portable method.
6088 : returns the number of currently active sessions
6089
6090 -STOP button fix. Users may hit STOP button during script
6091 execution, and Apache::ASP will cleanup with a routine registered
6092 in Apache's $r->register_cleanup. Works well supposedly.
6093
6094 +PerlScript compatibility work, trying to make ports smoother.
6095 : Collection emulator, no ->{Count} property
6096 : $.*(.*)->{Item} parsed automatically,
6097 shedding the ->{Item} for Collection support (? better way ?)
6098 : No VBScript dates support, just HTTP RFC dates with HTTP::Date
6099 : Win32::OLE::in not supported, just use "keys %{$Collection}"
6100
6101 +./cgi/asp script for testing scripts from the command line
6102 : will be upgraded to CGI method of doing asp
6103 : is not "correct" in anyway, so not documented for now
6104 but still useful
6105
6106 +strips DOS carriage returns from scripts automatically, so that
6107 programs like FrontPage can upload pages to UNIX servers
6108 without perl choking on the extra \r characters.
6075 +Application_OnStart & Application_OnEnd event handlers support.
6076
6077 -Compatible with CGI.pm 2.46 headers()
6078
6079 -Compatible with CGI.pm $q = new CGI({}), caveat: does not set params
6080
6081 +use strict; followed by use of objects like $Session is fine.
6082
6083 -Multiple cookies may be set per script execution.
6084
6085 +file upload implemented via CGI.pm
6086
6087 ++global.asa implemented with events Session_OnStart and Session_OnEnd
6088 working appropriately.
6089
6090 +StateDir configuration directive implemented.
6091 StateDir allows the session state directory to be specified separately
6092 from the Global directory, useful for operating systems with caching file
6093 systems.
6094
6095 +StateManager config directive. StateManager specifies how frequently
6096 Sessions are cleaned up, with 10 (default) meaning that old Sessions
6097 will be cleaned up 10 times per SessionTimeout period (default 20 minutes).
6098
6099 +$Application->SessionCount() implemented, non-portable method.
6100 : returns the number of currently active sessions
6101
6102 -STOP button fix. Users may hit STOP button during script
6103 execution, and Apache::ASP will cleanup with a routine registered
6104 in Apache's $r->register_cleanup. Works well supposedly.
6105
6106 +PerlScript compatibility work, trying to make ports smoother.
6107 : Collection emulator, no ->{Count} property
6108 : $.*(.*)->{Item} parsed automatically,
6109 shedding the ->{Item} for Collection support (? better way ?)
6110 : No VBScript dates support, just HTTP RFC dates with HTTP::Date
6111 : Win32::OLE::in not supported, just use "keys %{$Collection}"
6112
6113 +./cgi/asp script for testing scripts from the command line
6114 : will be upgraded to CGI method of doing asp
6115 : is not "correct" in anyway, so not documented for now
6116 but still useful
6117
6118 +strips DOS carriage returns from scripts automatically, so that
6119 programs like FrontPage can upload pages to UNIX servers
6120 without perl choking on the extra \r characters.
61096121
61106122 $VERSION = 0.05; $DATE="10/19/1998";
6111 +Added PERFORMANCE doc, which includes benchmarks +hints.
6112
6113 +Better installation warnings and errors for other modules required.
6114
6115 -Turned off StatINC in eg/.htaccess, as not everyone installs Devel::Symdump
6116
6117 -Fixed AUTOLOAD state bug, which wouldn't let you each through state
6118 objects, like %{$Session}, or each %$Session, (bug introduced in v.04)
6119
6120 +Parses ASP white space better. HTML output matches author's intent
6121 by better dealing with white space surrounding <% perl blocks %>
6122
6123 -Scalar insertion code <%=$foo%> can now span many lines.
6124
6125 +Added include.t test script for includes.
6126
6127 +Script recompiles when included files change.
6128
6129 +Files can be included in script with
6130 SSI <!--#include file="filename"--> syntax, needs to be
6131 done in ASP module to allow compilation of included code and html
6132 into script. Future chaining with Apache::SSI will allow static
6133 html includes, and other SSI directives
6123 +Added PERFORMANCE doc, which includes benchmarks +hints.
6124
6125 +Better installation warnings and errors for other modules required.
6126
6127 -Turned off StatINC in eg/.htaccess, as not everyone installs Devel::Symdump
6128
6129 -Fixed AUTOLOAD state bug, which wouldn't let you each through state
6130 objects, like %{$Session}, or each %$Session, (bug introduced in v.04)
6131
6132 +Parses ASP white space better. HTML output matches author's intent
6133 by better dealing with white space surrounding <% perl blocks %>
6134
6135 -Scalar insertion code <%=$foo%> can now span many lines.
6136
6137 +Added include.t test script for includes.
6138
6139 +Script recompiles when included files change.
6140
6141 +Files can be included in script with
6142 SSI <!--#include file="filename"--> syntax, needs to be
6143 done in ASP module to allow compilation of included code and html
6144 into script. Future chaining with Apache::SSI will allow static
6145 html includes, and other SSI directives
61346146
61356147 $VERSION = 0.04; $DATE="10/14/1998";
6136 +Example script eg/cgi.htm demonstrating CGI.pm use for output.
6137
6138 +Optimized ASP parsing, faster and more legible executing code
6139 : try 'die();' in code with setting PerlSetVar Debug 2
6140
6141 +Cleaned up code for running with 'use strict'
6142
6143 -Fixed directory handle leak on Solaris, from not closing after opendir()
6144
6145 +StatINC overhaul. StatINC setting now works as it should, with
6146 the caveat that exported functions will not be refreshed.
6147
6148 +NoState setting optimization, disallows $Application & $Session
6149
6150 +$Application->*Lock() functions implemented
6151
6152 -SoftRedirect setting for those who want scripts to keep running
6153 after a Redirect()
6154
6155 +SessionSerialize setting to lock session while script is running
6156 : Microsoft ASP style session locking
6157 : For a session, scripts execute one at a time
6158 : NOT recommended use, please see note.
6159
6160 -MLDBM can be used for other things without messing up internal use
6161 : before if it was used with different DB's and serializers,
6162 internal state could be lost.
6163
6164 --State file locking. Corruption worries, and loss of data no more.
6165
6166 +CGI header support, developer can use CGI.pm for *output*, or just print()
6167 : print "Set-Cookie: test=cookie\n", and things will just work
6168 : use CGI.pm for output
6169 : utilizes $r->send_cgi_header(), thanks Doug!
6170
6171 +Improved Cookie implementation, more flexible and complete
6172 - Domain cookie key now works
6173 : Expire times now taken from time(), and relative time in sec
6174 : Request->Cookies() reading more flexible, with wantarray()
6175 on hash cookie values, %hash = $Request->Cookie('test');
6176
6177 -make test module naming correction, was t.pm, now T.pm for Unix
6178
6179 +POD / README cleanup, formatting and HTML friendly.
6148 +Example script eg/cgi.htm demonstrating CGI.pm use for output.
6149
6150 +Optimized ASP parsing, faster and more legible executing code
6151 : try 'die();' in code with setting PerlSetVar Debug 2
6152
6153 +Cleaned up code for running with 'use strict'
6154
6155 -Fixed directory handle leak on Solaris, from not closing after opendir()
6156
6157 +StatINC overhaul. StatINC setting now works as it should, with
6158 the caveat that exported functions will not be refreshed.
6159
6160 +NoState setting optimization, disallows $Application & $Session
6161
6162 +$Application->*Lock() functions implemented
6163
6164 -SoftRedirect setting for those who want scripts to keep running
6165 after a Redirect()
6166
6167 +SessionSerialize setting to lock session while script is running
6168 : Microsoft ASP style session locking
6169 : For a session, scripts execute one at a time
6170 : NOT recommended use, please see note.
6171
6172 -MLDBM can be used for other things without messing up internal use
6173 : before if it was used with different DB's and serializers,
6174 internal state could be lost.
6175
6176 --State file locking. Corruption worries, and loss of data no more.
6177
6178 +CGI header support, developer can use CGI.pm for *output*, or just print()
6179 : print "Set-Cookie: test=cookie\n", and things will just work
6180 : use CGI.pm for output
6181 : utilizes $r->send_cgi_header(), thanks Doug!
6182
6183 +Improved Cookie implementation, more flexible and complete
6184 - Domain cookie key now works
6185 : Expire times now taken from time(), and relative time in sec
6186 : Request->Cookies() reading more flexible, with wantarray()
6187 on hash cookie values, %hash = $Request->Cookie('test');
6188
6189 -make test module naming correction, was t.pm, now T.pm for Unix
6190
6191 +POD / README cleanup, formatting and HTML friendly.
61806192
61816193 $VERSION = 0.03; $DATE="09/14/1998";
6182 +Installation 'make test' now works
6183
6184 +ActiveX objects on Win32 implemented with $Server->CreateObject()
6185
6186 +Cookies implemented: $Response->Cookies() & $Request->Cookies()
6187
6188 -Fixed $Response object API, converting some methods to object members.
6189 Deprecated methods, but backwards compatible.
6190
6191 +Improved error messaging, debug output
6192
6193 +$, influences $Response->Write(@strings) behavior
6194
6195 +perl print() works, sending output to $Response object
6196
6197 +$Response->Write() prints scalars, arrays, and hashes. Before only scalars.
6198
6199 +Begin implementation of $Server object.
6200
6201 +Implemented $Response->{Expires} and $Response->{ExpiresAbsolute}
6202
6203 +Added "PerlSetVar StatINC" config option
6204
6205 +$0 is aliased to current script filename
6206
6207 +ASP Objects ($Response, etc.) are set in main package
6208 Thus notation like $main::Response->Write() can be used anywhere.
6194 +Installation 'make test' now works
6195
6196 +ActiveX objects on Win32 implemented with $Server->CreateObject()
6197
6198 +Cookies implemented: $Response->Cookies() & $Request->Cookies()
6199
6200 -Fixed $Response object API, converting some methods to object members.
6201 Deprecated methods, but backwards compatible.
6202
6203 +Improved error messaging, debug output
6204
6205 +$, influences $Response->Write(@strings) behavior
6206
6207 +perl print() works, sending output to $Response object
6208
6209 +$Response->Write() prints scalars, arrays, and hashes. Before only scalars.
6210
6211 +Begin implementation of $Server object.
6212
6213 +Implemented $Response->{Expires} and $Response->{ExpiresAbsolute}
6214
6215 +Added "PerlSetVar StatINC" config option
6216
6217 +$0 is aliased to current script filename
6218
6219 +ASP Objects ($Response, etc.) are set in main package
6220 Thus notation like $main::Response->Write() can be used anywhere.
62096221
62106222 $VERSION = 0.02; $DATE="07/12/1998";
6211 ++Session Manager, won't break under denial of service attack
6212
6213 +Fleshed out $Response, $Session objects, almost full implementation.
6214
6215 +Enormously more documentation.
6216
6217 -Fixed error handling with Debug = 2.
6218
6219 -Documentation fixed for pod2man support. README now more man-like.
6220
6221 -Stripped \r\n dos characters from installation files
6222
6223 -755 mode set for session state directory when created
6224
6225 -Loads Win32/OLE properly, won't break with UNIX
6223 ++Session Manager, won't break under denial of service attack
6224
6225 +Fleshed out $Response, $Session objects, almost full implementation.
6226
6227 +Enormously more documentation.
6228
6229 -Fixed error handling with Debug = 2.
6230
6231 -Documentation fixed for pod2man support. README now more man-like.
6232
6233 -Stripped \r\n dos characters from installation files
6234
6235 -755 mode set for session state directory when created
6236
6237 -Loads Win32/OLE properly, won't break with UNIX
62266238
62276239 $VERSION = 0.01; $DATE="06/26/1998";
6228 Syntax Support
6229 --------------
6230 Initial release, could be considered alpha software.
6231 Allows developers to embed perl in html ASP style.
6232
6233 <!-- sample here -->
6234 <html>
6235 <body>
6236 <% for(1..10) { %>
6237 counting: <%=$_%> <br>
6238 <% } %>
6239 </body>
6240 </html>
6241
6242 ASP Objects
6243 -----------
6244 $Session, $Application, $Response, $Request objects available
6245 for use in asp pages.
6246
6247 $Session & $Application data is preserved using SDBM files.
6248
6249 $Session id's are tracked through the use of cookies.
6250
6251 Security
6252 --------
6253 Timeouts any attempt to use a session id that doesn't already
6254 exist. Should stop hackers, since there is no wire speed guessing
6255 cookies.
6240 Syntax Support
6241 --------------
6242 Initial release, could be considered alpha software.
6243 Allows developers to embed perl in html ASP style.
6244
6245 <!-- sample here -->
6246 <html>
6247 <body>
6248 <% for(1..10) { %>
6249 counting: <%=$_%> <br>
6250 <% } %>
6251 </body>
6252 </html>
6253
6254 ASP Objects
6255 -----------
6256 $Session, $Application, $Response, $Request objects available
6257 for use in asp pages.
6258
6259 $Session & $Application data is preserved using SDBM files.
6260
6261 $Session id's are tracked through the use of cookies.
6262
6263 Security
6264 --------
6265 Timeouts any attempt to use a session id that doesn't already
6266 exist. Should stop hackers, since there is no wire speed guessing
6267 cookies.
62566268
62576269 LICENSE
6258 Copyright (c) 1998-2008, Josh Chamas, Chamas Enterprises Inc. All rights
6259 reserved. This program is free software; you can redistribute it and/or
6260 modify it under the same terms as Perl itself.
6270 Copyright (c) 1998-2018, Josh Chamas
6271
6272 All rights reserved. This program is free software; you can redistribute it
6273 and/or modify it under the same terms as Perl itself.
62616274
62626275 Apache::ASP is a perl native port of Active Server Pages for Apache and
62636276 mod_perl.
+0
-9
build/build_ads.sh less more
0 #!/bin/bash
1
2 #perl ../cgi/asp -b -o ../site ./*.html
3 #perl /perl/bin/pod2text -80 < ../ASP.pm > ../README
4
5 #perl ../cgi/asp -b -o ../site ./index.html ads 1
6 perl ../asp-perl -b -o ../site ./index.html ads 1 ./*.html
7 touch ../site/apps/search/index.asp
8 rsync --delete --stats --exclude=CVS -a ../site/ /usr/local/proj/mlink/site/asp/
+0
-37
build/global/ad.inc less more
0
1
2 <%
3 use vars qw ($Ads $PageCount);
4 if($Ads && ( $0 !~ /index.html$/ )) { # turn off for now
5 $PageCount++;
6 %>
7
8 =pod
9
10 <!--- Begin HitExchange Code --->
11 <CENTER><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD>
12 <TABLE BORDER=0 BGCOLOR="#0000FF" CELLPADDING=1 CELLSPACING=0>
13 <TR><TD><A HREF="http://gif.hitexchange.net/HX589936/468x60/<%=$PageCount%>" TARGET="_top">
14 <IMG SRC="http://gif.hitexchange.net/HX589936/468x60/<%=$PageCount%>.gif" BORDER=0
15 HSPACE=0 WIDTH=468 HEIGHT=60 ALT="Banner Ad"></A></TD>
16 </TR></TABLE></TD></TR><TR><TD ALIGN=CENTER>
17 <A HREF="http://gif.hitexchange.net/HX589936/468x15/map" TARGET="_top">
18 <IMG SRC="http://gif.hitexchange.net/logo/468x15.gif" BORDER=0
19 HSPACE=0 ISMAP WIDTH=468 HEIGHT=15 ALT="Click!"></A></TD>
20 </TR></TABLE></CENTER>
21 <!--- End HitExchange Code --->
22
23 <!-- BEGIN LINKEXCHANGE CODE -->
24 <center><iframe src="http://leader.linkexchange.com/<%=$PageCount%>/X709880/showiframe?"
25 width=468 height=60 marginwidth=0 marginheight=0 hspace=0 vspace=0 frameborder=0 scrolling=no>
26 <a href="http://leader.linkexchange.com/<%=$PageCount%>/X709880/clickle" target="_top"><img width=468
27 height=60 border=0 ismap alt=""
28 src="http://leader.linkexchange.com/<%=$PageCount%>/X709880/showle?"></a></iframe>
29 <br><a href="http://leader.linkexchange.com/<%=$PageCount%>/X709880/clicklogo"
30 target="_top"><img src="http://leader.linkexchange.com/<%=$PageCount%>/X709880/showlogo?"
31 width=468 height=16 border=0 ismap alt=""></a><br></center>
32 <!-- END LINKEXCHANGE CODE -->
33 =cut
34
35 <% } %>
36
00
11 use Data::Dumper;
2 use vars qw(%FILES %ALIASES %LINKS $ASP $DOCINIT $DUMP $Ads $LINKS_MATCH $VAR1);
3 use MD5;
2 use vars qw(%FILES %ALIASES %LINKS $ASP $DOCINIT $DUMP $Site $LINKS_MATCH $VAR1);
43 use Time::HiRes;
54 use Data::Dumper;
65 use Digest::MD5 qw( md5_hex );
6362 unless ($DOCINIT++) {
6463 doc_init();
6564 }
66 if($Request->QueryString('ads')) {
67 $Ads = 1;
65 if($Request->QueryString('site')) {
66 $Site = 1;
6867 }
6968 }
7069
103102 close ASP;
104103
105104 $data =~ s/^.*\n__END__//s;
106 my $new_checksum = MD5->hexhash($data.$self_data.(join('', %ALIASES)));
105 my $new_checksum = md5_hex($data.$self_data.(join('', %ALIASES)));
107106 if ($new_checksum eq $dump_data->{checksum}) {
108107 $Response->Debug("matched old compiled ASP doc $dump_data->{checksum}");
109108 $ASP = $dump_data->{ASP};
0
01 <%
12
23 use File::Basename qw(basename);
34 use strict;
45 use vars qw(
5 $NavColor $LinkColor $NavColSpan $Ads $PageCount $DarkRowColor $VLinkColor
6 $NavColor $LinkColor $NavColSpan $Site $PageCount $DarkRowColor $VLinkColor
67 $BodyWidth $BodyColSpan
78 );
89
7172 -->
7273 </style>
7374
74
7575 </head>
7676 <body bgcolor=black link=<%=$LinkColor%> alink=#ff5599 vlink=<%=$VLinkColor%>
7777 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
78
79 <% if($Ads) { %>
80 <center>
81 <table border=0 cellpadding=3 cellspacing=0 width=100%>
82 <tr>
83 <td><!--#include file=ad.inc--></td>
84 </tr></table>
85 </center>
86 <% } %>
87
8878
8979 <center>
9080 <table border=0 cellpadding=0 width=<%=$BodyWidth%> cellspacing=8>
9686 <table border=0 cellpadding=1 cellspacing=0 width=100%>
9787 <tr>
9888 <td><img border=0 src=asptitlelogo.gif alt="<%=$module%>" width=267 height=44 ></td>
99 <% if($Ads) { %>
89 <% if($Site) { %>
10090 <form action=apps/search/index.asp>
10191 <td align=right valign=center>
10292 <input type=text name=search size=20>
184174 <a href=http://perl.apache.org><site:img src="powered_by_modperl.gif" alt="Powered by ModPerl and Apache"/></a>
185175 <br>
186176 <a href=http://www.perl.com><site:img src="rectangle_power_perl.gif" alt="Powered by Perl" /></a>
187 </center>
177 <% if($Site) { %>
178 <br>
179 <a href=http://www.nodeworks.com/partner.htm?partner_id=apacheasp><img src="nodecheck_button.gif" width="88" height="31" alt="NodeWorks Link Checker" border="0"></a>
180 <% } %>
188181
189182 </center>
190183
321314 </td>
322315
323316 </tr>
324 <tr bgcolor=<%=$DarkRowColor%>>
325 <td colspan=<%= $BodyColSpan %> align=center width=80%>
326 <font face=verdana color=white size=-1>
327 Copyright &copy; 1998-<%= (localtime())[5] + 1900 %>,
328 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
329 </font>
330 </td>
331 </tr>
332317 </table>
333318
334319 </td></tr>
653653 $dataref = defined($_[0]) ? \$_[0] : \'';
654654 }
655655
656 &WriteRef($self, $dataref);
656 &WriteRef($self, $dataref);
657657
658658 1;
659659 }
679679 # add dataref to buffer
680680 ${$self->{out}} .= $$dataref;
681681
682 #Encode::_utf8_on(${$self->{out}});
683
684 #Encode::from_to(${$self->{out}}, "utf8", "iso-8859-1");
685
682686 # do we flush now? not if we are buffering
683687 if(! $self->{'Buffer'} && ! $self->{'FormFill'}) {
684688 # we test for whether anything is in the buffer since
105105 $$data_ref =~ s/</&lt;/sg;
106106
107107 ref($toencode) ? $data_ref : $$data_ref;
108 }
109
110 sub HTMLEncodeByValue {
111 my($self, $toencode) = @_;
112 return '' unless defined $toencode;
113
114 $toencode =~ s/&/&amp;/sg;
115 $toencode =~ s/\"/&quot;/sg;
116 $toencode =~ s/\'/&#39;/sg;
117 $toencode =~ s/>/&gt;/sg;
118 $toencode =~ s/</&lt;/sg;
119
120 return $toencode;
108121 }
109122
110123 sub RegisterCleanup {
44 my $Form = $Request->Form;
55 my $Query = $Request->QueryString;
66 my $Env = $Request->ServerVariables;
7 my $Raw = $Server->HTMLEncodeByValue($Request->BinaryRead);
8 $Raw =~ s/([^\n]{50,70})(.)/$1\n$2/gi;
79
8 my $http_out = join("<br>\n ",
9 map { "$_= ".$Server->HTMLEncode(substr($Env->{$_}, 0, 100)) }
10 sort grep(/^HTTP_/, keys %$Env)
11 );
12 my $query_out = join("<br>\n ",
13 map { "$_= ".$Server->HTMLEncode(substr($Query->{$_}, 0, 100)) }
14 sort keys %$Query
15 );
16 my $form_out = join("<br>\n ",
17 map { "$_= ".$Server->HTMLEncode(substr($Form->{$_}, 0, 100)) }
18 sort keys %$Form
19 );
10 my $http_out = join("\n",
11 map { "$_= ".$Server->HTMLEncodeByValue($Env->{$_}) }
12 sort keys %$Env
13 );
14 $http_out =~ s/([^\n]{50,70})(.)/$1\n$2/gi;
15
16 my $query_out = join("\n",
17 map { "$_= ".$Server->HTMLEncodeByValue($Query->{$_}) }
18 sort keys %$Query
19 );
20 $query_out =~ s/([^\n]{50,70})(.)/$1\n$2/gi;
21
22 my $form_out = join("\n",
23 map { "$_= ".$Server->HTMLEncodeByValue($Form->{$_}) }
24 sort keys %$Form
25 );
26 $form_out =~ s/([^\n]{50,70})(.)/$1\n$2/gi;
2027
2128 my %client_data = ( GLOBAL => $Server->Config('Global') || '.',
2229 FILE => $Server->File,
2532 HTTP_HEADERS => $http_out || '',
2633 QUERY => $query_out || '',
2734 FORM => $form_out || '',
35 RAW => $Raw || '',
2836 );
2937
3038 $Response->Include('Share::CORE/MailErrorsHTML.inc', %args, %client_data);
44
55 <html><body>
66 <table border=0>
7 <% for my $key ( qw( GLOBAL FILE REMOTE_ADDR REMOTE_USER HTTP_HEADERS QUERY FORM ) ) {
7 <% for my $key ( qw( GLOBAL FILE REMOTE_ADDR REMOTE_USER HTTP_HEADERS QUERY FORM RAW ) ) {
88 next unless defined $args{$key};
99 %>
1010 <tr>
1111 <td align=right><b><%= $key %>:</b></td>
12 <td><%= $args{$key} %></td>
12 <td><pre><%= $args{$key} %></pre></td>
1313 </tr>
1414 <% } %>
1515 </table>
8181 $self->{cookie_path} = &config($self, 'CookiePath', undef, '/');
8282 $self->{cookie_domain} = &config($self, 'CookieDomain');
8383 $self->{paranoid_session} = &config($self, 'ParanoidSession');
84 $self->{remote_ip} = $r->connection()->remote_ip();
84
85 $self->{remote_ip} = eval { $r->connection()->remote_ip() }; # may not exist in Apache 2.4
86 $self->{remote_ip} ||= eval { $r->useragent_ip() }; # should exist in Apache 2.4, best for end user agent IP address
87 $self->{remote_ip} ||= eval { $r->connection()->client_ip() }; # if useragent_ip not defined for Apache 2.4, try this one
88
8589 $self->{session_count} = &config($self, 'SessionCount');
8690
8791 # cookieless session support, cascading values
9397
9498 $self->{session_serialize} = &config($self, 'SessionSerialize');
9599 $self->{secure_session} = &config($self, 'SecureSession');
100 $self->{http_only_session} = &config($self, 'HTTPOnlySession');
96101 # session timeout in seconds since that is what we work with internally
97102 $self->{session_timeout} = &config($self, 'SessionTimeout', undef, $SessionTimeout) * 60;
98103 $self->{'ua'} = $self->{headers_in}->get('User-Agent') || 'UNKNOWN UA';
439444 unless($self->{session_url_force}) {
440445 # don't set the cookie when we are just using SessionQuery* configs
441446 my $secure = $self->{secure_session} ? '; secure' : '';
447 my $httponly = $self->{http_only_session} ? '; HttpOnly' : '';
442448 my $domain = $self->{cookie_domain} ? '; domain='.$self->{cookie_domain} : '';
443 $self->{r}->err_headers_out->add('Set-Cookie', "$SessionCookieName=$id; path=$self->{cookie_path}".$domain.$secure);
449 $self->{r}->err_headers_out->add('Set-Cookie', "$SessionCookieName=$id; path=$self->{cookie_path}".$domain.$secure.$httponly);
444450 }
445451 $self->{session_id} = $id;
446452 } else {
00 package Bundle::Apache::ASP::Extra;
11
2 $VERSION = '1.02';
2 $VERSION = '1.03';
33
44 1;
55
3535
3636 HTML::FillInForm - FormFill functionality which autofills HTML forms from form data
3737
38 Apache::Filter - Required for SSI filtering with Apache::SSI
39
4038 HTML::SimpleParse - Required for SSI filtering with Apache::SSI
41
42 Apache::SSI - Required for full server side includes support ( SSI ) beyond file includes
43
44 Tie::TextDir - Fast file based cache for CacheDB, good for caching large values for things like XSLT and $Response->Include() caching
45
46 Bundle::XML - Required for XML::XSLT support.
4739
4840 XML::XSLT - Required for XSLT support. May also use XML::Sablotron and XML::LibXSLT for this, which are not part of this bundle.
4941
66 PerlSetVar StateDir /tmp/asp_apps_bookmarks
77 PerlSetVar Debug 2
88 PerlSetVar SessionTimeout 15
9 PerlSetVar StatScripts 1
10 PerlSetVar AllowApplicationState 1
11 PerlSetVar AllowSessionState 1
9 PerlSetVar StatScripts On
10 PerlSetVar AllowApplicationState On
11 PerlSetVar AllowSessionState On
12 PerlSetVar TimeHiRes On
1213 </Files>
6161
6262 # get all the bookmarks
6363 ERROR:
64 my $sth = $Db->prepare_cached(
65 "select * from bookmarks where username=? ".
66 "order by bookmark_id"
64 my $rows = $Db->selectall_arrayref(
65 "select bookmark_id, username, title, url from bookmarks where username=? ".
66 "order by bookmark_id",
67 undef,
68 $Session->{'user'}
6769 );
68 $sth->execute($Session->{'user'});
6970 my @bookmarks;
70 while(my $bookmark = $sth->fetchrow_hashref()) {
71 push(@bookmarks, $bookmark);
71 for my $row ( @$rows ) {
72 push(@bookmarks, {
73 bookmark_id => $row->[0],
74 username => $row->[1],
75 title => $row->[2],
76 url => $row->[3],
77 });
7278 }
7379 %>
7480
00 use File::Basename;
11 use DBI;
2 use DBD::CSV;
2 use DBD::SQLite;
33
44 use vars qw( $DarkColor $Name %Titles $FontBase $Db $Title $Basename $Form $Query );
55
1111 );
1212 $FontBase = 'face=verdana,arial';
1313
14 $Db = DBI->connect("DBI:CSV:f_dir=".Apache->dir_config('StateDir'), '', '',
15 { RaiseError => 1 })
16 or die "Cannot connect: " . $DBI::errstr;
14 sub Script_OnStart {
1715
18 # setup bookmark database if first time
19 unless(eval { $Db->do("select bookmark_id,username,title,url from bookmarks") }) {
20 eval { $Db->do("drop table bookmarks"); };
21 $Db->do(<<CREATE) || die("can't create table $DBI::errstr");
22 create table bookmarks (
23 bookmark_id varchar(15),
24 username varchar(30),
25 title varchar(60),
26 url varchar(120)
27 )
28 CREATE
29 ;
30 }
16 &init_db();
3117
32 $Db->do("select * from bookmarks")
33 || die("can't do select against bookmarks: $DBI::errstr");
34
35 sub Script_OnStart {
3618 $Basename = basename($0);
3719 $Title = $Name.' / '.$Titles{$Basename};
3820 $Response->Include('header.inc');
3921 $Form = $Request->Form();
4022 $Query = $Request->QueryString();
41 $Response->Expires(0);
23 $Response->{Expires} = 0;
4224
4325 # a user may logout from any script, destroy session, and go
4426 # to login / intro page
5436 }
5537
5638 sub Application_OnStart {
39
40 &init_db();
41
5742 # use max_bookmark_id as a pseudo sequence
5843 $Application->Lock();
59 my $sth = $Db->prepare_cached
60 ("select bookmark_id from bookmarks order by bookmark_id desc");
61 $sth->execute();
62 $Application->{max_bookmark_id} = $sth->fetchrow_array();
44 my $max_id = $Db->selectrow_array("select bookmark_id from bookmarks order by bookmark_id desc");
45 $Application->{max_bookmark_id} = $max_id;
6346 $Application->UnLock();
6447 }
48
49 sub init_db {
50 my $db_file = $Server->Config('StateDir').'/'."bookmarks.sqlite";
51 $Db = DBI->connect("dbi:SQLite:dbname=$db_file","","", { RaiseError => 1 })
52 or die "Cannot connect: " . $DBI::errstr;
53
54 # $Db = DBI->connect("DBI:CSV:f_dir=".$Server->Config('StateDir'), '', '',
55 # { RaiseError => 1 })
56 # or die "Cannot connect: " . $DBI::errstr;
57
58 # setup bookmark database if first time
59 # die $Server->Config('StateDir');
60
61 unless(eval { $Db->do("select bookmark_id,username,title,url from bookmarks") }) {
62 eval { $Db->do("drop table bookmarks"); };
63 $Db->do(<<CREATE) || die("can't create table $DBI::errstr");
64 create table bookmarks (
65 bookmark_id varchar(15),
66 username varchar(30),
67 title varchar(60),
68 url varchar(120)
69 )
70 CREATE
71 ;
72 }
73
74 $Db->do("select * from bookmarks")
75 || die("can't do select against bookmarks: $DBI::errstr");
76
77 }
1212 sub Script_OnStart {
1313 %TEMP_SDB = ();
1414 for('DB', 'FileRoot', 'SiteRoot', 'RefreshPeriod', 'FileMatch') {
15 $CONF{$_} = Apache->dir_config('Search'.$_) || die("no config for $_");
15 $CONF{$_} = $Server->Config('Search'.$_) || die("no config for $_");
1616 }
1717 $CONF{FileRoot} =~ /\W/ or
1818 die("The FileRoot config must have a non word character in it ".
271271 The startup overhead on simple scripts is significantly more
272272 when moving from CGI to ASP under mod_perl for Apache, at least 20%,
273273 as shown in my previous
274 <a href=http://www.perlmonth.com/perlmonth/issue4/benchmarks.html>Hello
274 <a href=http://chamas.com/bench/>Hello
275275 World - Web Application Benchmarks</a> article, but this startup overhead
276276 will become relatively less important as your scripts get longer, and
277277 a base rate of 75 Apache::ASP requests per second on a PII 300 Solaris
288288 your web site. Next month we will build a simple web site using
289289 some of the powerful and modular features ASP has to offer.
290290 </body>
291 </html>
291 </html>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
376373 </pre></font>CGI.pm is a very useful module that aids developers in
377374 the building of these applications, and Apache::ASP has been made to
378375 be compatible with function calls in CGI.pm. Please see cgi.htm in the
379 ./site/eg directory for a sample ASP script written almost entirely in CGI.
376 ./site/eg directory for a sample ASP script written almost entirely in <a href=cgi.html><font size=-1 face=verdana><b>CGI</b></font></a>.
380377 <font face="courier new" size=3><pre>
381378 </pre></font>As of version 0.09, use of CGI.pm for both input and output is seamless
382379 when working under Apache::ASP. Thus if you would like to port existing
387384 <font face="courier new" size=3><pre>
388385 </pre></font>For more information about CGI.pm, please see the web site
389386 <font face="courier new" size=3><pre>
390 <a href=http://stein.cshl.org/WWW/software/CGI/>http://stein.cshl.org/WWW/software/CGI/</a>
387 <a href=http://search.cpan.org/dist/CGI/>http://search.cpan.org/dist/CGI/</a>
391388 </pre></font>
392389
393390 <p>
394391 <a name=Query%20Object4fef5875></a>
395392 <font face=verdana><font class=title size=+0 color=#555555><b>Query Object Initialization</b></font>
396393 <font face="courier new" size=3><pre>
397 </pre></font>You may create a <a href=cgi.html><font size=-1 face=verdana><b>CGI</b></font></a>.pm $query object like so:
394 </pre></font>You may create a <a href=http://stein.cshl.org/WWW/software/CGI/cgi_docs.html><font size=-1 face=verdana><b>CGI.pm</b></font></a> $query object like so:
398395 <font face="courier new" size=3><pre>
399396 use CGI;
400397 my $query = new CGI;
408405 <a name=CGI%20headers></a>
409406 <font face=verdana><font class=title size=+0 color=#555555><b>CGI headers</b></font>
410407 <font face="courier new" size=3><pre>
411 </pre></font>Not only can you use the <a href=cgi.html><font size=-1 face=verdana><b>CGI</b></font></a>.pm $query-&gt;header() method
408 </pre></font>Not only can you use the <a href=http://stein.cshl.org/WWW/software/CGI/cgi_docs.html><font size=-1 face=verdana><b>CGI.pm</b></font></a> $query-&gt;header() method
412409 to put out headers, but with the CgiHeaders config option
413410 set to true, you can also print &quot;Header: value\n&quot;, and add
414411 similar lines to the top of your script, like:
461458 on this topic, and <a href=eg/file_upload.asp>./site/eg/file_upload.asp</a> for an example of its use.
462459 Also, for more details about CGI.pm itself, please see the web site:
463460 <font face="courier new" size=3><pre>
464 <a href=http://stein.cshl.org/WWW/software/CGI/>http://stein.cshl.org/WWW/software/CGI/</a>
461 <a href=http://search.cpan.org/dist/CGI/>http://search.cpan.org/dist/CGI/</a>
465462 </pre></font>Occasionally, a newer version of CGI.pm will be released which breaks
466463 file upload compatibility with Apache::ASP. If you find this to occur,
467464 then you might consider downgrading to a version that works. For example,
495492 </td>
496493
497494 </tr>
498 <tr bgcolor=#063678>
499 <td colspan=3 align=center width=80%>
500 <font face=verdana color=white size=-1>
501 Copyright &copy; 1998-2008,
502 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
503 </font>
504 </td>
505 </tr>
506495 </table>
507496
508497 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
270267
271268 <td valign=top >
272269 <font face="lucida console" size=-1>
270 <a href=#%24VERSION%20%3D%2024b1e08d7>$VERSION = 2.63; $DATE="03/14/2018"</a>
271 </font>
272 </td>
273
274 <td valign=top >
275 <font face="lucida console" size=-1>
276 <a href=#%24VERSION%20%3D%202023e855d>$VERSION = 2.09; $DATE="01/30/2001";</a>
277 </font>
278 </td>
279
280 </tr>
281
282 <tr>
283
284 <td valign=top >
285 <font face="lucida console" size=-1>
286 <a href=#%24VERSION%20%3D%20239066cad>$VERSION = 2.62; $DATE="08/16/2011"</a>
287 </font>
288 </td>
289
290 <td valign=top >
291 <font face="lucida console" size=-1>
292 <a href=#%24VERSION%20%3D%2021002eb7e>$VERSION = 2.07; $DATE="11/26/2000";</a>
293 </font>
294 </td>
295
296 </tr>
297
298 <tr>
299
300 <td valign=top >
301 <font face="lucida console" size=-1>
302 <a href=#%24VERSION%20%3D%202c3b7fac7>$VERSION = 2.61; $DATE="05/24/2008"</a>
303 </font>
304 </td>
305
306 <td valign=top >
307 <font face="lucida console" size=-1>
308 <a href=#%24VERSION%20%3D%202909e81ef>$VERSION = 2.03; $DATE="08/01/2000";</a>
309 </font>
310 </td>
311
312 </tr>
313
314 <tr>
315
316 <td valign=top >
317 <font face="lucida console" size=-1>
273318 <a href=#%24VERSION%20%3D%2021803a342>$VERSION = 2.59; $DATE="05/23/2005"</a>
274319 </font>
275320 </td>
276321
277322 <td valign=top >
278323 <font face="lucida console" size=-1>
279 <a href=#%24VERSION%20%3D%202909e81ef>$VERSION = 2.03; $DATE="08/01/2000";</a>
324 <a href=#%24VERSION%20%3D%202727b0736>$VERSION = 2.01; $DATE="07/22/2000";</a>
280325 </font>
281326 </td>
282327
292337
293338 <td valign=top >
294339 <font face="lucida console" size=-1>
295 <a href=#%24VERSION%20%3D%202727b0736>$VERSION = 2.01; $DATE="07/22/2000";</a>
340 <a href=#%24VERSION%20%3D%202784583b1>$VERSION = 2.00; $DATE="07/15/2000";</a>
296341 </font>
297342 </td>
298343
308353
309354 <td valign=top >
310355 <font face="lucida console" size=-1>
311 <a href=#%24VERSION%20%3D%202784583b1>$VERSION = 2.00; $DATE="07/15/2000";</a>
356 <a href=#%24VERSION%20%3D%2010d78b35d>$VERSION = 1.95; $DATE="07/10/2000";</a>
312357 </font>
313358 </td>
314359
324369
325370 <td valign=top >
326371 <font face="lucida console" size=-1>
327 <a href=#%24VERSION%20%3D%2010d78b35d>$VERSION = 1.95; $DATE="07/10/2000";</a>
372 <a href=#%24VERSION%20%3D%201b231718a>$VERSION = 1.93; $DATE="07/03/2000";</a>
328373 </font>
329374 </td>
330375
340385
341386 <td valign=top >
342387 <font face="lucida console" size=-1>
343 <a href=#%24VERSION%20%3D%201b231718a>$VERSION = 1.93; $DATE="07/03/2000";</a>
388 <a href=#%24VERSION%20%3D%2010d8c7b1b>$VERSION = 1.91; $DATE="07/02/2000";</a>
344389 </font>
345390 </td>
346391
356401
357402 <td valign=top >
358403 <font face="lucida console" size=-1>
359 <a href=#%24VERSION%20%3D%2010d8c7b1b>$VERSION = 1.91; $DATE="07/02/2000";</a>
404 <a href=#%24VERSION%20%3D%200f0c93549>$VERSION = 0.19; $DATE="NOT RELEASED";</a>
360405 </font>
361406 </td>
362407
372417
373418 <td valign=top >
374419 <font face="lucida console" size=-1>
375 <a href=#%24VERSION%20%3D%200f0c93549>$VERSION = 0.19; $DATE="NOT RELEASED";</a>
420 <a href=#%24VERSION%20%3D%2004a1da04f>$VERSION = 0.18; $DATE="02/03/2000";</a>
376421 </font>
377422 </td>
378423
382427
383428 <td valign=top >
384429 <font face="lucida console" size=-1>
385 <a href=#%24VERSION%20%3D%2029e470448>$VERSION = 2.45; $DATE="10/13/2002"</a>
386 </font>
387 </td>
388
389 <td valign=top >
390 <font face="lucida console" size=-1>
391 <a href=#%24VERSION%20%3D%2004a1da04f>$VERSION = 0.18; $DATE="02/03/2000";</a>
430 <a href=#%24VERSION%20%3D%20204276936>$VERSION = 2.45; $DATE="10/13/2002"</a>
431 </font>
432 </td>
433
434 <td valign=top >
435 <font face="lucida console" size=-1>
436 <a href=#%24VERSION%20%3D%200792d4e8d>$VERSION = 0.17; $DATE="11/15/99";</a>
392437 </font>
393438 </td>
394439
404449
405450 <td valign=top >
406451 <font face="lucida console" size=-1>
407 <a href=#%24VERSION%20%3D%200792d4e8d>$VERSION = 0.17; $DATE="11/15/99";</a>
452 <a href=#%24VERSION%20%3D%2003dd1597d>$VERSION = 0.16; $DATE="09/22/99";</a>
408453 </font>
409454 </td>
410455
420465
421466 <td valign=top >
422467 <font face="lucida console" size=-1>
423 <a href=#%24VERSION%20%3D%2003dd1597d>$VERSION = 0.16; $DATE="09/22/99";</a>
468 <a href=#%24VERSION%20%3D%200a2fa9027>$VERSION = 0.15; $DATE="08/24/1999";</a>
424469 </font>
425470 </td>
426471
436481
437482 <td valign=top >
438483 <font face="lucida console" size=-1>
439 <a href=#%24VERSION%20%3D%200a2fa9027>$VERSION = 0.15; $DATE="08/24/1999";</a>
484 <a href=#%24VERSION%20%3D%200b667e0c4>$VERSION = 0.14; $DATE="07/29/1999";</a>
440485 </font>
441486 </td>
442487
452497
453498 <td valign=top >
454499 <font face="lucida console" size=-1>
455 <a href=#%24VERSION%20%3D%200b667e0c4>$VERSION = 0.14; $DATE="07/29/1999";</a>
500 <a href=#%24VERSION%20%3D%200fcc7c76f>$VERSION = 0.12; $DATE="07/01/1999";</a>
456501 </font>
457502 </td>
458503
468513
469514 <td valign=top >
470515 <font face="lucida console" size=-1>
471 <a href=#%24VERSION%20%3D%200fcc7c76f>$VERSION = 0.12; $DATE="07/01/1999";</a>
516 <a href=#%24VERSION%20%3D%200bd024b52>$VERSION = 0.11; $DATE="06/24/1999";</a>
472517 </font>
473518 </td>
474519
484529
485530 <td valign=top >
486531 <font face="lucida console" size=-1>
487 <a href=#%24VERSION%20%3D%200bd024b52>$VERSION = 0.11; $DATE="06/24/1999";</a>
532 <a href=#%24VERSION%20%3D%200c7f99fbe>$VERSION = 0.10; $DATE="05/24/1999";</a>
488533 </font>
489534 </td>
490535
500545
501546 <td valign=top >
502547 <font face="lucida console" size=-1>
503 <a href=#%24VERSION%20%3D%200c7f99fbe>$VERSION = 0.10; $DATE="05/24/1999";</a>
548 <a href=#%24VERSION%20%3D%2005ee189f2>$VERSION = 0.09; $DATE="04/22/1999";</a>
504549 </font>
505550 </td>
506551
516561
517562 <td valign=top >
518563 <font face="lucida console" size=-1>
519 <a href=#%24VERSION%20%3D%2005ee189f2>$VERSION = 0.09; $DATE="04/22/1999";</a>
564 <a href=#%24VERSION%20%3D%200ea85a09a>$VERSION = 0.08; $DATE="02/06/1999";</a>
520565 </font>
521566 </td>
522567
532577
533578 <td valign=top >
534579 <font face="lucida console" size=-1>
535 <a href=#%24VERSION%20%3D%200ea85a09a>$VERSION = 0.08; $DATE="02/06/1999";</a>
580 <a href=#%24VERSION%20%3D%2003960e08a>$VERSION = 0.07; $DATE="01/20/1999";</a>
536581 </font>
537582 </td>
538583
548593
549594 <td valign=top >
550595 <font face="lucida console" size=-1>
551 <a href=#%24VERSION%20%3D%2003960e08a>$VERSION = 0.07; $DATE="01/20/1999";</a>
596 <a href=#%24VERSION%20%3D%200394bbc7f>$VERSION = 0.06; $DATE="12/21/1998";</a>
552597 </font>
553598 </td>
554599
564609
565610 <td valign=top >
566611 <font face="lucida console" size=-1>
567 <a href=#%24VERSION%20%3D%200394bbc7f>$VERSION = 0.06; $DATE="12/21/1998";</a>
612 <a href=#%24VERSION%20%3D%2003a5fe2db>$VERSION = 0.05; $DATE="10/19/1998";</a>
568613 </font>
569614 </td>
570615
580625
581626 <td valign=top >
582627 <font face="lucida console" size=-1>
583 <a href=#%24VERSION%20%3D%2003a5fe2db>$VERSION = 0.05; $DATE="10/19/1998";</a>
628 <a href=#%24VERSION%20%3D%2009ffce1f9>$VERSION = 0.04; $DATE="10/14/1998";</a>
584629 </font>
585630 </td>
586631
596641
597642 <td valign=top >
598643 <font face="lucida console" size=-1>
599 <a href=#%24VERSION%20%3D%2009ffce1f9>$VERSION = 0.04; $DATE="10/14/1998";</a>
644 <a href=#%24VERSION%20%3D%200ec664faf>$VERSION = 0.03; $DATE="09/14/1998";</a>
600645 </font>
601646 </td>
602647
612657
613658 <td valign=top >
614659 <font face="lucida console" size=-1>
615 <a href=#%24VERSION%20%3D%200ec664faf>$VERSION = 0.03; $DATE="09/14/1998";</a>
660 <a href=#%24VERSION%20%3D%20055b248f9>$VERSION = 0.02; $DATE="07/12/1998";</a>
616661 </font>
617662 </td>
618663
628673
629674 <td valign=top >
630675 <font face="lucida console" size=-1>
631 <a href=#%24VERSION%20%3D%20055b248f9>$VERSION = 0.02; $DATE="07/12/1998";</a>
676 <a href=#%24VERSION%20%3D%2009faee67f>$VERSION = 0.01; $DATE="06/26/1998";</a>
632677 </font>
633678 </td>
634679
635 </tr>
636
637 <tr>
638
639 <td valign=top >
640 <font face="lucida console" size=-1>
641 <a href=#%24VERSION%20%3D%202023e855d>$VERSION = 2.09; $DATE="01/30/2001";</a>
642 </font>
643 </td>
644
645 <td valign=top >
646 <font face="lucida console" size=-1>
647 <a href=#%24VERSION%20%3D%2009faee67f>$VERSION = 0.01; $DATE="06/26/1998";</a>
648 </font>
649 </td>
650
651 </tr>
652
653 <tr>
654
655 <td valign=top >
656 <font face="lucida console" size=-1>
657 <a href=#%24VERSION%20%3D%2021002eb7e>$VERSION = 2.07; $DATE="11/26/2000";</a>
658 </font>
659 </td>
660 <td>&nbsp;</td>
661680 </tr>
662681
663682 </table>
664683 <hr size=1>
665684 <p>
666685
686 <p>
687 <a name=%24VERSION%20%3D%2024b1e08d7></a>
688 <font face=verdana><font class=title size=+0 color=#555555><b>$VERSION = 2.63; $DATE="03/14/2018"</b></font>
689 <font face="courier new" size=3><pre>
690 + Added section ``raw&#39;&#39; to MailErrors.inc to debug POSTs without
691 form fields
692
693 - MailErrorsHTML now uses monospaced fonts for errors. Easier on
694 the eyes and more informative
695 </pre></font>
696
697 <p>
698 <a name=%24VERSION%20%3D%20239066cad></a>
699 <font face=verdana><font class=title size=+0 color=#555555><b>$VERSION = 2.62; $DATE="08/16/2011"</b></font>
700 <font face="courier new" size=3><pre>
701 - Fixed &#39;application/x-www-form-urlencoded&#39; for AJAX POSTs post
702 Firefox 3.x
703
704 + First sourceforge.net hosted version
705
706 + Incremented version number to actually match SVN branch tag
707 </pre></font>
708
709 <p>
710 <a name=%24VERSION%20%3D%202c3b7fac7></a>
711 <font face=verdana><font class=title size=+0 color=#555555><b>$VERSION = 2.61; $DATE="05/24/2008"</b></font>
712 <font face="courier new" size=3><pre>
713 - updated for more recent mod_perl 2 environment to trigger correct loading of modules
714
715 + loads modules in a backwards compatible way for older versions of mod_perl 1.99_07 to 1.99_09
716
717 + license changes from GPL to Perl Artistic License
718 </pre></font>
719
667720 <p>
668721 <a name=%24VERSION%20%3D%2021803a342></a>
669722 <font face=verdana><font class=title size=+0 color=#555555><b>$VERSION = 2.59; $DATE="05/23/2005"</b></font>
939992 </pre></font>
940993
941994 <p>
942 <a name=%24VERSION%20%3D%2029e470448></a>
995 <a name=%24VERSION%20%3D%20204276936></a>
943996 <font face=verdana><font class=title size=+0 color=#555555><b>$VERSION = 2.45; $DATE="10/13/2002"</b></font>
944997 <font face="courier new" size=3><pre>
945998 ++New XMLSubsPerlArgs config, default 1, indicates how
9701023
9711024 -Fixed runtime HTML error output when Debug is set to -2/2,
9721025 so that script correctly again gets rendered in final perl form.
973 Added compile time error output to <a href=eg/syntax_error.htm>./site/eg/syntax_error.htm</a>
1026 Added compile time error output to <a href=eg/syntax_error.asp>./site/eg/syntax_error.asp</a>
9741027 when a special link is clicked for a quick visual test.
9751028
9761029 -Cleaned up some bad coding practices in <a href=eg/global.asa>./site/eg/global.asa</a>
32103263 </td>
32113264
32123265 </tr>
3213 <tr bgcolor=#063678>
3214 <td colspan=3 align=center width=80%>
3215 <font face=verdana color=white size=-1>
3216 Copyright &copy; 1998-2008,
3217 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
3218 </font>
3219 </td>
3220 </tr>
32213266 </table>
32223267
32233268 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
650647
651648 <td valign=top >
652649 <font face="lucida console" size=-1>
650 <a href=#HTTPOnlySess63d4d37d>HTTPOnlySession</a>
651 </font>
652 </td>
653
654 <td valign=top >
655 <font face="lucida console" size=-1>
656 <a href=#SoftRedirect>SoftRedirect</a>
657 </font>
658 </td>
659
660 </tr>
661
662 <tr>
663
664 <td valign=top >
665 <font face="lucida console" size=-1>
653666 <a href=#ParanoidSess9085f1d5>ParanoidSession</a>
654667 </font>
655668 </td>
656669
657670 <td valign=top >
658671 <font face="lucida console" size=-1>
659 <a href=#SoftRedirect>SoftRedirect</a>
672 <a href=#Filter>Filter</a>
660673 </font>
661674 </td>
662675
672685
673686 <td valign=top >
674687 <font face="lucida console" size=-1>
675 <a href=#Filter>Filter</a>
688 <a href=#CgiHeaders>CgiHeaders</a>
676689 </font>
677690 </td>
678691
688701
689702 <td valign=top >
690703 <font face="lucida console" size=-1>
691 <a href=#CgiHeaders>CgiHeaders</a>
704 <a href=#Clean>Clean</a>
692705 </font>
693706 </td>
694707
704717
705718 <td valign=top >
706719 <font face="lucida console" size=-1>
707 <a href=#Clean>Clean</a>
720 <a href=#CompressGzip>CompressGzip</a>
708721 </font>
709722 </td>
710723
720733
721734 <td valign=top >
722735 <font face="lucida console" size=-1>
723 <a href=#CompressGzip>CompressGzip</a>
736 <a href=#FormFill>FormFill</a>
724737 </font>
725738 </td>
726739
736749
737750 <td valign=top >
738751 <font face="lucida console" size=-1>
739 <a href=#FormFill>FormFill</a>
752 <a href=#TimeHiRes>TimeHiRes</a>
740753 </font>
741754 </td>
742755
752765
753766 <td valign=top >
754767 <font face="lucida console" size=-1>
755 <a href=#TimeHiRes>TimeHiRes</a>
768
756769 </font>
757770 </td>
758771
766779 </font>
767780 </td>
768781
782 <td valign=top bgcolor=#005196>
783 <font face="lucida console" size=-1>
784 <font color=white><b><a href=#Mail%20Adminis1a4d2b59><font color=white>Mail Administration</font></a></b></font>
785 </font>
786 </td>
787
788 </tr>
789
790 <tr>
791
792 <td valign=top >
793 <font face="lucida console" size=-1>
794 <a href=#SessionQuery3ae841c3>SessionQueryMatch</a>
795 </font>
796 </td>
797
798 <td valign=top >
799 <font face="lucida console" size=-1>
800 <a href=#MailHost>MailHost</a>
801 </font>
802 </td>
803
804 </tr>
805
806 <tr>
807
808 <td valign=top >
809 <font face="lucida console" size=-1>
810 <a href=#SessionQuery85863960>SessionQueryForce</a>
811 </font>
812 </td>
813
814 <td valign=top >
815 <font face="lucida console" size=-1>
816 <a href=#MailFrom>MailFrom</a>
817 </font>
818 </td>
819
820 </tr>
821
822 <tr>
823
769824 <td valign=top >
770825 <font face="lucida console" size=-1>
771826
772827 </font>
773828 </td>
774
775 </tr>
776
777 <tr>
778
779 <td valign=top >
780 <font face="lucida console" size=-1>
781 <a href=#SessionQuery3ae841c3>SessionQueryMatch</a>
782 </font>
783 </td>
829
830 <td valign=top >
831 <font face="lucida console" size=-1>
832 <a href=#MailErrorsTo>MailErrorsTo</a>
833 </font>
834 </td>
835
836 </tr>
837
838 <tr>
784839
785840 <td valign=top bgcolor=#005196>
786841 <font face="lucida console" size=-1>
787 <font color=white><b><a href=#Mail%20Adminis1a4d2b59><font color=white>Mail Administration</font></a></b></font>
788 </font>
789 </td>
790
791 </tr>
792
793 <tr>
794
795 <td valign=top >
796 <font face="lucida console" size=-1>
797 <a href=#SessionQuery85863960>SessionQueryForce</a>
798 </font>
799 </td>
800
801 <td valign=top >
802 <font face="lucida console" size=-1>
803 <a href=#MailHost>MailHost</a>
804 </font>
805 </td>
806
807 </tr>
808
809 <tr>
842 <font color=white><b><a href=#Developer%20Enc3495841><font color=white>Developer Environment</font></a></b></font>
843 </font>
844 </td>
845
846 <td valign=top >
847 <font face="lucida console" size=-1>
848 <a href=#MailAlertTo>MailAlertTo</a>
849 </font>
850 </td>
851
852 </tr>
853
854 <tr>
855
856 <td valign=top >
857 <font face="lucida console" size=-1>
858 <a href=#UseStrict>UseStrict</a>
859 </font>
860 </td>
861
862 <td valign=top >
863 <font face="lucida console" size=-1>
864 <a href=#MailAlertPer096b67a8>MailAlertPeriod</a>
865 </font>
866 </td>
867
868 </tr>
869
870 <tr>
871
872 <td valign=top >
873 <font face="lucida console" size=-1>
874 <a href=#Debug>Debug</a>
875 </font>
876 </td>
810877
811878 <td valign=top >
812879 <font face="lucida console" size=-1>
813880
814881 </font>
815882 </td>
816
817 <td valign=top >
818 <font face="lucida console" size=-1>
819 <a href=#MailFrom>MailFrom</a>
820 </font>
821 </td>
822
823 </tr>
824
825 <tr>
883
884 </tr>
885
886 <tr>
887
888 <td valign=top >
889 <font face="lucida console" size=-1>
890 <a href=#DebugBufferLb1013c71>DebugBufferLength</a>
891 </font>
892 </td>
826893
827894 <td valign=top bgcolor=#005196>
828895 <font face="lucida console" size=-1>
829 <font color=white><b><a href=#Developer%20Enc3495841><font color=white>Developer Environment</font></a></b></font>
830 </font>
831 </td>
832
833 <td valign=top >
834 <font face="lucida console" size=-1>
835 <a href=#MailErrorsTo>MailErrorsTo</a>
836 </font>
837 </td>
838
839 </tr>
840
841 <tr>
842
843 <td valign=top >
844 <font face="lucida console" size=-1>
845 <a href=#UseStrict>UseStrict</a>
846 </font>
847 </td>
848
849 <td valign=top >
850 <font face="lucida console" size=-1>
851 <a href=#MailAlertTo>MailAlertTo</a>
852 </font>
853 </td>
854
855 </tr>
856
857 <tr>
858
859 <td valign=top >
860 <font face="lucida console" size=-1>
861 <a href=#Debug>Debug</a>
862 </font>
863 </td>
864
865 <td valign=top >
866 <font face="lucida console" size=-1>
867 <a href=#MailAlertPer096b67a8>MailAlertPeriod</a>
868 </font>
869 </td>
870
871 </tr>
872
873 <tr>
874
875 <td valign=top >
876 <font face="lucida console" size=-1>
877 <a href=#DebugBufferL32fcff6d>DebugBufferLength</a>
878 </font>
879 </td>
896 <font color=white><b><a href=#File%20Uploads><font color=white>File Uploads</font></a></b></font>
897 </font>
898 </td>
899
900 </tr>
901
902 <tr>
903
904 <td valign=top >
905 <font face="lucida console" size=-1>
906 <a href=#PodComments>PodComments</a>
907 </font>
908 </td>
909
910 <td valign=top >
911 <font face="lucida console" size=-1>
912 <a href=#FileUploadMa625d7c4d>FileUploadMax</a>
913 </font>
914 </td>
915
916 </tr>
917
918 <tr>
919
920 <td valign=top >
921 <font face="lucida console" size=-1>
922 <a href=#CollectionItb0343456>CollectionItem</a>
923 </font>
924 </td>
925
926 <td valign=top >
927 <font face="lucida console" size=-1>
928 <a href=#FileUploadTeb83a1ea3>FileUploadTemp</a>
929 </font>
930 </td>
931
932 </tr>
933
934 <tr>
880935
881936 <td valign=top >
882937 <font face="lucida console" size=-1>
883938
884939 </font>
885940 </td>
886
887 </tr>
888
889 <tr>
890
891 <td valign=top >
892 <font face="lucida console" size=-1>
893 <a href=#PodComments>PodComments</a>
894 </font>
895 </td>
896
897 <td valign=top bgcolor=#005196>
898 <font face="lucida console" size=-1>
899 <font color=white><b><a href=#File%20Uploads><font color=white>File Uploads</font></a></b></font>
900 </font>
901 </td>
902
903 </tr>
904
905 <tr>
906
907 <td valign=top >
908 <font face="lucida console" size=-1>
909 <a href=#CollectionItb0343456>CollectionItem</a>
910 </font>
911 </td>
912
913 <td valign=top >
914 <font face="lucida console" size=-1>
915 <a href=#FileUploadMa625d7c4d>FileUploadMax</a>
916 </font>
917 </td>
918
919 </tr>
920
921 <tr>
922
923 <td valign=top >
924 <font face="lucida console" size=-1>
925
926 </font>
927 </td>
928
929 <td valign=top >
930 <font face="lucida console" size=-1>
931 <a href=#FileUploadTeb83a1ea3>FileUploadTemp</a>
932 </font>
933 </td>
934
941 <td>&nbsp;</td>
935942 </tr>
936943
937944 <tr>
12641271 </pre></font>
12651272
12661273 <p>
1274 <a name=HTTPOnlySess63d4d37d></a>
1275 <font face=verdana><font class=title size=-1 color=#555555><b>HTTPOnlySession</b></font>
1276 <font face="courier new" size=3><pre>
1277 </pre></font>default 0. Sets HttpOnly flag to session cookie to mitigate XSS attacks.
1278 Supported by most modern browsers, it only allows access to the
1279 session cookie by the server (ie NOT Javascript)
1280 <font face="courier new" size=3><pre>
1281 PerlSetVar HTTPOnlySession 1
1282 </pre></font>
1283
1284 <p>
12671285 <a name=ParanoidSess9085f1d5></a>
12681286 <font face=verdana><font class=title size=-1 color=#555555><b>ParanoidSession</b></font>
12691287 <font face="courier new" size=3><pre>
14681486 </pre></font>
14691487
14701488 <p>
1471 <a name=DebugBufferL32fcff6d></a>
1489 <a name=DebugBufferLb1013c71></a>
14721490 <font face=verdana><font class=title size=-1 color=#555555><b>DebugBufferLength</b></font>
14731491 <font face="courier new" size=3><pre>
14741492 </pre></font>Default 100, set this to the number of bytes of the
14841502 the debugging information.
14851503 <font face="courier new" size=3><pre>
14861504 </pre></font>For a demo of this functionality, try the
1487 <a href=eg/syntax_error.htm>./site/eg/syntax_error.htm</a> script, and turn buffering on.</font>
1505 <a href=eg/syntax_error.asp>./site/eg/syntax_error.asp</a> script, and turn buffering on.</font>
14881506
14891507 <p>
14901508 <a name=PodComments></a>
18171835 <font face="courier new" size=3><pre>
18181836 </pre></font>Default 0, if set creates $Request-&gt;Params object with combined
18191837 contents of $Request-&gt;QueryString and $Request-&gt;Form. This
1820 is for developer convenience simlar to <a href=cgi.html><font size=-1 face=verdana><b>CGI</b></font></a>.pm&#39;s param() method.
1838 is for developer convenience simlar to <a href=http://stein.cshl.org/WWW/software/CGI/cgi_docs.html><font size=-1 face=verdana><b>CGI.pm</b></font></a>&#39;s param() method.
18211839 <font face="courier new" size=3><pre>
18221840 PerlSetVar RequestParams 1
18231841 </pre></font>
21742192 </td>
21752193
21762194 </tr>
2177 <tr bgcolor=#063678>
2178 <td colspan=3 align=center width=80%>
2179 <font face=verdana color=white size=-1>
2180 Copyright &copy; 1998-2008,
2181 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
2182 </font>
2183 </td>
2184 </tr>
21852195 </table>
21862196
21872197 </td></tr>
77 PerlSetVar StatINCMatch 0
88 PerlSetVar Clean 0
99 PerlSetVar DynamicIncludes 1
10 PerlSetVar FileUploadMax 50000
10 PerlSetVar FileUploadMax 200000
1111 PerlSetVar FileUploadTemp 1
1212 PerlSetVar SessionQueryParse 0
1313 PerlSetVar SessionQuery 1
66 XMLSubsMatch => 'my:\w+',
77 GlobalPackage => 'Apache::ASP::Demo',
88 BufferingOn => 1,
9 FileUploadMax => 50000,
9 FileUploadMax => 200000,
1010 FileUploadTemp => 1,
1111 StateDir => '/tmp/aspcgidemo',
1212 );
3535 $q->checkbox_group(-name=>'extensions',
3636 -values=>['GIF','HTML','OTHER'],
3737 -defaults=>['HTML']
38 ).
39 $q->endform()
38 )
4039 %>
40 </form>
4141
4242 <%
4343 my $filehandle;
123123 'source.asp' => 'Handy source code viewer used to let you easily view the source of '.
124124 'the other asp scripts.',
125125
126 'ssi_filter.ssi' => 'Shows full SSI in action via Apache::Filter & Apache::SSI. You must compile '.
127 'your apache with stacked handlers and install these modules to see '.
128 ' this script',
126 # 'ssi_filter.ssi' => 'Shows full SSI in action via Apache::Filter & Apache::SSI. You must compile '.
127 # 'your apache with stacked handlers and install these modules to see '.
128 # ' this script',
129129
130130 'syntax_error.asp' => 'Demonstrates asp debugging with Debug 2 by creating a perl syntax error ',
131131
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
629626 </td>
630627
631628 </tr>
632 <tr bgcolor=#063678>
633 <td colspan=3 align=center width=80%>
634 <font face=verdana color=white size=-1>
635 Copyright &copy; 1998-2008,
636 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
637 </font>
638 </td>
639 </tr>
640629 </table>
641630
642631 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
281278
282279 <td valign=top >
283280 <font face="lucida console" size=-1>
284 <a href=#VBScript%20or%201d28c52b>VBScript or JScript supported?</a>
281 <a href=#VBScript%20or%20d51ff480>VBScript or JScript supported?</a>
285282 </font>
286283 </td>
287284
403400
404401 <td valign=top >
405402 <font face="lucida console" size=-1>
406 <a href=#How%20can%20I%20us9eb242f1>How can I use $Session to store complex data structures.</a>
403 <a href=#How%20can%20I%20us65e9eed9>How can I use $Session to store complex data structures.</a>
407404 </font>
408405 </td>
409406
576573 </font>
577574
578575 <p>
579 <a name=How%20can%20I%20us9eb242f1></a>
576 <a name=How%20can%20I%20us65e9eed9></a>
580577 <font face=verdana><font class=title size=-1 color=#555555><b>How can I use $Session to store complex data structures.</b></font>
581578 <font face="courier new" size=3><pre>
582579 </pre></font>Very carefully. Please read the $Session documentation in
588585 more than one level of indirection on the left side of
589586 an assignment like:
590587 <font face="courier new" size=3><pre>
591 $Session-&gt;{complex}{object} = $data;
588 BAD: $Session-&gt;{complex}{object} = $data;
592589 </pre></font>
593590
594591 <p>
653650 </font>
654651
655652 <p>
656 <a name=VBScript%20or%201d28c52b></a>
653 <a name=VBScript%20or%20d51ff480></a>
657654 <font face=verdana><font class=title size=-1 color=#555555><b>VBScript or JScript supported?</b></font>
658655 <font face="courier new" size=3><pre>
659 </pre></font>Yes, but not with this Perl module. For ASP with other scripting
660 languages besides Perl, you will need to go with a commercial vendor
661 in the UNIX world. Sun has such a solution.
662 Of course on Windows NT and Windows 2000, you get VBScript for free with IIS.
663 <font face="courier new" size=3><pre>
664 <a href="http://www.chilisoft.com">Sun ONE Active Server Pages (formerly Sun Chili!Soft ASP)</a>
665 </pre></font>
656 </pre></font>Only Perl scripting is supported with this module.</font>
666657
667658 <p>
668659 <a name=How%20is%20datab66fe735a></a>
693684 <font face=verdana><font class=title size=-1 color=#555555><b>How are file uploads handled?</b></font>
694685 <font face="courier new" size=3><pre>
695686 </pre></font>Please see the <a href=cgi.html><font size=-1 face=verdana><b>CGI</b></font></a> section. File uploads are implemented
696 through CGI.pm which is loaded at runtime only for this purpose.
687 through <a href=http://stein.cshl.org/WWW/software/CGI/cgi_docs.html><font size=-1 face=verdana><b>CGI.pm</b></font></a> which is loaded at runtime only for this purpose.
697688 This is the only time that CGI.pm will be loaded by Apache::ASP,
698689 which implements all other cgi-ish functionality natively. The
699690 rationale for not implementing file uploads natively is that
765756 </td>
766757
767758 </tr>
768 <tr bgcolor=#063678>
769 <td colspan=3 align=center width=80%>
770 <font face=verdana color=white size=-1>
771 Copyright &copy; 1998-2008,
772 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
773 </font>
774 </td>
775 </tr>
776759 </table>
777760
778761 </td></tr>
0
01
12
23 <html>
2728 -->
2829 </style>
2930
30
3131 </head>
3232 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
3333 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
34
35
36
3734
3835 <center>
3936 <table border=0 cellpadding=0 width=99% cellspacing=8>
244241 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
245242 <br>
246243 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
247 </center>
244
248245
249246 </center>
250247
309306 </td>
310307
311308 </tr>
312 <tr bgcolor=#063678>
313 <td colspan=3 align=center width=80%>
314 <font face=verdana color=white size=-1>
315 Copyright &copy; 1998-2008,
316 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
317 </font>
318 </td>
319 </tr>
320309 </table>
321310
322311 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
271268
272269 <td valign=top >
273270 <font face="lucida console" size=-1>
271 <a href=#Quick%20Start>Quick Start</a>
272 </font>
273 </td>
274
275 </tr>
276
277 <tr>
278
279 <td valign=top >
280 <font face="lucida console" size=-1>
281 <a href=#Download%20andf39a0410>Download and CPAN Install</a>
282 </font>
283 </td>
284
285 <td valign=top >
286 <font face="lucida console" size=-1>
287 <a href=#Build%20static4ba3b0e9>Build static Apache and mod_perl for Apache 1.3.x</a>
288 </font>
289 </td>
290
291 </tr>
292
293 <tr>
294
295 <td valign=top >
296 <font face="lucida console" size=-1>
297 <a href=#Regular%20Perlec959bce>Regular Perl Module Install</a>
298 </font>
299 </td>
300
301 <td valign=top >
302 <font face="lucida console" size=-1>
303 <a href=#Win32%20%2F%20Wind0f21256e>Win32 / Windows Install</a>
304 </font>
305 </td>
306
307 </tr>
308
309 <tr>
310
311 <td valign=top >
312 <font face="lucida console" size=-1>
313 <a href=#Modern%20Linuxee8c6645>Modern Linux Distributions</a>
314 </font>
315 </td>
316
317 <td valign=top >
318 <font face="lucida console" size=-1>
274319 <a href=#WinME%20%2F%2098%20%2Fce25d199>WinME / 98 / 95 flock() workaround</a>
275 </font>
276 </td>
277
278 </tr>
279
280 <tr>
281
282 <td valign=top >
283 <font face="lucida console" size=-1>
284 <a href=#Download%20and86dfc858>Download and CPAN Install</a>
285 </font>
286 </td>
287
288 <td valign=top >
289 <font face="lucida console" size=-1>
290 <a href=#Linux%20DSO%20Di0714bb20>Linux DSO Distributions</a>
291 </font>
292 </td>
293
294 </tr>
295
296 <tr>
297
298 <td valign=top >
299 <font face="lucida console" size=-1>
300 <a href=#Regular%20Perlc8e4234f>Regular Perl Module Install</a>
301 </font>
302 </td>
303
304 <td valign=top >
305 <font face="lucida console" size=-1>
306 <a href=#Build%20Apache0292e216>Build Apache and mod_perl</a>
307 </font>
308 </td>
309
310 </tr>
311
312 <tr>
313
314 <td valign=top >
315 <font face="lucida console" size=-1>
316 <a href=#Win32%20%2F%20Wind784e394f>Win32 / Windows Install</a>
317 </font>
318 </td>
319
320 <td valign=top >
321 <font face="lucida console" size=-1>
322 <a href=#Quick%20Start>Quick Start</a>
323320 </font>
324321 </td>
325322
336333 </pre></font>Often, installing the <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a> part of the Apache server
337334 can be the hardest part. If this is the case for you,
338335 check out the <a href=faq.html><font size=-1 face=verdana><b>FAQ</b></font></a> and SUPPORT sections for further help,
339 as well as the &quot;Build Apache&quot; notes in this section.
340 <font face="courier new" size=3><pre>
341 </pre></font>Please also see the mod_perl guide at <a href=http://perl.apache.org/guide>http://perl.apache.org/guide</a>
336 as well as the &quot;Modern Linux Distributions&quot; notes in this section.
337 <font face="courier new" size=3><pre>
338 </pre></font>Please also see the mod_perl site at <a href=http://perl.apache.org/>http://perl.apache.org/</a>
342339 which one ought to give a good read before undertaking
343340 a mod_perl project.</font>
344341
345342 <p>
346 <a name=Download%20and86dfc858></a>
343 <a name=Download%20andf39a0410></a>
347344 <font face=verdana><font class=title size=+0 color=#555555><b>Download and CPAN Install</b></font>
348345 <font face="courier new" size=3><pre>
349346 </pre></font>You may download the latest Apache::ASP from your nearest CPAN,
350347 and also:
351348 <font face="courier new" size=3><pre>
349 <a href=http://search.cpan.org/dist/Apache-ASP/>http://search.cpan.org/dist/Apache-ASP/</a>
352350 <a href=http://cpan.org/modules/by-module/Apache/>http://cpan.org/modules/by-module/Apache/</a>
353 <a href=ftp://ftp.duke.edu/pub/perl/modules/by-module/Apache/>ftp://ftp.duke.edu/pub/perl/modules/by-module/Apache/</a>
354351 </pre></font>As a Perl developer, you should make yourself familiar with
355352 the CPAN.pm module, and how it may be used to install
356353 Apache::ASP, and other related modules. The easiest way
379376 </pre></font>
380377
381378 <p>
382 <a name=Regular%20Perlc8e4234f></a>
379 <a name=Regular%20Perlec959bce></a>
383380 <font face=verdana><font class=title size=+0 color=#555555><b>Regular Perl Module Install</b></font>
384381 <font face="courier new" size=3><pre>
385382 </pre></font>If not doing the CPAN install, download Apache::ASP and install it using
395392 </pre></font>Please note that you must first have the Apache Web Server
396393 &amp; <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a> installed before using this module in a web server
397394 environment. The offline mode for building static html at
398 ./cgi/asp may be used with just perl.</font>
399
400 <p>
401 <a name=Win32%20%2F%20Wind784e394f></a>
402 <font face=verdana><font class=title size=+0 color=#555555><b>Win32 / Windows Install</b></font>
403 <font face="courier new" size=3><pre>
404 </pre></font>If you are on a Win32 platform, like WinNT or Windows 2000,
405 you can download the win32 binaries linked to from:
406 <font face="courier new" size=3><pre>
407 <a href=http://perl.apache.org/distributions.html>http://perl.apache.org/distributions.html</a>
408 </pre></font>From here, I would recommend the <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a> binary installation at:
409 <font face="courier new" size=3><pre>
410 <a href=ftp://theoryx5.uwinnipeg.ca/pub/other/>ftp://theoryx5.uwinnipeg.ca/pub/other/</a>
411 </pre></font>and install the latest perl-win32-bin-*.exe file.
412 <font face="courier new" size=3><pre>
413 </pre></font>Randy Kobes has graciously provided these, which include
414 compiled versions perl, mod_perl, apache, mod_ssl,
415 as well as all the modules required by Apache::ASP
416 and Apache::ASP itself.
417 <font face="courier new" size=3><pre>
418 </pre></font>You may also try the more recent Perl-5.8-win32-bin.exe
419 distribution which is built on Apache 2. This should be
420 treated as BETA release software until mod_perl 2.x is
421 released as stable. Some notes from Randy Kobes about
422 getting this release to work are here:
423 <font face="courier new" size=3><pre>
424 After installing this distribution, in Apache2\conf\perl.conf
425 (pulled in via Apache2\conf\httpd.conf) there&#39;s directives that
426 have Apache::ASP handle files placed under the Apache2\asp\
427 directory. There should be a sample Apache::ASP script there,
428 printenv.html, accessed as <a href=http://127.0.0.1/asp/printenv.html>http://127.0.0.1/asp/printenv.html</a>
429 which, if working, will print out your environment variables.
395 ./cgi/asp-perl may be used with just perl.</font>
396
397 <p>
398 <a name=Modern%20Linuxee8c6645></a>
399 <font face=verdana><font class=title size=+0 color=#555555><b>Modern Linux Distributions</b></font>
400 <font face="courier new" size=3><pre>
401 </pre></font>If you have a modern Linux distribution like CentOS or Ubuntu,
402 you will likely have the easiest path by using the repository tools to
403 automatically install <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a> and Apache before installing Apache::ASP via CPAN.
404 <font face="courier new" size=3><pre>
405 </pre></font>For example for CentOS, this will install mod_perl into your apache httpd, the latter
406 likely being installed already by default on your server:
407 <font face="courier new" size=3><pre>
408 bash&gt; sudo yum install mod_perl-devel.x86_64
409 </pre></font>For Ubuntu this would be done like this:
410 <font face="courier new" size=3><pre>
411 bash&gt; sudo apt-get install libapache2-mod-perl2
430412 </pre></font>
431
432 <p>
433 <a name=WinME%20%2F%2098%20%2Fce25d199></a>
434 <font face=verdana><font class=title size=+0 color=#555555><b>WinME / 98 / 95 flock() workaround</b></font>
435 <font face="courier new" size=3><pre>
436 </pre></font>For those on desktop Windows operation systems, Apache::ASP v2.25 and
437 later needs a special work around for the lack of flock() support
438 on these systems. Please add this to your Apache httpd.conf to
439 fix this problem after <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a> is installed:
440 <font face="courier new" size=3><pre>
441 &lt;Perl&gt;
442 *CORE::GLOBAL::flock = sub { 1 };
443 &lt;/Perl&gt;
444 PerlModule Apache::ASP
445 </pre></font>Please be sure to add this configuration before Apache::ASP is loaded
446 via PerlModule, or a PerlRequire statement.</font>
447
448 <p>
449 <a name=Linux%20DSO%20Di0714bb20></a>
450 <font face=verdana><font class=title size=+0 color=#555555><b>Linux DSO Distributions</b></font>
451 <font face="courier new" size=3><pre>
452 </pre></font>If you have a linux distribution, like a RedHat Linux server,
453 with an RPM style Apache + <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a>, seriously consider building
454 a static version of the httpd server yourself, not DSO.
455 DSO is marked as experimental for mod_perl, and often does
456 not work, resulting in &quot;no request object&quot; error messages,
457 and other oddities, and are terrible to debug, because of
458 the strange kinds of things that can go wrong.</font>
459
460 <p>
461 <a name=Build%20Apache0292e216></a>
462 <font face=verdana><font class=title size=+0 color=#555555><b>Build Apache and mod_perl</b></font>
463 <font face="courier new" size=3><pre>
464 </pre></font>For a quick build of apache, there is a script in the distribution at
465 ./make_httpd/build_httpds.sh that can compile a statically linked
466 Apache with mod_ssl and <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a>. Just drop the sources into the
467 make_httpd directory, configure the environments as appropriate,
468 and execute the script like this:
469 <font face="courier new" size=3><pre>
470 make_httpd&gt; ./build_httpds.sh
471 </pre></font>You might also find helpful a couple items:
472 <font face="courier new" size=3><pre>
473 <a href="http://perl.apache.org/guide/install.html">Stas&#39;s mod_perl guide install section</a>
474
475 <a href="http://www.apachetoolbox.com/">Apache Toolbox</a>
476 </pre></font>People have been using Apache Toolbox to automate their
477 complex builds with great success.</font>
478413
479414 <p>
480415 <a name=Quick%20Start></a>
512447 can run the scripts in ./site/eg/ without any errors. Common
513448 problems can be found in the <a href=faq.html><font size=-1 face=verdana><b>FAQ</b></font></a> section.</font>
514449
450 <p>
451 <a name=Build%20static4ba3b0e9></a>
452 <font face=verdana><font class=title size=+0 color=#555555><b>Build static Apache and mod_perl for Apache 1.3.x</b></font>
453 <font face="courier new" size=3><pre>
454 </pre></font>For a quick build of apache, there is a script in the distribution at
455 ./make_httpd/build_httpds.sh that can compile a statically linked
456 Apache with mod_ssl and <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a>. Just drop the sources into the
457 make_httpd directory, configure the environments as appropriate,
458 and execute the script like this:
459 <font face="courier new" size=3><pre>
460 make_httpd&gt; ./build_httpds.sh
461 </pre></font>You might also find helpful a couple items:
462 <font face="courier new" size=3><pre>
463 <a href="http://perl.apache.org/guide/install.html">Stas&#39;s mod_perl guide install section</a>
464
465 <a href="http://www.apachetoolbox.com/">Apache Toolbox</a>
466 </pre></font>People have been using Apache Toolbox to automate their
467 complex builds of Apache 1.3.x with great success.</font>
468
469 <p>
470 <a name=Win32%20%2F%20Wind0f21256e></a>
471 <font face=verdana><font class=title size=+0 color=#555555><b>Win32 / Windows Install</b></font>
472 <font face="courier new" size=3><pre>
473 </pre></font>If you are on a Win32 platform, like WinNT or Windows 2000,
474 you can download the win32 binaries linked to from:
475 <font face="courier new" size=3><pre>
476 <a href=http://perl.apache.org/download/binaries.html#Win32>http://perl.apache.org/download/binaries.html#Win32</a>
477 </pre></font>and install the latest perl-win32-bin-*.exe file.
478 <font face="courier new" size=3><pre>
479 </pre></font>Randy Kobes has graciously provided these, which include
480 compiled versions perl, <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a>, apache, mod_ssl,
481 as well as all the modules required by Apache::ASP
482 and Apache::ASP itself.
483 <font face="courier new" size=3><pre>
484 </pre></font>After installing this distribution, in Apache2\conf\perl.conf
485 (pulled in via Apache2\conf\httpd.conf) there&#39;s directives that
486 have Apache::ASP handle files placed under the Apache2\asp\
487 directory. There should be a sample Apache::ASP script there,
488 printenv.html, accessed as <a href=http://127.0.0.1/asp/printenv.html>http://127.0.0.1/asp/printenv.html</a>
489 which, if working, will print out your environment variables.</font>
490
491 <p>
492 <a name=WinME%20%2F%2098%20%2Fce25d199></a>
493 <font face=verdana><font class=title size=+0 color=#555555><b>WinME / 98 / 95 flock() workaround</b></font>
494 <font face="courier new" size=3><pre>
495 </pre></font>For those on desktop Windows operation systems, Apache::ASP v2.25 and
496 later needs a special work around for the lack of flock() support
497 on these systems. Please add this to your Apache httpd.conf to
498 fix this problem after <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a> is installed:
499 <font face="courier new" size=3><pre>
500 &lt;Perl&gt;
501 *CORE::GLOBAL::flock = sub { 1 };
502 &lt;/Perl&gt;
503 PerlModule Apache::ASP
504 </pre></font>Please be sure to add this configuration before Apache::ASP is loaded
505 via PerlModule, or a PerlRequire statement.</font>
506
515507
516508 </font>
517509 </td>
521513 </td>
522514
523515 </tr>
524 <tr bgcolor=#063678>
525 <td colspan=3 align=center width=80%>
526 <font face=verdana color=white size=-1>
527 Copyright &copy; 1998-2008,
528 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
529 </font>
530 </td>
531 </tr>
532516 </table>
533517
534518 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
256253 <font face="courier new" size=3><pre>
257254 </pre></font>Other honorable mentions include:
258255 <font face="courier new" size=3><pre>
259 !! Doug MacEachern, for moral support and of course mod_perl
256 !! Gregory Youngblood, Thanos Chatziathanassiou, &amp; Tsirkin Evgeny for keeping the flame alive!
257
258 :) Doug MacEachern, for moral support and of course mod_perl
260259 :) Helmut Zeilinger, Skylos, John Drago, and Warren Young for their help in the community
261260 :) Randy Kobes, for the win32 binaries, and for always being the epitome of helpfulness
262261 :) Francesco Pasqualini, for bug fixes with stand alone CGI mode on Win32
330329 </td>
331330
332331 </tr>
333 <tr bgcolor=#063678>
334 <td colspan=3 align=center width=80%>
335 <font face=verdana color=white size=-1>
336 Copyright &copy; 1998-2008,
337 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
338 </font>
339 </td>
340 </tr>
341332 </table>
342333
343334 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
247244
248245 <font face=verdana><font class=title size=+1 color=#555555><b>LICENSE</b></font>
249246 <font face="courier new" size=3><pre>
250 </pre></font>Copyright (c) 1998-2008, Josh Chamas, Chamas Enterprises Inc.
251 All rights reserved. This program is free software; you can
247 </pre></font>Copyright (c) 1998-2018, Josh Chamas
248 <font face="courier new" size=3><pre>
249 </pre></font>All rights reserved. This program is free software; you can
252250 redistribute it and/or modify it under the same terms as Perl itself.
253251 <font face="courier new" size=3><pre>
254252 </pre></font>Apache::ASP is a perl native port of Active Server Pages for Apache
262260 </td>
263261
264262 </tr>
265 <tr bgcolor=#063678>
266 <td colspan=3 align=center width=80%>
267 <font face=verdana color=white size=-1>
268 Copyright &copy; 1998-2008,
269 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
270 </font>
271 </td>
272 </tr>
273263 </table>
274264
275265 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
16631660 <font face="courier new" size=3><pre>
16641661 while(read($Request-&gt;Form(&#39;file_field_name&#39;), $data, 1024)) {};
16651662 </pre></font>For more information, please see the <a href=cgi.html><font size=-1 face=verdana><b>CGI</b></font></a> / File Upload section,
1666 as file uploads are implemented via the CGI.pm module. An
1663 as file uploads are implemented via the <a href=http://stein.cshl.org/WWW/software/CGI/cgi_docs.html><font size=-1 face=verdana><b>CGI.pm</b></font></a> module. An
16671664 example can be found in the installation
16681665 samples <a href=eg/file_upload.asp>./site/eg/file_upload.asp</a></font>
16691666
16741671 </pre></font>API extension. If RequestParams <a href=config.html><font size=-1 face=verdana><b>CONFIG</b></font></a> is set, the $Request-&gt;Params
16751672 object is created with combined contents of $Request-&gt;QueryString
16761673 and $Request-&gt;Form. This is for developer convenience simlar
1677 to <a href=cgi.html><font size=-1 face=verdana><b>CGI</b></font></a>.pm&#39;s param() method. Just like for $Response-&gt;Form,
1674 to <a href=http://stein.cshl.org/WWW/software/CGI/cgi_docs.html><font size=-1 face=verdana><b>CGI.pm</b></font></a>&#39;s param() method. Just like for $Response-&gt;Form,
16781675 one could create a nice alias like:
16791676 <font face="courier new" size=3><pre>
16801677 # in global.asa
20622059 </td>
20632060
20642061 </tr>
2065 <tr bgcolor=#063678>
2066 <td colspan=3 align=center width=80%>
2067 <font face=verdana color=white size=-1>
2068 Copyright &copy; 1998-2008,
2069 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
2070 </font>
2071 </td>
2072 </tr>
20732062 </table>
20742063
20752064 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
314311 </td>
315312
316313 </tr>
317 <tr bgcolor=#063678>
318 <td colspan=3 align=center width=80%>
319 <font face=verdana color=white size=-1>
320 Copyright &copy; 1998-2008,
321 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
322 </font>
323 </td>
324 </tr>
325314 </table>
326315
327316 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
262259 <td valign=top >
263260 <font face="lucida console" size=-1>
264261 <a href=#Articles>Articles</a>
265 </font>
266 </td>
267
268 <td valign=top >
269 <font face="lucida console" size=-1>
270 <a href=#Presentation92f96031>Presentations</a>
271 </font>
272 </td>
273
274 </tr>
275
276 <tr>
277
278 <td valign=top >
279 <font face="lucida console" size=-1>
280 <a href=#Benchmarking>Benchmarking</a>
281262 </font>
282263 </td>
283264
323304 </pre></font>
324305
325306 <p>
326 <a name=Benchmarking></a>
327 <font face=verdana><font class=title size=+0 color=#555555><b>Benchmarking</b></font>
328 <font face="courier new" size=3><pre>
329 <a href="http://chamas.com/bench/">Apache Hello World Benchmarks</a>
330 </pre></font>
331
332 <p>
333307 <a name=Books></a>
334308 <font face=verdana><font class=title size=+0 color=#555555><b>Books</b></font>
335309 <font face="courier new" size=3><pre>
341315 </pre></font>
342316
343317 <p>
344 <a name=Presentation92f96031></a>
345 <font face=verdana><font class=title size=+0 color=#555555><b>Presentations</b></font>
346 <font face="courier new" size=3><pre>
347 <a href="http://www.chamas.com/asp/OSS_convention_2000.pps">Apache::ASP Tutorial, 2000 Open Source Convention ( PowerPoint )</a>
348
349 <a href="http://www.chamas.com/asp/OSS_convention_2001.zip">Advanced Apache::ASP Tutorial, 2001 Open Source Convention ( Zipped PDF )</a>
350
351 <a href="http://www.chamas.com/asp/OSS_convention_2001.pdf">Advanced Apache::ASP Tutorial, 2001 Open Source Convention ( PDF )</a>
352 </pre></font>
353
354 <p>
355318 <a name=Reference%20Ca8ece5e1d></a>
356319 <font face=verdana><font class=title size=+0 color=#555555><b>Reference Cards</b></font>
357320 <font face="courier new" size=3><pre>
364327 <font face="courier new" size=3><pre>
365328 <a href="http://perl.apache.org">mod_perl Apache web module</a>
366329
367 <a href="http://perl.apache.org/guide/">mod_perl Guide</a>
330 <a href="http://perl.apache.org/guide/">mod_perl 1.x Guide</a>
368331
369332 <a href="http://www.perl.com">Perl Programming Language</a>
370333
380343 </td>
381344
382345 </tr>
383 <tr bgcolor=#063678>
384 <td colspan=3 align=center width=80%>
385 <font face=verdana color=white size=-1>
386 Copyright &copy; 1998-2008,
387 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
388 </font>
389 </td>
390 </tr>
391346 </table>
392347
393348 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
252249 with that client, the web server sets, and the web client returns
253250 a 32 byte session id identifier cookie. This implementation
254251 is very secure and may be used in secure HTTPS transactions,
255 and made stronger with SecureSession and ParanoidSession
256 settings (see <a href=config.html><font size=-1 face=verdana><b>CONFIG</b></font></a> ).
252 and made stronger with SecureSession, HTTPOnlySession and
253 ParanoidSession settings (see <a href=config.html><font size=-1 face=verdana><b>CONFIG</b></font></a> ).
257254 <font face="courier new" size=3><pre>
258255 </pre></font>However good cookies are for this kind of persistent
259256 state management between HTTP requests, they have long
334331 </td>
335332
336333 </tr>
337 <tr bgcolor=#063678>
338 <td colspan=3 align=center width=80%>
339 <font face=verdana color=white size=-1>
340 Copyright &copy; 1998-2008,
341 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
342 </font>
343 </td>
344 </tr>
345334 </table>
346335
347336 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
250247 </pre></font>What follows is a list of public sites that are using
251248 Apache::ASP. If you use the software for your site, and
252249 would like to show your support of the software by being listed,
253 please send your link to asp-dev [at] chamas.com
250 please send your link to asp[at]perl.apache.org
254251 <font face="courier new" size=3><pre>
255252 </pre></font>For a list of testimonials of those using Apache::ASP, please see the <a href=testimonials.html><font size=-1 face=verdana><b>TESTIMONIALS</b></font></a> section.
256253 <font face="courier new" size=3><pre>
257 <a href="http://www.ch.pwr.wroc.pl/~bruno/testy/">Zapisy - Testy</a>
254 <a href="http://www.personio.com/home.asp">PERSONiO Match</a>
255
256 <a href="http://www.gutscheinwurst.de">gutscheinwurst.de - a German voucher community</a>
258257
259258 <a href="http://www.salesjobs.com">SalesJobs.com</a>
260259
260 <a href="http://www.hanschur.de">hanschur.de</a>
261
262 <a href="http://www.webtist.de">Webtist</a>
263
261264 <a href="http://www.freelotto.com">FreeLotto</a>
262265
263266 <a href="http://www.hungariantop1000.com">Hungarian TOP1000</a>
270273
271274 <a href="http://webtime-project.net">WebTime</a>
272275
273 <a href="http://meetomatic.com/about.asp">Meet-O-Matic</a>
274
275 <a href="http://chamas.com/bench/">Apache Hello World Benchmarks</a>
276
277276 <a href="http://altercom.com/">AlterCom, Advanced Web Hosting</a>
278277
279278 <a href="http://www.AmericanGamers.com/">AmericanGamers.com</a>
280279
281280 <a href="http://www.esstec.be/">ESSTECwebservices</a>
282281
283 <a href="http://comclub.dyndns.org:8081/sqlref/">SQLRef</a>
284
285 <a href="http://www.b2bouygtel.com">Bouygues Telecom Enterprises</a>
286
287282 <a href="http://www.alumni.net">Alumni.NET</a>
288283
289284 <a href="http://www.animewallpapers.com/">Anime Wallpapers dot com</a>
290285
291 <a href="http://www.chamas.com">Chamas Enterprises Inc.</a>
292
293286 <a href="http://www.cine.gr">Cine.gr</a>
294287
295288 <a href="http://www.condo-mart.com">Condo-Mart Web Service</a>
302295
303296 <a href="http://www.integra.ru/">Integra</a>
304297
305 <a href="http://www.gielda.szczecin.pl">Internetowa Gielda Samochodowa</a>
306
307298 <a href="http://www.moneyfm.gr">Money FM</a>
308299
309300 <a href="http://www.motorsport.com">Motorsport.com</a>
317308 <a href="http://www.p4a.com">Prices for Antiques</a>
318309
319310 <a href="http://www.redhat.com/apps/support/">redhat.com | support</a>
320
321 <a href="http://portal.samara.ru/">Samara.RU</a>
322311
323312 <a href="http://www.spotlight.com.au">Spotlight</a>
324313
333322 </td>
334323
335324 </tr>
336 <tr bgcolor=#063678>
337 <td colspan=3 align=center width=80%>
338 <font face=verdana color=white size=-1>
339 Copyright &copy; 1998-2008,
340 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
341 </font>
342 </td>
343 </tr>
344325 </table>
345326
346327 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
294291 called with an args parameter. However, if you
295292 want all your includes to be compiled as subs and
296293 dynamically executed at runtime, turn the DynamicIncludes
297 config option on as documented above.
298 <font face="courier new" size=3><pre>
299 </pre></font>That is not all! SSI is full featured. One of the
300 things missing above is the
294 config option on as documented above.</font>
295
296 <hr size=1>
297 <table width=100% border=0 cellpadding=1 cellspacing=3>
298 <tr>
299 <td valign=top><font face="lucida console" size=-1>
300
301 <tr>
302
303 <td valign=top >
304 <font face="lucida console" size=-1>
305 <a href=#Apache%3A%3ASSI%203398279a>Apache::SSI for mod_perl 1.3.x only</a>
306 </font>
307 </td>
308
309 <td valign=top >
310 <font face="lucida console" size=-1>
311 <a href=#SSI%20with%20modfdac5dd6>SSI with mod_filter in Apache 2</a>
312 </font>
313 </td>
314
315 </tr>
316
317 </table>
318 <hr size=1>
319 <p>
320
321 <p>
322 <a name=Apache%3A%3ASSI%203398279a></a>
323 <font face=verdana><font class=title size=+0 color=#555555><b>Apache::SSI for mod_perl 1.3.x only</b></font>
324 <font face="courier new" size=3><pre>
325 </pre></font>One of the things missing above is the
301326 <font face="courier new" size=3><pre>
302327 &lt;!--#include virtual=filename.cgi--&gt;
303 </pre></font>tag. This and many other SSI code extensions are available
328 </pre></font>tag. This and many other <a href=ssi.html><font size=-1 face=verdana><b>SSI</b></font></a> code extensions are available
304329 by filtering Apache::ASP output through Apache::SSI via
305 the Apache::Filter and the Filter config options. For
306 more information on how to wire Apache::ASP and Apache::SSI
330 the Apache::Filter and the Filter config options, available in <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a> 1.3.x / Apache 1.3.x.
331 Unfortunately this functionality is not available with mod_perl 2 / Apache 2.
332 <font face="courier new" size=3><pre>
333 </pre></font>For more information on how to wire Apache::ASP and Apache::SSI
307334 together, please see the Filter config option documented
308335 above. Also please see Apache::SSI for further information
309336 on the capabilities it offers.</font>
337
338 <p>
339 <a name=SSI%20with%20modfdac5dd6></a>
340 <font face=verdana><font class=title size=+0 color=#555555><b>SSI with mod_filter in Apache 2</b></font>
341 <font face="courier new" size=3><pre>
342 </pre></font>Apache 2 offers chained filters. It may be possible to chain filters to
343 Apache::ASP output through mod_filter for <a href=ssi.html><font size=-1 face=verdana><b>SSI</b></font></a> processing:
344 <font face="courier new" size=3><pre>
345 <a href=http://httpd.apache.org/docs/2.1/mod/mod_filter.html>http://httpd.apache.org/docs/2.1/mod/mod_filter.html</a>
346 </pre></font>
347
310348
311349 </font>
312350 </td>
316354 </td>
317355
318356 </tr>
319 <tr bgcolor=#063678>
320 <td colspan=3 align=center width=80%>
321 <font face=verdana color=white size=-1>
322 Copyright &copy; 1998-2008,
323 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
324 </font>
325 </td>
326 </tr>
327357 </table>
328358
329359 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
275272
276273 <td valign=top >
277274 <font face="lucida console" size=-1>
278 <a href=#Do%20not%20definc430b103>Do not define subroutines in scripts.</a>
275 <a href=#Do%20not%20definc4a0555f>Do not define subroutines in scripts.</a>
279276 </font>
280277 </td>
281278 <td>&nbsp;</td>
310307 For now, keep setting it.</font>
311308
312309 <p>
313 <a name=Do%20not%20definc430b103></a>
310 <a name=Do%20not%20definc4a0555f></a>
314311 <font face=verdana><font class=title size=+0 color=#555555><b>Do not define subroutines in scripts.</b></font>
315312 <font face="courier new" size=3><pre>
316313 </pre></font>DO NOT add subroutine declarations in scripts. Apache::ASP is optimized
337334 global.asa, or you may create a perl package or module to share
338335 with your scripts. For more on perl objects &amp; modules, please see:
339336 <font face="courier new" size=3><pre>
340 <a href=http://www.perldoc.com/perl5.8.0/pod/perlobj.html>http://www.perldoc.com/perl5.8.0/pod/perlobj.html</a>
337 <a href=http://perldoc.perl.org/perlobj.html>http://perldoc.perl.org/perlobj.html</a>
341338 </pre></font>
342339
343340 <p>
392389 </td>
393390
394391 </tr>
395 <tr bgcolor=#063678>
396 <td colspan=3 align=center width=80%>
397 <font face=verdana color=white size=-1>
398 Copyright &copy; 1998-2008,
399 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
400 </font>
401 </td>
402 </tr>
403392 </table>
404393
405394 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
273270
274271 <td valign=top >
275272 <font face="lucida console" size=-1>
276 <a href=#Mailing%20Listdd8fcb84>Mailing List Archives</a>
273 <a href=#Mailing%20List4c17e5ed>Mailing List Archives</a>
277274 </font>
278275 </td>
279276
295292
296293 <td valign=top >
297294 <font face="lucida console" size=-1>
298 <a href=#GrokThis.net>GrokThis.net</a>
295 <a href=#OmniTI>OmniTI</a>
299296 </font>
300297 </td>
301298
311308
312309 <td valign=top >
313310 <font face="lucida console" size=-1>
314 <a href=#OmniTI>OmniTI</a>
311 <a href=#TUX%20IT%20AG>TUX IT AG</a>
315312 </font>
316313 </td>
317314
324321
325322 </font>
326323 </td>
327
328 <td valign=top >
329 <font face="lucida console" size=-1>
330 <a href=#TUX%20IT%20AG>TUX IT AG</a>
331 </font>
332 </td>
333
324 <td>&nbsp;</td>
334325 </tr>
335326
336327 <tr>
353344 </font>
354345
355346 <p>
356 <a name=Mailing%20Listdd8fcb84></a>
347 <a name=Mailing%20List4c17e5ed></a>
357348 <font face=verdana><font class=title size=-1 color=#555555><b>Mailing List Archives</b></font>
358349 <font face="courier new" size=3><pre>
359350 </pre></font>Try the Apache::ASP mailing list archive first when working
367358 <a href=http://www.mail-archive.com/asp%40perl.apache.org/>http://www.mail-archive.com/asp%40perl.apache.org/</a>
368359 </pre></font>The mod_perl mailing list archives are located at:
369360 <font face="courier new" size=3><pre>
370 <a href=http://forum.swarthmore.edu/epigone/modperl>http://forum.swarthmore.edu/epigone/modperl</a>
371 <a href=http://www.egroups.com/group/modperl/>http://www.egroups.com/group/modperl/</a>
361 <a href=http://mail-archives.apache.org/mod_mbox/perl-modperl/>http://mail-archives.apache.org/mod_mbox/perl-modperl/</a>
372362 </pre></font>
373363
374364 <p>
390380 <a name=Donations></a>
391381 <font face=verdana><font class=title size=-1 color=#555555><b>Donations</b></font>
392382 <font face="courier new" size=3><pre>
393 </pre></font>Apache::ASP is freely distributed under the terms of the GPL license
383 </pre></font>Apache::ASP is freely distributed under the terms of the Perl artistic license
394384 ( see the <a href=license.html><font size=-1 face=verdana><b>LICENSE</b></font></a> section ). If you would like to donate time to
395385 the project, please get involved on the Apache::ASP Mailing List,
396386 and submit ideas, bug fixes and patches for the core system,
404394 </pre></font>If you would like commercial support for Apache::ASP, please
405395 check out any of the following listed companies. Note that
406396 this is not an endorsement, and if you would like your company
407 listed here, please email asp-dev [at] chamas.com with your information.</font>
397 listed here, please email asp[at]perl.apache.org with your information.</font>
408398
409399 <p>
410400 <a name=AlterCom></a>
423413 </pre></font>Our hosting services support Apache:ASP along with Mod_Perl, PHP and MySQL.
424414 <font face="courier new" size=3><pre>
425415 <a href=http://www.Cyberchute.com>http://www.Cyberchute.com</a>
426 </pre></font>
427
428 <p>
429 <a name=GrokThis.net></a>
430 <font face=verdana><font class=title size=-1 color=#555555><b>GrokThis.net</b></font>
431 <font face="courier new" size=3><pre>
432 </pre></font>Web hosting provider. Specializing in <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a> and mod_python
433 hosting, we allow users to edit their own Apache configuration files
434 and run their own Apache servers.
435 <font face="courier new" size=3><pre>
436 <a href=http://grokthis.net>http://grokthis.net</a>
437416 </pre></font>
438417
439418 <p>
468447 </td>
469448
470449 </tr>
471 <tr bgcolor=#063678>
472 <td colspan=3 align=center width=80%>
473 <font face=verdana color=white size=-1>
474 Copyright &copy; 1998-2008,
475 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
476 </font>
477 </td>
478 </tr>
479450 </table>
480451
481452 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
360357 that mixes HTML &amp; perl modes in a single buffer, check
361358 out the editors/mmm-asp-perl.el file in distribution.
362359
363 * Microsoft Frontpage
364
365360 * Vim, special syntax support with editors/aasp.vim file in distribution.
366361
367362 * UltraEdit32 ( <a href=http://www.ultraedit.com/>http://www.ultraedit.com/</a> ) has syntax highlighting,
379374 </td>
380375
381376 </tr>
382 <tr bgcolor=#063678>
383 <td colspan=3 align=center width=80%>
384 <font face=verdana color=white size=-1>
385 Copyright &copy; 1998-2008,
386 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
387 </font>
388 </td>
389 </tr>
390377 </table>
391378
392379 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
270267
271268 <td valign=top >
272269 <font face="lucida console" size=-1>
270 <a href=#WebTime>WebTime</a>
271 </font>
272 </td>
273
274 </tr>
275
276 <tr>
277
278 <td valign=top >
279 <font face="lucida console" size=-1>
280 <a href=#Anime%20Wallpae2af14a7>Anime Wallpaper at Anime Cubed</a>
281 </font>
282 </td>
283
284 <td valign=top >
285 <font face="lucida console" size=-1>
273286 <a href=#David%20Kulp>David Kulp</a>
274287 </font>
275288 </td>
280293
281294 <td valign=top >
282295 <font face="lucida console" size=-1>
296 <a href=#gutscheinwur94ad2cb5>gutscheinwurst.de</a>
297 </font>
298 </td>
299
300 <td valign=top >
301 <font face="lucida console" size=-1>
302 <a href=#MFM%20Commmunid4238eea>MFM Commmunication Software, Inc.</a>
303 </font>
304 </td>
305
306 </tr>
307
308 <tr>
309
310 <td valign=top >
311 <font face="lucida console" size=-1>
283312 <a href=#D.%20L.%20Fox>D. L. Fox</a>
284313 </font>
285314 </td>
286315
287316 <td valign=top >
288317 <font face="lucida console" size=-1>
289 <a href=#MFM%20Commmunid4238eea>MFM Commmunication Software, Inc.</a>
318 <a href=#Planet%20of%20Mu475a7246>Planet of Music</a>
290319 </font>
291320 </td>
292321
302331
303332 <td valign=top >
304333 <font face="lucida console" size=-1>
305 <a href=#Planet%20of%20Mu475a7246>Planet of Music</a>
334 <a href=#Cine.gr>Cine.gr</a>
306335 </font>
307336 </td>
308337
313342 <td valign=top >
314343 <font face="lucida console" size=-1>
315344 <a href=#Concept%20Onli9b9ce434>Concept Online Ltd.</a>
316 </font>
317 </td>
318
319 <td valign=top >
320 <font face="lucida console" size=-1>
321 <a href=#Cine.gr>Cine.gr</a>
322 </font>
323 </td>
324
325 </tr>
326
327 <tr>
328
329 <td valign=top >
330 <font face="lucida console" size=-1>
331 <a href=#WebTime>WebTime</a>
332345 </font>
333346 </td>
334347 <td>&nbsp;</td>
354367 questions.
355368 <font face="courier new" size=3><pre>
356369 -- Tom Lancaster, Red Hat
370 </pre></font>
371
372 <p>
373 <a name=Anime%20Wallpae2af14a7></a>
374 <font face=verdana><font class=title size=+0 color=#555555><b>Anime Wallpaper at Anime Cubed</b></font>
375 <font face="courier new" size=3><pre>
376 </pre></font>Your suite has got our old <a href=cgi.html><font size=-1 face=verdana><b>CGI</b></font></a> implementation beat, hands down. Our site is divided into two main areas, each run by a separate developer, and the Apache::ASP section runs head and shoulders above the other side. Anyone who is still using anything but your product to implement their webpages seriously needs to take a look at how versatile and powerful Apache::ASP is. Thanks again for such great work!
377 <font face="courier new" size=3><pre>
378 -- Al from &#39;Anime Wallpaper at Anime Cubed&#39;, <a href=http://www.animecubed.com/wallpapers/>http://www.animecubed.com/wallpapers/</a>
379 </pre></font>
380
381 <p>
382 <a name=gutscheinwur94ad2cb5></a>
383 <font face=verdana><font class=title size=+0 color=#555555><b>gutscheinwurst.de</b></font>
384 <font face="courier new" size=3><pre>
385 </pre></font>I am the web master of <a href=http://www.gutscheinwurst.de>http://www.gutscheinwurst.de</a> , a German voucher community.
386 We use Apache::Asp to run our backend &amp; administration servers for the system. We started using Apache::ASP to see whether it is a valid alternative to IIS legacy systems. So far all expectations in regard of performance, ease of development and integration have been fulfilled or exceeded.
387 Thank&#39;s for such a great product :)
388 <font face="courier new" size=3><pre>
389 -- Johnannes Leimbach
357390 </pre></font>
358391
359392 <p>
465498 </pre></font>Apache::ASP has been a great tool. Just a little
466499 background.... the whole site had been in cgi flat files when I started
467500 here. I was looking for a technology that would allow me to write the
468 objects and NEVER invoke <a href=cgi.html><font size=-1 face=verdana><b>CGI</b></font></a>.pm... I found it and hopefuly I will be able to
501 objects and NEVER invoke <a href=http://stein.cshl.org/WWW/software/CGI/cgi_docs.html><font size=-1 face=verdana><b>CGI.pm</b></font></a>... I found it and hopefuly I will be able to
469502 implement this every site I go to.
470503 <font face="courier new" size=3><pre>
471504 </pre></font>When I got here there was a huge argument about needing a game engine
496529 </td>
497530
498531 </tr>
499 <tr bgcolor=#063678>
500 <td colspan=3 align=center width=80%>
501 <font face=verdana color=white size=-1>
502 Copyright &copy; 1998-2008,
503 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
504 </font>
505 </td>
506 </tr>
507532 </table>
508533
509534 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
250247 </pre></font>There is no specific time frame in which these things will be
251248 implemented. Please let me know if any of these is of particular
252249 interest to you, and I will give it higher priority.</font>
253
254 <hr size=1>
255 <table width=100% border=0 cellpadding=1 cellspacing=3>
256 <tr>
257 <td valign=top><font face="lucida console" size=-1>
258
259 <tr>
260
261 <td valign=top >
262 <font face="lucida console" size=-1>
263 <a href=#WILL%20BE%20DONEa8ad4af6>WILL BE DONE </a>
264 </font>
265 </td>
266
267 <td valign=top >
268 <font face="lucida console" size=-1>
269 <a href=#MAY%20BE%20DONE>MAY BE DONE</a>
270 </font>
271 </td>
272
273 </tr>
274
275 </table>
276 <hr size=1>
277250 <p>
278
279 <p>
280 <a name=WILL%20BE%20DONEa8ad4af6></a>
251 <a name=WILL%20BE%20DONE7c02ac9b></a>
281252 <font face=verdana><font class=title size=+0 color=#555555><b>WILL BE DONE </b></font>
282253 <font face="courier new" size=3><pre>
283254 + Database storage of $Session &amp; $Application, so web clusters
284255 may scale better than the current NFS/CIFS StateDir implementation
285256 allows, maybe via Apache::Session.
286 + Sample Apache::ASP applications beyond ./site/eg
287 + More caching options like $Server-&gt;Cache for user cache
288 and $Response-&gt;Cache for page caching
289 + Caching guide
290 </pre></font>
291
292 <p>
293 <a name=MAY%20BE%20DONE></a>
294 <font face=verdana><font class=title size=+0 color=#555555><b>MAY BE DONE</b></font>
295 <font face="courier new" size=3><pre>
296 + VBScript, ECMAScript or JavaScript interpreters
297 + Dumping state of Apache::ASP during an error, and being
298 able to go through it with the perl debugger.
299257 </pre></font>
300258
301259
306264 &nbsp;
307265 </td>
308266
309 </tr>
310 <tr bgcolor=#063678>
311 <td colspan=3 align=center width=80%>
312 <font face=verdana color=white size=-1>
313 Copyright &copy; 1998-2008,
314 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
315 </font>
316 </td>
317267 </tr>
318268 </table>
319269
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
264261
265262 <td valign=top >
266263 <font face="lucida console" size=-1>
267 <a href=#Online%20Resou0d275bc2>Online Resources</a>
264 <a href=#Online%20Resou44921f06>Online Resources</a>
268265 </font>
269266 </td>
270267
355352 <p>
356353
357354 <p>
358 <a name=Online%20Resou0d275bc2></a>
355 <a name=Online%20Resou44921f06></a>
359356 <font face=verdana><font class=title size=+0 color=#555555><b>Online Resources</b></font>
360357 <font face="courier new" size=3><pre>
361358 </pre></font>For more tips &amp; tricks on tuning Apache and <a href=http://perl.apache.org><font size=-1 face=verdana><b>mod_perl</b></font></a>, please see the tuning
366363 how to tune your Apache::ASP web site. It has since been
367364 updated to remain current with Apache::ASP v2.29+
368365 <font face="courier new" size=3><pre>
369 <a href="http://www.chamas.com/asp/articles/perlmonth3_tune.html">Apache::ASP Site Tuning</a>
366 <a href="http://www.apache-asp.org/articles/perlmonth3_tune.html">Apache::ASP Site Tuning</a>
370367 </pre></font>
371368
372369 <p>
566563 </td>
567564
568565 </tr>
569 <tr bgcolor=#063678>
570 <td colspan=3 align=center width=80%>
571 <font face=verdana color=white size=-1>
572 Copyright &copy; 1998-2008,
573 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
574 </font>
575 </td>
576 </tr>
577566 </table>
578567
579568 </td></tr>
0
01
12
23 <html>
1718 -->
1819 </style>
1920
20
2121 </head>
2222 <body bgcolor=black link=#063678 alink=#ff5599 vlink=#993399
2323 marginheight=0 marginwidth=0 leftMargin=0 topMargin=0>
24
25
26
2724
2825 <center>
2926 <table border=0 cellpadding=0 width=99% cellspacing=8>
234231 <a href=http://perl.apache.org><img src="powered_by_modperl.gif" width="88" height="31" alt="Powered by ModPerl and Apache" border="0"></a>
235232 <br>
236233 <a href=http://www.perl.com><img src="rectangle_power_perl.gif" width="88" height="31" alt="Powered by Perl" border="0"></a>
237 </center>
234
238235
239236 </center>
240237
451448 </td>
452449
453450 </tr>
454 <tr bgcolor=#063678>
455 <td colspan=3 align=center width=80%>
456 <font face=verdana color=white size=-1>
457 Copyright &copy; 1998-2008,
458 <a href=http://www.chamas.com><font color=white>Chamas Enterprises Inc.</font></a>
459 </font>
460 </td>
461 </tr>
462451 </table>
463452
464453 </td></tr>