Practical mod_perl (ebook)(audiobook)(audiobook)
- Autorzy:
- Stas Bekman, Eric Cholet
- Promocja Przejdź


- Ocena:
- Bądź pierwszym, który oceni tę książkę
- Stron:
- 928
- 2w1 w pakiecie:
-
ePubMobi
Opis książki
mod_perl embeds the popular programming language Perl in the Apache web server, giving rise to a fast and powerful web programming environment. Practical mod_perl is the definitive book on how to use, optimize, and troubleshoot mod_perl.
New mod_perl users will learn how to quickly and easily get mod_perl compiled and installed. But the primary purpose of this book is to show you how to take full advantage of mod_perl: how to make a mod_perl-enabled Web site as fast, flexible, and easily-maintainable as possible. The authors draw from their own personal experience in the field, as well as the combined experience of the mod_perl community, to present a rich and complete picture of how to set up and maintain a successful mod_perl site.
This book is also the first book to cover the "next generation" of mod_perl: mod_perl 2.0, a completely rewritten version of mod_perl designed for integration with Apache 2.0, which for the first time supports threads.
The book covers the following topics, and more:
- Configuring mod_perl optimally for your web site
- Porting and optimizing programs for a mod_perl environment
- Performance tuning: getting the very fastest performance from your site
- Controlling and monitoring the server to circumvent crashes and clogs
- Integrating with databases efficiently and painlessly
- Debugging tips and tricks
- Maximizing security
Podobne produkty
-
Czysty kod. Podręcznik dobrego programisty Czysty kod. Podręcznik dobrego programisty
Robert C. Martin
-
Wielkie umysły programowania. Jak myślą i pracu... Wielkie umysły programowania. Jak myślą i pracują twórcy najważniejszych języków
Federico Biancuzzi, Shane Warden
-
Biblia copywritingu Biblia copywritingu
Dariusz Puzyrkiewicz
-
HTML i CSS. Zaprojektuj i zbuduj witrynę WWW. P... HTML i CSS. Zaprojektuj i zbuduj witrynę WWW. Podręcznik Front-End Developera
Jon Duckett
-
WordPress 5 dla początkujących WordPress 5 dla początkujących
Agnieszka Ciborowska, Jarosław Lipiński
-
Vue.js 2. Wprowadzenie dla profesjonalistów Vue.js 2. Wprowadzenie dla profesjonalistów
Adam Freeman
Szczegóły książki
- ISBN Ebooka:
- 978-05-965-5200-8, 9780596552008
- Data wydania ebooka:
-
2003-05-23
Data wydania ebooka często jest dniem wprowadzenia tytułu do sprzedaży i może nie być równoznaczna z datą wydania książki papierowej. Dodatkowe informacje możesz znaleźć w darmowym fragmencie. Jeśli masz wątpliwości skontaktuj się z nami sklep@helion.pl.
- Język publikacji:
- angielski
- Rozmiar pliku ePub:
- 2.3MB
- Rozmiar pliku Mobi:
- 2.3MB
Spis treści
- Practical mod_perl
- SPECIAL OFFER: Upgrade this ebook with OReilly
- Preface
- What You Need to Know
- Who This Book Is For
- How This Book Is Organized
- Reference Sections
- Filesystem Conventions
- Apache and Perl Versions
- Typographic Conventions
- Command Interpreter Program (Shell) Conventions
- Installing Perl Modules
- Manual Installation
- Prerequisites Needed to Install Perl Modules on Windows
- Building a Perl Module
- Using the CPAN Shell
- Using the Perl Package Manager
- How to Contact Us
- Acknowledgments
- I. mod_perl Administration
- 1. Introducing CGI and mod_perl
- 1.1. A Brief History of CGI
- 1.1.1. The HTTP Protocol
- 1.1.2. The Common Gateway Interface Specification
- 1.1.3. Apache CGI Handling with mod_cgi
- 1.1. A Brief History of CGI
- 1.2. The Apache 1.3 Server Model
- 1.2.1. Forking
- 1.2.2. CGI Scripts Under the Forking Model
- 1.2.3. Performance Drawbacks of Forking
- 1. Introducing CGI and mod_perl
- 1.3. The Development of mod_perl 1.0
- 1.3.1. Running CGI Scripts with mod_perl
- 1.4. Apache 1.3 Request Processing Phases
- 1.4.1. Apache 1.3 Modules and the mod_perl 1.0 API
- 1.4.2. mod_perl 1.0 and the mod_perl API
- 1.5. References
- 2. Getting Started Fast
- 2.1. Installing mod_perl 1.0 in Three Steps
- 2.2. Installing mod_perl on Unix Platforms
- 2.2.1. Obtaining and Unpacking the Source Code
- 2.2.2. Building mod_perl
- 2.2.3. Installing mod_perl
- 2.3. Configuring and Starting the mod_perl Server
- 2.4. Installing mod_perl for Windows
- 2.4.1. Installing mod_perl with the Perl Package Manager
- 2.5. Preparing the Scripts Directory
- 2.6. A Sample Apache::Registry Script
- 2.6.1. Porting Existing CGI Scripts to mod_perl
- 2.7. A Simple mod_perl Content Handler
- 2.8. Is This All We Need to Know About mod_perl?
- 2.9. References
- 3. Installing mod_perl
- 3.1. Configuring the Source
- 3.1.1. Controlling the Build Process
- 3.1.2. Activating Callback Hooks
- 3.1.3. Activating Standard API Features
- 3.1.4. Enabling Extra Features
- 3.1.5. Reusing Configuration Parameters
- 3.1.6. Discovering Whether a Feature Was Enabled
- 3.1.7. Using an Alternative Configuration File
- 3.1.8. perl Makefile.PL Troubleshooting
- 3.1.8.1. A test compilation with your Makefile configuration failed...
- 3.1.8.2. Missing or misconfigured libgdbm.so
- 3.1.8.3. Undefined reference to `PL_perl_destruct_level
- 3.1. Configuring the Source
- 3.2. Building mod_perl (make)
- 3.2.1. What Compiler Should Be Used to Build mod_perl?
- 3.2.2. make Troubleshooting
- 3.2.2.1. Undefined reference to `Perl_newAV'
- 3.2.2.2. Unrecognized format specifier for...
- 3.3. Testing the Server (make test)
- 3.3.1. Manual Testing
- 3.3.2. make test Troubleshooting
- 3.3.2.1. make test fails
- 3.3.2.2. mod_perl.c is incompatible with this version of Apache
- 3.3.2.3. make test......skipping test on this platform
- 3.3.2.4. make test fails due to misconfigured localhost entry
- 3.4. Installation (make install)
- 3.4.1. Manually Building a mod_perl-Enabled Apache
- 3.5. Installation Scenarios for Standalone mod_perl
- 3.5.1. The All-in-One Way
- 3.5.2. Building mod_perl and Apache Separately
- 3.5.3. When DSOs Can Be Used
- 3.5.4. Building mod_perl as a DSO via APACI
- 3.5.5. Building mod_perl as a DSO via APXS
- 3.6. Building mod_perl with Other Components
- 3.6.1. Installing mod_perl with PHP
- 3.6.2. Installing mod_perl with mod_ssl (+openssl)
- 3.6.3. Installing mod_perl with Apache-SSL (+openssl)
- 3.6.4. Installing mod_perl with Stronghold
- 3.7. Installing mod_perl with the CPAN.pm Interactive Shell
- 3.8. Installing mod_perl on Multiple Machines
- 3.9. Installation into a Nonstandard Directory
- 3.9.1. Installing Perl Modules into a Nonstandard Directory
- 3.9.2. Finding Modules Installed in Nonstandard Directories
- 3.9.2.1. Modifying @INC
- 3.9.2.2. Using the PERL5LIB environment variable
- 3.9.3. Using the CPAN.pm Shell with Nonstandard Installation Directories
- 3.9.4. Making a Local Apache Installation
- 3.9.5. Nonstandard mod_perl-Enabled Apache Installation
- 3.9.6. Nonstandard mod_perl-Enabled Apache Installation with CPAN.pm
- 3.10. How Can I Tell if mod_perl Is Running?
- 3.10.1. Checking the error_log File
- 3.10.2. Testing by Viewing /perl-status
- 3.10.3. Testing via Telnet
- 3.10.4. Testing via a CGI Script
- 3.10.5. Testing via lwp-request
- 3.11. General Notes
- 3.11.1. How Do I Make the Installation More Secure?
- 3.11.2. Can I Run mod_perl-Enabled Apache as suExec?
- 3.11.3. Should I Rebuild mod_perl if I Have Upgraded Perl?
- 3.11.4. mod_auth_dbm Nuances
- 3.12. References
- 4. mod_perl Configuration
- 4.1. Apache Configuration
- 4.1.1. Configuration Files
- 4.1.2. Configuration Directives
- 4.1.3. <Directory>, <Location>, and <Files> Sections
- 4.1.3.1. <Directory directoryPath> ... </Directory>
- 4.1.3.2. <Files filename > ... </Files>
- 4.1.3.3. <Location URI> ... </Location>
- 4.1.4. Merging <Directory>, <Location>, and <Files> Sections
- 4.1.5. Subgrouping of <Directory>, <Location>, and <Files> Sections
- 4.1.6. Options Directive Merging
- 4.1.7. MinSpareServers, MaxSpareServers, StartServers, MaxClients, and MaxRequestsPerChild
- 4.1. Apache Configuration
- 4.2. mod_perl Configuration
- 4.2.1. Alias Configurations
- 4.2.1.1. Running scripts located in the same directory under different handlers
- 4.2.1. Alias Configurations
- 4.2.2. <Location /perl> Sections
- 4.2.3. PerlModule and PerlRequire
- 4.2.4. Perl*Handlers
- 4.2.5. The handler( ) Subroutine
- 4.2.6. Investigating the Request Phases
- 4.2.7. Stacked Handlers
- 4.2.8. Perl Method Handlers
- 4.2.9. PerlFreshRestart
- 4.2.10. PerlSetEnv and PerlPassEnv
- 4.2.11. PerlSetVar and PerlAddVar
- 4.2.12. PerlSetupEnv
- 4.2.13. PerlWarn and PerlTaintCheck
- 4.3. The Startup File
- 4.3.1. A Sample Startup File
- 4.3.2. Syntax Validation
- 4.3.3. What Modules Should Be Added to the Startup File
- 4.3.4. The Confusion with use( ) in the Server Startup File
- 4.4. Apache Configuration in Perl
- 4.4.1. Constructing <Perl> Sections
- 4.4.2. Breaking Out of <Perl> Sections
- 4.4.3. Cheating with Apache->httpd_conf
- 4.4.4. Declaring Package Names in Perl Sections
- 4.4.5. Verifying <Perl> Sections
- 4.4.6. Saving the Perl Configuration
- 4.4.7. Debugging
- 4.5. Validating the Configuration Syntax
- 4.6. The Scope of mod_perl Configuration Directives
- 4.7. Apache Restarts Twice
- 4.8. Enabling Remote Server Configuration Reports
- 4.9. Tips and Tricks
- 4.9.1. Publishing Port Numbers Other Than 80
- 4.9.2. Running the Same Script from Different Virtual Hosts
- 4.10. Configuration Security Concerns
- 4.10.1. Using Only Absolutely Necessary Components
- 4.10.2. Taint Checking
- 4.10.3. Hiding Server Information
- 4.10.4. Making the mod_perl Server Inaccessible from the Outside
- 4.10.5. Protecting Private Status Locations
- 4.11. General Pitfalls
- 4.12. References
- 5. Web Server Control, Monitoring, Upgrade, and Maintenance
- 5.1. Starting the Server in Multi-Process Mode
- 5.2. Starting the Server in Single-Process Mode
- 5.3. Using kill to Control Processes
- 5.3.1. kill Signals for Stopping and Restarting Apache
- 5.3.2. Speeding Up Apache's Termination and Restart
- 5.3.3. Finding the Right Apache PID
- 5.4. Using apachectl to Control the Server
- 5.5. Validating Server Configuration
- 5.6. Setuid root Startup Scripts
- 5.6.1. Introduction to setuid Executables
- 5.6.2. Apache Startup Script's setuid Security
- 5.6.3. Sample setuid Apache Startup Script
- 5.7. Preparing for Machine Reboot
- 5.8. Upgrading a Live Server
- 5.8.1. Upgrading Intranet Servers
- 5.8.2. Upgrading 24 × 7 Internet Servers
- 5.8.2.1. The server cluster
- 5.8.2.2. The single server
- 5.8.2.2.1. Upgrading live server components by swapping machines
- 5.8.2.2.2. Upgrading a live server with port forwarding
- 5.8.2.2.3. Upgrading a live server with prepackaged components
- 5.8.2.2.4. Upgrading a live server using symbolic links
- 5.8.2.2.5. Upgrading Perl code
- 5.8.2.2.6. Moving files and restarting the server
- 5.8.2.2.7. Using CVS for code upgrades
- 5.8.3. Disabling Scripts and Handlers on a Live Server
- 5.8.3.1. Disabling code running under Apache::Registry
- 5.8.3.2. Disabling code running under other handlers
- 5.8.3.3. Disabling services with help from the frontend server
- 5.8.4. Scheduled Routine Maintenance
- 5.9. Three-Tier Server Scheme: Development, Staging, and Production
- 5.9.1. Starting a Personal Server for Each Developer
- 5.10. Web Server Monitoring
- 5.10.1. Interactive Monitoring
- 5.10.2. Apache::VMonitorThe Visual System and Apache Server Monitor
- 5.10.2.1. Prerequisites and configuration
- 5.10.2.2. Multi-processes and system overall status reporting mode
- 5.10.2.3. Single-process extensive reporting system
- 5.10.3. Automated Monitoring
- 5.10.3.1. mod_perl server watchdogs
- 5.11. Server Maintenance Chores
- 5.11.1. Handling Log Files
- 5.11.1.1. Scheduled log file rotation
- 5.11.1.2. Non-scheduled emergency log rotation
- 5.11.1.3. Centralized logging
- 5.11.1. Handling Log Files
- 5.11.2. Swapping Prevention
- 5.11.3. Limiting Resources Used by Apache Child Processes
- 5.11.3.1. OS-specific notes
- 5.11.4. Tracking and Terminating Hanging Processes
- 5.11.5. Limiting the Number of Processes Serving the Same Resource
- 5.11.6. Limiting the Request-Rate Speed (Robot Blocking)
- 5.12. References
- 6. Coding with mod_perl in Mind
- 6.1. Before You Start to Code
- 6.1.1. Accessing Documentation
- 6.1.2. The strict Pragma
- 6.1.3. Enabling Warnings
- 6.1. Before You Start to Code
- 6.2. Exposing Apache::Registry Secrets
- 6.2.1. The First Mystery: Why Does the Script Go Beyond 5?
- 6.2.2. The Second MysteryInconsistent Growth over Reloads
- 6.3. Namespace Issues
- 6.3.1. The @INC Array
- 6.3.2. The %INC Hash
- 6.3.3. Name Collisions with Modules and Libraries
- 6.3.3.1. A first faulty scenario
- 6.3.3.2. A second faulty scenario
- 6.3.3.3. A quick but ineffective hackish solution
- 6.3.3.4. A first solution
- 6.3.3.5. A second solution
- 6.3.3.6. A third solution
- 6.4. Perl Specifics in the mod_perl Environment
- 6.4.1. exit( )
- 6.4.2. die( )
- 6.4.3. Global Variable Persistence
- 6.4.4. STDIN, STDOUT, and STDERR Streams
- 6.4.5. Redirecting STDOUT into a Scalar Variable
- 6.4.6. print( )
- 6.4.7. Formats
- 6.4.8. Output from System Calls
- 6.4.9. BEGIN blocks
- 6.4.10. END Blocks
- 6.5. CHECK and INIT Blocks
- 6.5.1. $^T and time( )
- 6.5.2. Command-Line Switches
- 6.5.2.1. Warnings
- 6.5.2.2. Taint mode
- 6.5.3. Compiled Regular Expressions
- 6.5.3.1. Matching patterns repeatedly
- 6.6. Apache::Registry Specifics
- 6.6.1. _ _END_ _ and _ _DATA_ _ Tokens
- 6.6.2. Symbolic Links
- 6.6.3. Return Codes
- 6.7. Transition from mod_cgi Scripts to Apache Handlers
- 6.7.1. Starting with a mod_cgi-Compatible Script
- 6.7.2. Converting into a Perl Content Handler
- 6.7.3. Converting to use the mod_perl API and mod_perl-Specific Modules
- 6.8. Loading and Reloading Modules
- 6.8.1. The @INC Array Under mod_perl
- 6.8.2. Reloading Modules and Required Files
- 6.8.2.1. Restarting the server
- 6.8.2.2. Using Apache::StatINC
- 6.8.2.3. Using Apache::Reload
- 6.8.2.4. Using dynamic configuration files
- 6.8.2.4.1. Writing configuration files
- 6.8.2.4.2. Reloading configuration files
- 6.8.2.4.3. Dynamically updating configuration files
- 6.9. Handling the "User Pressed Stop Button" Case
- 6.9.1. Detecting Aborted Connections
- 6.9.2. The Importance of Cleanup Code
- 6.9.2.1. Critical section
- 6.9.2.2. Safe resource locking and cleanup code
- 6.10. Handling Server Timeout Cases and Working with $SIG{ALRM}
- 6.11. Generating Correct HTTP Headers
- 6.12. Method Handlers: The Browse and See, Browse and View Example
- 6.13. References
- II. mod_perl Performance
- 7. Identifying Your Performance Problems
- 7.1. Looking at the Big Picture
- 7.2. Asking the Right Questions
- 7.3. References
- 7. Identifying Your Performance Problems
- 8. Choosing a Platform for the Best Performance
- 8.1. Choosing the Right Operating System
- 8.1.1. mod_perl Support for the Operating System
- 8.1.2. Stability and Robustness
- 8.1.3. Good Memory Management
- 8.1.4. Avoiding Memory Leaks
- 8.1.5. Memory-Sharing Capabilities
- 8.1.6. The Real Cost of Support
- 8.1.7. Discontinued Products
- 8.1.8. Keeping Up with OS Releases
- 8.1. Choosing the Right Operating System
- 8.2. Choosing the Right Hardware
- 8.2.1. Machine Strength Demands According to Expected Site Traffic
- 8.2.2. A Single Strong Machine Versus Many Weaker Machines
- 8.2.3. Getting a Fast Internet Connection
- 8.2.4. Tuning I/O Performance
- 8.2.5. How Much Memory Is Enough?
- 8.2.6. Getting a Fault-Tolerant CPU
- 8.2.7. Detecting and Avoiding Bottlenecks
- 8.2.8. Solving Hardware Requirement Conflicts
- 8.3. References
- 9. Essential Tools for Performance Tuning
- 9.1. Server Benchmarking
- 9.1.1. ApacheBench
- 9.1.2. httperf
- 9.1.3. http_load
- 9.1.4. Other Web Server Benchmark Utilities
- 9.1. Server Benchmarking
- 9.2. Perl Code Benchmarking
- 9.3. Process Memory Measurements
- 9.4. Apache::Status and Measuring Code Memory Usage
- 9.5. Code Profiling Techniques
- 9.5.1. Profiling with Devel::DProf
- 9.5.2. Profiling with Devel::SmallProf
- 9.6. References
- 10. Improving Performance with Shared Memory and Proper Forking
- 10.1. Sharing Memory
- 10.1.1. Calculating Real Memory Usage
- 10.1.2. Memory-Sharing Validation
- 10.1.2.1. Variable unsharing caused by regular expressions
- 10.1.2.2. Numerical versus string access to variables
- 10.1.3. Preloading Perl Modules at Server Startup
- 10.1.4. Preloading Registry Scripts at Server Startup
- 10.1.5. Module Initialization at Server Startup
- 10.1.5.1. Initializing DBI.pm
- 10.1.5.2. Initializing CGI.pm
- 10.1. Sharing Memory
- 10.1.6. Memory Preallocation
- 10.2. Forking and Executing Subprocessesfrom mod_perl
- 10.2.1. Forking a New Process
- 10.2.2. Freeing the Parent Process
- 10.2.3. Detaching the Forked Process
- 10.2.4. Avoiding Zombie Processes
- 10.2.5. A Complete Fork Example
- 10.2.6. Starting a Long-Running External Program
- 10.2.7. Starting a Short-Running External Program
- 10.2.8. Executing system( ) or exec( ) in the Right Way
- 10.3. References
- 11. Tuning Performance by Tweaking Apache's Configuration
- 11.1. Setting the MaxClients Directive
- 11.2. Setting the MaxRequestsPerChild Directive
- 11.3. Setting MinSpareServers, MaxSpareServers, and StartServers
- 11.4. KeepAlive
- 11.5. PerlSetupEnv
- 11.6. Reducing the Number of stat( ) Calls Made by Apache
- 11.7. Symbolic Links Lookup
- 11.8. Disabling DNS Resolution
- 11.9. Response Compressing
- 11.10. References
- 12. Server Setup Strategies
- 12.1. mod_perl Deployment Overview
- 12.2. Standalone mod_perl-Enabled Apache Server
- 12.3. One Plain and One mod_perl-Enabled Apache Server
- 12.3.1. Choosing the Target Installation Directories Layout
- 12.3.2. Configuration and Compilation of the Sources
- 12.3.2.1. Building the httpd_docs server
- 12.3.2.2. Building the httpd_perl server
- 12.3.3. Configuration of the Servers
- 12.3.3.1. Basic httpd_docs server configuration
- 12.3.3.2. Basic httpd_perl server configuration
- 12.4. One Light Non-Apache and One mod_perl-Enabled Apache Server
- 12.5. Adding a Proxy Server in httpd Accelerator Mode
- 12.6. The Squid Server and mod_perl
- 12.6.1. Pros and Cons
- 12.6.2. Light Apache, mod_perl, and Squid Setup Implementation Details
- 12.6.3. mod_perl and Squid Setup Implementation Details
- 12.7. Apache's mod_proxy Module
- 12.7.1. Concepts and Configuration Directives
- 12.7.1.1. ProxyPass
- 12.7.1.2. ProxyPassReverse
- 12.7.1.3. Security issues
- 12.7.1. Concepts and Configuration Directives
- 12.7.2. Knowing the Proxypassed Connection Type
- 12.7.3. Buffering Feature
- 12.7.4. Closing Lingering Connections with lingerd
- 12.7.5. Caching Feature
- 12.7.6. Build Process
- 12.8. mod_rewrite Examples
- 12.9. Getting the Remote Server IP in the Backend Server in the Proxy Setup
- 12.10. Frontend/Backend Proxying with Virtual Hosts
- 12.10.1. Virtual Host Flavors
- 12.10.2. Dual-Server Virtual Host Configuration
- 12.10.3. Virtual Hosts and Main Server Interaction
- 12.10.4. Frontend Server Configuration
- 12.10.5. Backend Server Configuration
- 12.11. HTTP Authentication with Two Servers and a Proxy
- 12.12. When One Machine Is Not Enough for Your RDBMS DataBase and mod_perl
- 12.12.1. Server Requirements
- 12.12.2. The Problem
- 12.12.3. The Solution
- 12.12.4. Three Machine Model
- 12.13. Running More than One mod_perl Server on the Same Machine
- 12.14. SSL Functionality and a mod_perl Server
- 12.15. Uploading and Downloading Big Files
- 12.16. References
- 13. TMTOWTDI: Convenience and Habit Versus Performance
- 13.1. Apache::Registry PerlHandler Versus Custom PerlHandler
- 13.2. Apache::args Versus Apache::Request::param Versus CGI::param
- 13.3. Buffered Printing and Better print( ) Techniques
- 13.4. Interpolation, Concatenation, or List
- 13.5. Keeping a Small Memory Footprint
- 13.5.1. "Bloatware" Modules
- 13.5.2. Importing Symbols
- 13.6. Object Methods Calls Versus Function Calls
- 13.6.1. The Overhead with Light Subroutines
- 13.6.2. The Overhead with Heavy Subroutines
- 13.6.3. Are All Methods Slower Than Functions?
- 13.7. Using the Perl stat( ) Call's Cached Results
- 13.8. time( ) System Call Versus $r->request_time
- 13.9. Printing Unmodified Files
- 13.10. Caching and Pre-Caching
- 13.11. Caching with Memoize
- 13.12. Comparing Runtime Performance of Perl and C
- 13.12.1. Building Perl Extensions with XS and h2xs
- 13.12.2. The Benchmark
- 13.12.3. Inline.pm
- 13.12.4. Perl Extensions Conclusion
- 13.13. References
- 14. Defensive Measures for Performance Enhancement
- 14.1. Controlling Your Memory Usage
- 14.1.1. Defining the Minimum Shared Memory Size Threshold
- 14.1.1.1. Potential drawbacks of memory-sharing restrictions
- 14.1.1. Defining the Minimum Shared Memory Size Threshold
- 14.1.2. Defining the Maximum Memory Size Threshold
- 14.1.3. Defining the Maximum Unshared Memory Size Threshold
- 14.1. Controlling Your Memory Usage
- 14.2. Coding for a Smaller Memory Footprint
- 14.2.1. Memory Reuse
- 14.2.2. Big Input, Big Damage
- 14.2.3. Small Input, Big Damage
- 14.2.4. Think Production, Not Development
- 14.2.5. Passing Variables
- 14.2.6. Memory Leakage
- 14.3. Conclusion
- 14.4. References
- 15. Improving Performance Through Build Options
- 15.1. Server Size as a Function of Compiled-in Features
- 15.2. mod_status and ExtendedStatus On
- 15.3. DYNAMIC_MODULE_LIMIT Apache Build Option
- 15.4. Perl Build Options
- 15.5. Architecture-Specific Compile Options
- 15.6. References
- 16. HTTP Headers for Optimal Performance
- 16.1. Date-Related Headers
- 16.1.1. Date Header
- 16.1.2. Last-Modified Header
- 16.1.3. Expires and Cache-Control Headers
- 16.1. Date-Related Headers
- 16.2. Content Headers
- 16.2.1. Content-Type Header
- 16.2.2. Content-Length Header
- 16.2.3. Entity Tags
- 16.3. Content Negotiation
- 16.3.1. The Vary Header
- 16.4. HTTP Requests
- 16.4.1. GET Requests
- 16.4.2. Conditional GET Requests
- 16.4.3. HEAD Requests
- 16.4.4. POST Requests
- 16.5. Avoiding Dealing with Headers
- 16.6. References
- III. Databases and mod_perl
- 17. Databases Overview
- 17.1. Volatile Databases
- 17.1.1. In-Memory Databases in a Single Process
- 17.1.2. In-Memory Databases Across Multiple Processes
- 17.1. Volatile Databases
- 17.2. Non-Volatile Databases
- 17.2.1. Flat-File Databases
- 17.2.2. Filesystem Databases
- 17.2.3. DBM Databases
- 17.2.4. Relational Databases
- 17. Databases Overview
- 17.3. References
- 18. mod_perl Data-Sharing Techniques
- 18.1. Sharing the Read-Only Data in and Between Processes
- 18.2. Sharing Data Between Various Handlers
- 18.3. References
- 19. DBM and mod_perl
- 19.1. mod_perl and DBM
- 19.2. Resource Locking
- 19.2.1. Deadlocks
- 19.2.2. Exclusive Locking Starvation
- 19.3. Flawed Locking Methods
- 19.4. Locking Wrappers Overview
- 19.5. Tie::DB_Lock
- 19.6. Examples
- 19.6.1. tie( )-ing Once and Forever
- 19.6.2. Read/Write Access
- 19.6.3. Storing Complex Data Structures
- 19.7. References
- 20. Relational Databases and mod_perl
- 20.1. Persistent Database Connections with Apache::DBI
- 20.1.1. Apache::DBI Connections
- 20.1.2. When to Use Apache::DBI (and When Not to Use It)
- 20.1.3. Configuring Apache::DBI
- 20.1.4. Debugging Apache::DBI
- 20.1.5. Caveats and Troubleshooting
- 20.1.5.1. Database locking risks
- 20.1.5.2. Transactions
- 20.1.5.3. Opening connections with different parameters
- 20.1.5.4. Cannot find the DBI handler
- 20.1.5.5. The morning bug
- 20.1.5.6. Apache:DBI does not work
- 20.1.5.7. Skipping connection cache during server startup
- 20.1. Persistent Database Connections with Apache::DBI
- 20.2. Improving Performance
- 20.2.1. Preopening DBI Connections
- 20.2.2. Improving Speed by Skipping ping( )
- 20.2.3. Efficient Record-Retrieval Techniques
- 20.2.4. mysql_use_result Versus mysql_store_result Attributes
- 20.2.5. Running Two or More Relational Databases
- 20.2.6. Caching prepare( ) Statements
- 20.3. DBI Debug Techniques
- 20.4. References
- IV. Debugging and Troubleshooting
- 21. Error Handling and Debugging
- 21.1. Warnings and Errors Explained
- 21.1.1. The Importance of Warnings
- 21.1.1.1. The diagnostics pragma
- 21.1.1. The Importance of Warnings
- 21.1.2. Curing "Internal Server Error" Problems
- 21.1.3. Making Use of the error_log
- 21.1.4. Displaying Errors to Users
- 21.1. Warnings and Errors Explained
- 21. Error Handling and Debugging
- 21.2. Debugging Code in Single-Server Mode
- 21.3. Tracing System Calls
- 21.4. Tracing mod_perl-Specific Perl Calls
- 21.5. Debugging Perl Code
- 21.5.1. Locating and Correcting Syntax Errors
- 21.5.2. Using Apache::FakeRequest to Debug Apache Perl Modules
- 21.5.3. Using print( ) for Debugging
- 21.5.4. Using print( ) and Data::Dumper for Debugging
- 21.5.5. The Importance of a Good, Concise Coding Style
- 21.5.6. Introduction to the Perl Debugger
- 21.5.7. Interactive Perl Debugging Under mod_cgi
- 21.5.8. Noninteractive Perl Debugging Under mod_perl
- 21.5.9. Interactive mod_perl Debugging
- 21.5.9.1. ptkdb and interactive mod_perl debugging
- 21.6. Analyzing Dumped core Files
- 21.6.1. Getting Ready to Debug
- 21.6.2. Creating a Faulty Package
- 21.6.3. Dumping the core File
- 21.6.4. Analyzing the core File
- 21.6.5. Extracting the Backtrace Automatically
- 21.7. Hanging Processes: Detection and Diagnostics
- 21.7.1. Hanging Because of an Operating System Problem
- 21.7.2. When a Process Might Hang
- 21.7.3. Detecting Hanging Processes
- 21.7.4. Determination of the Reason
- 21.7.4.1. Using the Perl trace
- 21.7.4.2. Using the system calls trace
- 21.7.4.3. Using the interactive debugger
- 21.7.5. mod_perl gdb Debug Macros
- 21.8. Useful Debug Modules
- 21.8.1. B::Deparse
- 21.8.2. -D Runtime Option
- 21.8.3. Devel::Peek and Apache::Peek
- 21.8.4. Devel::Symdump and Apache::Symdump
- 21.8.5. Apache::Debug
- 21.8.6. Other Debug Modules
- 21.9. Looking Inside the Server
- 21.9.1. Apache::StatusEmbedded Interpreter Status Information
- 21.9.1.1. Minimal configuration
- 21.9.1.2. Extended configuration
- 21.9.1.3. Usage
- 21.9.1. Apache::StatusEmbedded Interpreter Status Information
- 21.9.2. mod_status
- 21.10. References
- 22. Troubleshooting mod_perl
- 22.1. Configuration and Startup
- 22.1.1. libexec/libperl.so: open failed: No such file or directory
- 22.1.2. install_driver(Oracle) failed: Can't load `.../DBD/Oracle/Oracle.so' for module DBD::Oracle
- 22.1.3. Invalid command `PerlHandler'...
- 22.1.4. RegistryLoader: Translation of uri [...] to filename failed
- 22.1. Configuration and Startup
- 22.2. Code Parsing and Compilation
- 22.2.1. Value of $x will not stay shared at - line 5
- 22.2.2. Value of $x may be unavailable at - line 5
- 22.2.3. Can't locate loadable object for module ...
- 22.2.4. Can't locate object method "get_handlers" ...
- 22.2.5. Missing right bracket at line ...
- 22.2.6. Can't load `.../auto/DBI/DBI.so' for module DBI
- 22.3. Runtime
- 22.3.1. foo ... at /dev/null line 0
- 22.3.2. Segfaults When Using XML::Parser
- 22.3.3. exit signal Segmentation fault (11)
- 22.3.4. CGI Code Is Returned as Plain Text Instead of Being Executed
- 22.3.5. rwrite returned -1
- 22.3.6. Global symbol "$foo" requires explicit package name
- 22.3.7. Use of uninitialized value at (eval 80) line 12
- 22.3.8. Undefined subroutine &Apache::ROOT::perl::test_2epl::some_function called at
- 22.3.9. Callback called exit
- 22.3.10. Out of memory!
- 22.3.11. syntax error at /dev/null line 1, near "line arguments:"
- 22.4. Shutdown and Restart
- 22.4.1. Evil Things Might Happen When Using PerlFreshRestart
- 22.4.2. [warn] child process 30388 did not exit, sending another SIGHUP
- 22.4.3. Processes Get Stuck on Graceful Restart
- 23. Getting Help and Online Resources
- 23.1. How to Report Problems
- 23.1.1. Getting the Backtrace from Core Dumps
- 23.1.2. Spinning Processes
- 23.1. How to Report Problems
- 23.2. Mailing List Etiquette
- 23.3. Resources
- 23.3.1. mod_perl
- 23.3.2. mod_perl Mailing Lists
- 23.3.3. Perl
- 23.3.4. Perl/CGI
- 23.3.5. Apache
- 23.3.6. DBI and SQL
- 23.3.7. Squid
- 23.3.8. CVS
- 23.3.9. Performance and Scalability
- 23.3.10. Web Security
- V. mod_perl 2.0
- 24. mod_perl 2.0: Installation and Configuration
- 24.1. What's New in Apache 2.0
- 24.2. What's New in Perl 5.6.0-5.8.0
- 24.3. What's New in mod_perl 2.0
- 24.3.1. Thread Support
- 24.3.2. Perl Interface to the APR and Apache APIs
- 24.3.3. Other New Features
- 24.3.4. Improved and More Flexible Configuration
- 24.3.5. Optimizations
- 24.4. Installing mod_perl 2.0
- 24.4.1. Installing from Source
- 24.4.2. Installing Binaries
- 24. mod_perl 2.0: Installation and Configuration
- 24.5. Configuring mod_perl 2.0
- 24.5.1. Enabling mod_perl
- 24.5.2. Accessing the mod_perl 2.0 Modules
- 24.5.3. Startup File
- 24.5.4. Perl's Command-Line Switches
- 24.5.5. mod_perl 2.0 Core Handlers
- 24.5.5.1. modperl
- 24.5.5.2. perl-script
- 24.5.5.3. A simple response handler example
- 24.5.6. PerlOptions Directive
- 24.5.6.1. Enable
- 24.5.6.2. Clone
- 24.5.6.3. Parent
- 24.5.6.4. Perl*Handler
- 24.5.6.5. AutoLoad
- 24.5.6.6. GlobalRequest
- 24.5.6.7. ParseHeaders
- 24.5.6.8. MergeHandlers
- 24.5.6.9. SetupEnv
- 24.5.7. Thread-Mode-Specific Directives
- 24.5.7.1. PerlInterpStart
- 24.5.7.2. PerlInterpMax
- 24.5.7.3. PerlInterpMinSpare
- 24.5.7.4. PerlInterpMaxSpare
- 24.5.7.5. PerlInterpMaxRequests
- 24.5.7.6. PerlInterpScope
- 24.5.8. Retrieving Server Startup Options
- 24.6. Resources
- 25. Programming for mod_perl 2.0
- 25.1. Migrating to and Programming with mod_perl 2.0
- 25.1.1. The Shortest Migration Path
- 25.1.2. Migrating Configuration Files
- 25.1.2.1. PerlHandler
- 25.1.2.2. PerlSendHeader
- 25.1.2.3. PerlSetupEnv
- 25.1.2.4. PerlTaintCheck
- 25.1.2.5. PerlWarn
- 25.1.2.6. PerlFreshRestart
- 25.1.3. Code Porting
- 25.1.4. ModPerl::Registry Family
- 25.1.5. Method Handlers
- 25.1.6. Apache::StatINC Replacement
- 25.1. Migrating to and Programming with mod_perl 2.0
- 25.2. New Apache Phases and Corresponding Perl*Handlers
- 25.2.1. Server Configuration and Startup Phases
- 25.2.1.1. PerlOpenLogsHandler
- 25.2.1.2. PerlPostConfigHandler
- 25.2.1.3. PerlChildInitHandler
- 25.2.1.4. PerlChildExitHandler
- 25.2.1. Server Configuration and Startup Phases
- 25.2.2. Connection Phases
- 25.2.2.1. PerlPreConnectionHandler
- 25.2.2.2. PerlProcessConnectionHandler
- 25.2.2.2.1. Socket-based protocol module
- 25.2.2.2.2. Bucket brigade-based protocol module
- 25.2.3. HTTP Request Phases
- 25.3. I/O Filtering
- 25.3.1. I/O Filtering Concepts
- 25.3.1.1. Two methods for manipulating data
- 25.3.1.2. HTTP request versus connection filters
- 25.3.1.3. Multiple invocations of filter handlers
- 25.3.1.4. Blocking calls
- 25.3.1. I/O Filtering Concepts
- 25.3.2. Filter Configuration
- 25.3.3. Input Filters
- 25.3.3.1. Bucket brigade-based connection input filter
- 25.3.3.2. Bucket brigade-based HTTP request input filter
- 25.3.3.3. Stream-based HTTP request input filter
- 25.3.4. Output Filters
- 25.3.4.1. Stream-based HTTP request output filter
- 25.3.4.2. Another stream-based HTTP request output filter
- 25.3.4.3. Bucket brigade-based HTTP request output filter
- VI. Appendixes
- A. mod_perl Recipes
- A.1. Emulating the Authentication Mechanism
- A.2. Reusing Data from POST Requests
- A.3. Redirecting POST Requests
- A.4. Redirecting While Maintaining Environment Variables
- A.5. Handling Cookies
- A.6. Sending Multiple Cookies with the mod_perl API
- A.7. Sending Cookies in REDIRECT Responses
- A.8. CGI::params in the mod_perlish Way
- A.9. Sending Email from mod_perl
- A.10. mod_rewrite in Perl
- A.11. Setting PerlHandler Based on MIME Type
- A.12. Singleton Database Handles
- A.13. Terminating a Child Process on Request Completion
- A.14. References
- A. mod_perl Recipes
- B. Apache Perl Modules
- B.1. Development-Stage Modules
- B.1.1. Apache::ReloadAutomatically Reload Changed Modules
- B.1.2. Apache::PerlVINCAllow Module Versioning in <Location> and <VirtualHost> blocks
- B.1.3. Apache::DProfHook Devel::DProf into mod_perl
- B.1.4. Apache::SmallProfHook Devel::SmallProf into mod_perl
- B.1.5. Apache::FakeRequestFake Request Object for Debugging
- B.1.6. Apache::testFacilitate Testing of Apache::* Modules
- B.1. Development-Stage Modules
- B.2. Modules to Aid Debugging
- B.2.1. Apache::DBHooks for the Interactive Perl Debugger
- B.2.2. Apache::DebugUtilities for Debugging Embedded Perl Code
- B.2.3. Apache::DebugInfoSend Debug Information to Client
- B.2.4. Apache::LeakModule for Tracking Memory Leaks in mod_perl Code
- B.2.5. Apache::PeekA Data Debugging Tool for the XS Programmer
- B.2.6. Apache::SymbolAvoid the Mandatory `Subroutine Redefined' Warning
- B.2.7. Apache::SymdumpSymbol Table Snapshots
- B.3. Control and Monitoring Modules
- B.3.1. Apache::Watchdog::RunAwayHanging Processes Monitor and Terminator
- B.3.2. Apache::VMonitorVisual System and Apache Server Monitor
- B.3.3. Apache::SizeLimitLimit Apache httpd Processes
- B.3.4. Apache::GTopLimitLimit Apache httpd Processes
- B.3.5. Apache::TimedRedirectRedirect URLs for a Given Time Period
- B.3.6. Apache::ResourceLimit Resources Used by httpd Children
- B.3.7. Apache::StatusEmbedded Interpreter Status Information
- B.4. Server Configuration Modules
- B.4.1. Apache::ModuleConfigInterface to Configuration API
- B.4.2. Apache::PerlSectionsUtilities for Working with <Perl> Sections
- B.4.3. Apache::httpd_confGenerate an httpd.conf File
- B.4.4. Apache::srcMethods for Locating and Parsing Bits of Apache Source Code
- B.4.5. Apache::ConfigFileParse an Apache-Style httpd.conf Configuration File
- B.5. Authentication-Phase Modules
- B.6. Authorization-Phase Modules
- B.7. Access-Phase Modules
- B.7.1. Stonehenge::ThrottleLimit Bandwith Consumption by IP Address
- B.8. Type Handlers
- B.8.1. Apache::MimeXMLmod_perl Mime Encoding Sniffer for XML Files
- B.8.2. Apache::MIMEMapperAssociates File Extensions with PerlHandlers
- B.9. Trans Handlers
- B.9.1. Apache::AddHostPathAdds Some or All of the Hostname and Port to the URI
- B.9.2. Apache::ProxyPassimplement ProxyPass in Perl
- B.9.3. Apache::ProxyPassThruSkeleton for Vanilla Proxy
- B.9.4. Apache::ThrottleSpeed-Based Content Negotiation
- B.9.5. Apache::TransLDAPTrans Handler Example
- B.10. Fixup Handlers
- B.10.1. Apache::RefererBlockBlock Request Based Upon "Referer" Header
- B.10.2. Apache::UsertrackEmulate the mod_usertrack Apache Module
- B.11. Generic Content-Generation Modules
- B.11.1. Apache::Registry and Apache::PerlRun
- B.11.2. Apache::RegistryNGApache::Registry New Generation
- B.11.3. Apache::RegistryBBApache::Registry Bare Bones
- B.11.4. Apache::Request (libapreq)Generic Apache Request Library
- B.11.5. Apache::DispatchCall PerlHandlers with the Ease of Registry Scripts
- B.12. Application-Specific Content-Generation Modules
- B.12.1. Apache::AutoIndexPerl Replacement for the mod_autoindex and mod_dir Apache Modules
- B.12.2. Apache::WAP::AutoIndexWAP Demonstration Module
- B.12.3. Apache::WAP::MailPeekDemonstrate Use of WML Delivery
- B.12.4. Apache::ArchiveExpose Archive Files Through the Apache Web Server
- B.12.5. Apache::GatewayImplement a Gateway
- B.12.6. Apache::NNTPGatewayNNTP Interface for a mod_perl-Enabled Apache Web Server.
- B.12.7. Apache::PrettyPerlSyntax Highlighting for Perl Files
- B.12.8. Apache::PrettyTextReformat .txt Files for Client Display
- B.12.9. Apache::RandomLocationRandom File Display
- B.12.10. Apache::StageManage a Staging Directory
- B.12.11. Apache::RoamingA mod_perl Handler for Roaming Profiles
- B.12.12. Apache::BackhandWrite mod_backhand Functions in Perl
- B.13. Database Modules
- B.13.1. Apache::DBIInitiate a Persistent Database Connection
- B.13.2. Apache::OWAOracle's PL/SQL Web Toolkit for Apache
- B.13.3. Apache::Sybase::CTlibPersistent CTlib Connection Management for Apache
- B.14. Toolkits and Frameworks for Content-Generation and Other Phases
- B.14.1. Apache::ASPActive Server Pages for Apache with mod_perl
- B.14.2. Apache::AxKitXML Toolkit for mod_perl
- B.14.3. HTML::EmbperlEmbed Perl into HTML
- B.14.4. Apache::EmbperlChainProcess Embedded Perl in HTML in the OutputChain
- B.14.5. Apache::ePerlEmbedded Perl 5 Language
- B.14.6. Apache::iNcomE-Commerce Framework
- B.14.7. Apache::MasonPerl-Based Web Site Development and Delivery System
- B.14.8. Apache::PageKitWeb Applications Framework
- B.14.9. Template ToolkitTemplate Processing System
- B.15. Output Filters and Layering Modules
- B.15.1. Apache::OutputChainChain Stacked Perl Handlers
- B.15.2. Apache::Cleanmod_perl Interface Into HTML::Clean
- B.15.3. Apache::FilterAlter the Output of Previous Handlers
- B.15.4. Apache::GzipChainCompress HTML (or Anything) in the OutputChain
- B.15.5. Apache::PassFileSend File via OutputChain
- B.15.6. Apache::GzipAuto-Compress Web Files with gzip
- B.15.7. Apache::CompressAuto-Compress Web Files with gzip
- B.15.8. Apache::LayerLayer Content Tree Over One or More Others
- B.15.9. Apache::SandwichLayered Document (Sandwich) Maker
- B.15.10. Apache::SimpleReplaceSimple Template Framework
- B.15.11. Apache::SSIImplement Server-Side Includes in Perl
- B.16. Logging-Phase Handlers
- B.16.1. Apache::RedirectLogFixCorrect Status While Logging
- B.16.2. Apache::DBILogConfigLogs Access Information in a DBI Database
- B.16.3. Apache::DBILoggerTracks What's Being Transferred in a DBI Database
- B.16.4. Apache::DumpHeadersWatch HTTP Transaction via Headers
- B.16.5. Apache::TrafficTrack Hits and Bytes Transferred on a Per-User Basis
- B.17. Core Apache Modules
- B.17.1. Apache::ModuleInterface to Apache C Module Structures
- B.17.2. Apache::ShowRequestShow Phases and Module Participation
- B.17.3. Apache::SubProcessInterface to Apache Subprocess API
- B.17.4. Apache::ConnectionInterface to the Apache conn_rec Data Structure
- B.17.5. Apache::ConstantsConstants Defined in httpd.h
- B.17.6. Apache::ExtUtilsUtilities for Apache C/Perl Glue
- B.17.7. Apache::FileAdvanced Functions for Manipulating Files on the Server Side
- B.17.8. Apache::LogInterface to Apache Logging
- B.17.9. Apache::LogFileInterface to Apache's Logging Routines
- B.17.10. Apache::ScoreboardPerl Interface to Apache's scoreboard.h
- B.17.11. Apache::ServerPerl Interface to the Apache server_rec Struct
- B.17.12. Apache::TablePerl Interface to the Apache Table Struct
- B.17.13. Apache::URIURI Component Parsing and Unparsing
- B.17.14. Apache::UtilPerl Interface to Apache C Utility Functions
- B.18. Other Miscellaneous Modules
- B.18.1. Apache::SessionMaintain Session State Across HTTP Requests
- B.18.2. Apache::RequestNotesEasy, Consistent Access to Cookie and Form Data Across Each Request Phase
- B.18.3. Apache::CookieHTTP Cookies Class
- B.18.4. Apache::IconLook Up Icon Images
- B.18.5. Apache::IncludeUtilities for mod_perl/mod_include Integration
- B.18.6. Apache::LanguagePerl Transparent Language Support for Apache Modules and mod_perl Scripts
- B.18.7. Apache::MmapPerl Interface to the mmap(2) System Call
- B.18.8. Apache::GD::GraphGenerate Graphs in an Apache Handler
- B.18.9. Apache::MotdProvide motd (Message of the Day) Functionality to a Web Server
- B.18.10. Apache::ParseLogObject-Oriented Perl Extension for Parsing Apache Log Files
- B.18.11. Apache::RegistryLoaderCompile Apache::Registry Scripts at Server Startup
- B.18.12. Apache::SIGOverride Apache Signal Handlers with Perl's Signal Handlers
- B.18.13. Apache::TempFileAllocate Temporary Filenames for the Duration of a Request
- B.18.14. XmmsPerl Interface to the xmms Media Player
- B.18.15. Module::UseLog and Load Used Perl Modules
- C. ISPs Providing mod_perl Services
- C.1. Users Sharing a Single Web Server
- C.2. Users Sharing a Single Machine
- C.3. Giving Each User a Separate Machine (Colocation)
- C.4. Giving Each User a Virtual Machine
- D. The Template Toolkit
- D.1. Fetching and Installing the Template Toolkit
- D.2. Overview
- D.3. Typical Uses
- D.4. Template Toolkit Language
- D.4.1. Simple Template Example
- D.5. Processing Templates
- D.6. Apache/mod_perl Handler
- D.7. Apache::Template Module
- D.8. Hangman Application
- D.8.1. Hangman CGI Script
- D.8.2. Hangman with Modular Templates
- D.8.3. Hangman Plug-in
- D.8.4. Self-Contained Hangman Template
- D.9. References
- E. The AxKit XML Application Server
- E.1. Installing and Configuring AxKit
- E.2. Your First AxKit Page
- E.2.1. If Something Goes Wrong
- E.2.2. How it Works?
- E.2.3. XPath
- E.3. Dynamic Content
- E.3.1. Handling Form Parameters
- E.3.2. Handling Cookies
- E.3.3. Sending Email
- E.3.4. Handling Exceptions
- E.3.5. Utilities Taglib
- E.3.6. Executing SQL
- E.4. More XPathScript Details
- E.4.1. The XPathScript API
- E.4.1.1. Extracting values
- E.4.1.2. Declarative templates
- E.4.1. The XPathScript API
- E.5. XSLT
- E.5.1. Anatomy of an XSLT Stylesheet
- E.5.2. Template Rules and Recursion
- E.5.3. Learning More
- E.6. Putting Everything Together
- E.7. More Reasons to Use AxKit
- F. HTTP Status Codes
- F.1. HTTP/1.0 Status Codes
- F.2. HTTP/1.1 Status Codes
- F.3. References
- Index
- About the Authors
- Colophon
- SPECIAL OFFER: Upgrade this ebook with OReilly
Dzieki opcji "Druk na żądanie" do sprzedaży wracają tytuły Grupy Helion, które cieszyły sie dużym zainteresowaniem, a których nakład został wyprzedany.
Dla naszych Czytelników wydrukowaliśmy dodatkową pulę egzemplarzy w technice druku cyfrowego.
Co powinieneś wiedzieć o usłudze "Druk na żądanie":
- usługa obejmuje tylko widoczną poniżej listę tytułów, którą na bieżąco aktualizujemy;
- cena książki może być wyższa od początkowej ceny detalicznej, co jest spowodowane kosztami druku cyfrowego (wyższymi niż koszty tradycyjnego druku offsetowego). Obowiązująca cena jest zawsze podawana na stronie WWW książki;
- zawartość książki wraz z dodatkami (płyta CD, DVD) odpowiada jej pierwotnemu wydaniu i jest w pełni komplementarna;
- usługa nie obejmuje książek w kolorze.
W przypadku usługi "Druk na żądanie" termin dostarczenia przesyłki może obejmować także czas potrzebny na dodruk (do 10 dni roboczych)
Masz pytanie o konkretny tytuł? Napisz do nas: sklep[at]helion.pl.


Oceny i opinie klientów (0)