FREE THOUGHT · FREE SOFTWARE · FREE WORLD

Home  »  PHP  »  Custom PHP.ini tips and tricks

by 19 comments

Describes in exhaustive detail how to change configuration settings and implement a custom php.ini file for use with the Apache Web Server.

View latest official php.ini

Covers:

  • When php run as Apache Module (mod_php)
  • When php run as CGI
  • When cgi?d php is run with wrapper (for FastCGI)

.htaccess code from Ultimate htaccess file

RUN PHP AS APACHE MODULE

AddHandler application/x-httpd-php .php .htm

RUN PHP AS CGI

AddHandler php-cgi .php .htm

CGI PHP WRAPPER FOR CUSTOM PHP.INI

AddHandler phpini-cgi .php .htm
Action phpini-cgi /cgi-bin/php5-custom-ini.cgi

FAST-CGI SETUP WITH PHP-CGI WRAPPER FOR CUSTOM PHP.INI

AddHandler fastcgi-script .fcgi
AddHandler php-cgi .php .htm
Action php-cgi /cgi-bin/php5-wrapper.fcgi

CUSTOM PHP CGI BINARY SETUP

AddHandler php-cgi .php .htm
Action php-cgi /cgi-bin/php.cgi

When php run as Apache Module (mod_php)

in root .htaccess

SetEnv PHPRC /location/todir/containing/phpinifile

When php run as CGI

Place your php.ini file in the dir of your cgi'd php, in this case /cgi-bin/

htaccess might look something like this

AddHandler php-cgi .php .htm
Action php-cgi /cgi-bin/php5.cgi

When php is run as cgi

Create a wrapper script called phpini.cgi to export the directory that contains the php.ini file as PHPRC

#!/bin/sh
export PHPRC=/web/site/askapache.com/inc
exec /user/public_html/cgi-bin/php5.cgi

In your .htaccess or httpd.conf file

AddHandler php-cgi .php
Action php-cgi /cgi-bin/phpini.cgi

When cgi'd php is run with wrapper (for FastCGI)

NOTE: Custom PHP.ini with FastCGI on DreamHost

You will have a shell wrapper script something like this:

#!/bin/sh
export PHP_FCGI_CHILDREN=3
exec /user/public_html/cgi-bin/php5.cgi

Change To

#!/bin/sh
export PHP_FCGI_CHILDREN=3
exec /user/public_html/cgi-bin/php.cgi -c /web/user/php.ini

NOTES:

  • Since PHP 5.1.0, it is possible to refer to existing .ini variables from within .ini files. open_basedir = ${open_basedir} ":/new/dir"
  • In order for PHP to read it, config file must be named php.ini
  • SetEnv PHPRC only works when using PHP as CGI, not when using php as an Apache Module

Default locations to look for php.ini

PHP looks for custom php.ini in this order:

Src: PHP Runtime Configuration

In the Current working directory

  1. Place your php.ini in the same directory as the php executable.
  2. If php executable is here: /web/user1/public_html/cgi-bin/
  3. then place your php.ini file here: /web/user1/public_html/cgi-bin/php.ini

In the path specified by the environment variable PHPRC

  1. If you can use SetEnv in .htaccess files--> in the root .htaccess file specify the path to the directory containing php.ini SetEnv PHPRC /web/user1
  2. If you can't use SetEnv and you are using a wrapper shell script place this in your wrapper shell script export PHPRC=/web/user1

In the path that was defined at compile time with --with-config-file-path

  • The path in which the php.ini file is looked for can be overridden using the -c argument in command line mode. (cgi) /web/user1/public_html/cgi-bin/php.cgi -c /web/user1/php.ini
  • With this option one can either specify a directory where to look for php.ini or you can specify a custom INI file directly (which does not need to be named php.ini),$ php -c /custom/directory/custom-file.ini my_script.php
  • Under Windows, the compile-time path is the Windows directory. Place php.ini in one of the directories, C:windows or C:winnt

php.ini is searched for in these locations in this order

NOTE: The Apache web server changes the directory to root at startup causing PHP to attempt to read php.ini from the root filesystem if it exists. If php-SAPI.ini exists (where SAPI is used SAPI, so the filename is e.g. php-cli.ini or php-apache.ini), it's used instead of php.ini. SAPI name can be determined by php_sapi_name(). You can use also use the predefined PHP_SAPI constant instead of php_sapi_name()

Read this article: If your server is running Windows

  1. SAPI module specific location
    • PHPIniDir directive in Apache 2
    • -c command line option in CGI and CLI
    • php_ini parameter in NSAPI
    • PHP_INI_PATH environment variable in THTTPD
  2. The PHPRC environment variable (Before PHP 5.2.0 this was checked after the registry key mentioned below.)
  3. HKEY_LOCAL_MACHINESOFTWAREPHPIniFilePath (Windows Registry location)
  4. Current working directory (for CLI)
  5. The web server's directory (for SAPI modules)
  6. Directory of PHP (If Windows)
  7. Windows directory (C:windows or C:winnt)
  8. --with-config-file-path compile time option

Directions for custom php.ini for Powweb Customers

Specific to Powweb, but can be used elsewhere.

SetEnv PHPRC /web/users/web/bEXAMPLE/pow.EXAMPLE
  1. In the folder above the htdocs (your ROOT) for the domain you want a custom php.ini file for, create an htaccess file with the above content:
  2. Then create a blank php.ini also in your ROOT directory (/web/users/web/bEXAMPLE/pow.EXAMPLE). Next copy the powweb php.ini text to your php.ini file and customize it.
  3. You can test to make sure you are using the new php.ini by running phpinfo(); If you want multiple php.ini files, then use .htaccess files to set the PHPRC variable to the directory that the php.ini file you want to use is in.

File structure from ROOT directory

.
|-- site1.com
|   `-- htdocs
|   |   |-- cgi-bin
|   |   |   `-- dl.cgi
|   |   `-- index.html
|   |-- phpsessions
|   |-- php.ini
|   `-- .htaccess
|-- site2.org
|   `-- htdocs
|   |   |-- cgi-bin
|   |   |   `-- dl.cgi
|   |   `-- index.html
|   |-- phpsessions
|   |-- php.ini
|   `-- .htaccess
`-- site3.net
`-- htdocs
|   |-- cgi-bin
|   |   `-- dl.cgi
|   `-- index.html
|-- phpsession
|-- php.ini
`-- .htaccess

Powweb File Permissions

Remember to chmod 640 all .htaccess files, chmod 600 your php.ini files, chmod 600 your php flies, and chmod 705 your cgi scripts.. if you don't want ftp users to be able to change the file than chmod 400.

PHP-CGI vs. MOD_PHP

What's the difference between PHP-CGI and PHP as an Apache module?

Benefits of PHP-CGI

  • php-cgi is more secure. The PHP runs as your user rather than dhapache. That means you can put your database passwords in a file readable only by you and your php scripts can still access it!
  • php-cgi is more flexible. Because of security concerns when running PHP as an Apache module, we disabled commands with the non-CGI PHP. This will cause install problems with certain popular PHP scripts if you run PHP not as a CGI!
  • php-cgi is just as fast as running PHP as an Apache module, and we include more default libraries.

Caveats of PHP-CGI

If one of these is a show-stopper for you, you can easily switch to running PHP as an Apache module and not CGI, but be prepared for a bunch of potential security and ease-of-use issues! If you don't know what any of these drawbacks mean, you're fine just using the default setting of PHP-CGI and not worrying about anything!

  • Variables in the URL which are not regular ?foo=bar variables won't work without using (mod_rewrite)
  • Custom php directives in .htaccess files (php_include_dir /web/user;/web/user/example_dir) won't work.
  • The $_SERVER['SCRIPT_NAME'] variable will return the php.cgi binary rather than the name of your script
  • Persistant database connections will not work. PHP's mysql_pconnect() function will just open a new connection because it can't find a persistant one.

PHP's configuration file

The configuration file (called php3.ini in PHP 3, and simply php.ini as of PHP 4) is read when PHP starts up. For the server module versions of PHP, this happens only once when the web server is started. Note: For the CGI and CLI version, php.ini is read on every invocation.

Running PHP as Apache module (mod_php)

When using PHP as an Apache module, you can also change the configuration settings using directives in Apache configuration files (e.g. httpd.conf) and .htaccess files. You will need one of these privileges:

AllowOverride Options
AllowOverride All

With PHP 4 and PHP 5, there are several Apache directives that allow you to change the PHP configuration from within the Apache configuration files.

NOTE: With PHP 3, there are Apache directives that correspond to each configuration setting in the php3.ini name, except the name is prefixed by "php3_".

php_value name value
Sets the value of the specified directive. Can be used only with PHP_INI_ALL and PHP_INI_PERDIR type directives. To clear a previously set value use none as the value.
php_flag name on|off
Used to set a boolean configuration directive. Can be used only with PHP_INI_ALL and PHP_INI_PERDIR type directives.
php_admin_value name value
Sets the value of the specified directive. This can not be used in .htaccess files. Any directive type set with php_admin_value can not be overridden by .htaccess or virtualhost directives. To clear a previously set value use none as the value.
php_admin_flag name on|off
Used to set a boolean configuration directive. This can not be used in .htaccess files. Any directive type set with php_admin_flag can not be overridden by .htaccess or virtualhost directives.

NOTE: Don't use php_value to set boolean values. use php_flag instead.

Change php settings in .htaccess or httpd.conf

mod_php .htaccess example

add settings to a .htaccess file with 'php_flag' like this:

php_flag register_globals off
php_flag magic_quotes_gpc on

In .htaccess, only true/false on/off flags can be set using php_flag. To set other values you need to use php_value, like this:

php_value upload_max_filesize 20M

PHP_INI_SYSTEM can be configured per-directory by placing it inside a per-directory block in httpd.conf

# Selectively enable APC for wildly popular directories
# apc.enabled is Off in php.ini to reduce memory use
<directory /usr/local/apache2/public_html/forum>
php_flag apc.enabled On
</directory>

NOTE: In order for these settings to work in your htaccess file, you will need to add "Options" to your AllowOverride specifications for the directory/webserver if it's not already allowed.

Src: How to change configuration settings

<ifModule mod_php5.c>
php_value include_path ".:/web/askapache/lib/php"
php_admin_flag safe_mode on
</ifModule>
<ifModule mod_php4.c>
php_value include_path ".:/web/askapache/lib/php"
php_admin_flag safe_mode on
</ifModule>
<ifModule mod_php3.c>
php3_include_path ".:/web/askapache/lib/php"
php3_safe_mode on
</ifModule>

Modify PHP configuration via Windows Registry

When running PHP on Windows, the configuration values can be modified on a per-directory basis using the Windows registry. The configuration values are stored in the registry key HKLMSOFTWAREPHPPer Directory Values, in the sub-keys corresponding to the path names. For example, configuration values for the directory c:inetpubwwwroot would be stored in the key HKLMSOFTWAREPHPPer Directory Valuescinetpubwwwroot. The settings for the directory would be active for any script running from this directory or any subdirectory of it. The values under the key should have the name of the PHP configuration directive and the string value. PHP constants in the values arenot parsed. However, only configuration values changeable in PHP_INI_USER can be set this way, PHP_INI_PERDIR values can not.

Methods to modify PHP configuration

Regardless of how you run PHP, you can change certain values at runtime of your scripts through ini_set().

If you are interested in a complete list of configuration settings on your system with their current values, you can execute the phpinfo() function, and review the resulting page. You can also access the values of individual configuration directives at runtime using ini_get() or get_cfg_var().

No input file specified

One of the most common reasons why you get

No input file specified

(AKA 'the second most useful error message in the world') is that you have set doc_root (in php.ini) to a value which is to the DocumentRoot defined in the apache configuration.

This is the same for other webservers. For example, on lighttpd, make sure the server.document-root value is the same as what is defined as doc_root in php.ini.

PHP.ini file Downloads

External Links

User-Contributed Notes

There are a couple of errors in the mod_rewrite directives given. I found that the following works:

RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^cgi-bin/php.cgi - [F]

I have noticed that some people have noted that running PHP as a CGI program can run slowly compared with a compiled in module. Some have noted that they want to use FastCGI but are hesitant. I found that using the Apache 2's CGID module was a great way to speed up performance almost to the same level as an "so"-installed PHP module but you get the added benefit of running each virtual host under it's own user and group.

In my testing I got 44 pages per second using PHP as a module and I got roughly the same performance (within 5%) running PHP as a CGI program through CGID. CGID is also really easy to set up. Just add --enable-cgid to your Apache configure command and you're good to go. Just set up PHP as a CGI normally. I'm sure that there's extra RAM used for this method but RAM is as cheap as borscht anyways so it shouldn't be a major factor when trying to speed up PHP CGI.


Here are my two cents of knowledge about php-cgi when running CGI script from prompt: If you get the "No input file specified." error, create the environment variable "SCRIPT_FILENAME=C:filestest.php". If you get "Security Alert!" error and it tells you to create the REDIRECT_STATUS environment variable, it is because you have the SERVER_NAME variable set but not the REDIRECT_STATUS variable. Hence, if you have SERVER_NAME, you also need REDIRECT_STATUS, but not otherwise. And you pretty much should have SCRIPT_FILENAME at all time.


--enable-force-cgi-redirect won't work in FastCGI mode as of 4.3.10, it is only supported in CGI mode. However, you can achieve the same result with mod_rewrite under Apache.


RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} !=200
RewriteRule /cgi-bin/path/to/php - [F]

This will only allow internal redirection, thus forbidding direct HTTP access to php interpreter.


PHP CGI with VirtualHosts. This is what I found out while trying to get php to work as CGI with Apache VirtualHosts.

By enabling 'force-cgi-redirects', you must:

  1. set 'cgi.fix_pathinfo=1' in php.ini or the apache logs will show 'unexpected T_STRING' in the php binary.
  2. leave doc_root commented out (php.ini also) or you'll only see 'No input file specified.', instead of the expected output.

You can then turn on the php support for a particular vhost by defining an action/handler inside the corresponding <virtualHost>

Action php-script /cgi-bin/php

PHP works with Apache and suEXEC like this: (Assuming that suEXEC ist allready installed and working)


Install PHP as CGI binary (e.g. in /usr/local/bin/php) (compile with --enable-force-cgi-redirect) and create a Link inside cgi-bin directory to make php-cgi accessable:

cd /usr/local/apache/cgi-bin
ln /usr/local/bin/php php


Edit your httpd.conf file:

AddHandler php4-script .php
Action php4-script /cgi-bin/php
 
<virtualHost 123.456.789.0:80>
User exampleuser
Group examplegroup ...
</virtualHost>

Restart Apache and PHP-scripts are now called under the user-id of exampleuser and group-id of examplegroup.


A replacement for suexec is suphp (http://www.suphp.org).

suPHP is a tool for executing PHP scripts with the permissions of their owners. It consists of an Apache module (mod_suphp) and a setuid root binary (suphp) that is called by the Apache module to change the uid of the process executing the PHP interpreter.


A tip for Windows-users: PHP first seem to look in the php-directory for php.ini, and if that file does not exist, it looks in the Windows directory. I renamed the file php.ini-dist to php.ini and copied it to my Windows directory, and then I modified the infamous "cgi.force_redirect = 0" in the php.ini file located in the Windows directory, to make it work. But it did not because it reads from the "original" php.ini - So when I deleted this php.ini things started working again


If you are using php per cgi and have additionally mod_gzip enabled you have to disable mod_gzip for the php cgi binary to use --enable-cgi-redirect. mod_gzip sets the REDIRECT_STATUS always to 200 which makes it impossible for the php binary to know when it was called directly or when it was called by a redirect.


To use php-cgi with suexec it will be nice that each virtual host has ist's own php.ini. This goes with :

SetEnv PHPRC /var/www/server/www.test.com/conf

But suexec will kill this environment cause It don't know that it is "save" so you must edit the suexec.c for compiling


When using php in cgi mode, it's often a good idea to take a look at the apache suexec feature in addition to the --force-cgi-redirect option.


If you do virutal hosting, you can turn safe mode on and off for different Apache Virutal Hosts using the php_admin_value directive. This also allows you to have customised maximum execution times, disabled functions, etc; anything which is set in php.ini. Note that by placing a base_dir for each virutal host, this means PHP CANNOT access files below this heirachy; strongly recomended for customer hosting.

Example (httpd.conf):

<virtualHost 127.0.0.1:80>
DocumentRoot /var/www/html/safephphost/
ServerName safephp
php_admin_value safe_mode 1
php_admin_value open_base_dir /var/www/html/safephphost/
php_admin_value sendmail_from user.mail.net
</virtualHost>

If you care about security, you are better of setting: register_globals = off, enable_track_vars = on.


If you want to use suexec and reference your php interpreter via #!/usr/local/bin/php, be sure to compile php WITHOUT --enable-force-cgi-redirect.


suEXEC require CGI mode, and slow down the scripts.

  1. Install php as DSO mode. (for max speed and low secure)
  2. Make a seperate CGI install with --enable-force-cgi-redirect, place php to cgi-bin
  3. For more secure with suEXEC, choose one of the following method:
    1. Place a .htaccess file containing this to override main config to protect All php files in subdirectory:
      AddType application/x-httpd-wphp php
      Action application/x-httpd-wphp /cgi-bin/php
    2. add following in httpd.conf and rename sensitive files with the ext .sphp
      AddType application/x-httpd-wphp sphp
      Action application/x-httpd-wphp /cgi-bin/php
    3. Add "php_value doc_root /web/user/html_docs" to each virtual host directive in httpd.conf

Notes on User Notes

cgi.fix_pathinfo Provides real PATH_INFO/PATH_TRANSLATED support for CGI. PHP's previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting this to 1 will cause PHP CGI to fix it's paths to conform to the spec. A setting of zero causes PHP to behave as before. Default is zero. You should fix your scripts to use SCRIPT_FILENAME rather than PATH_TRANSLATED.

cgi.force_redirect gi.force_redirect is necessary to provide security running PHP as a CGI under most web servers. Left undefined, PHP turns this on by default. You can turn it off at your own risk.

cgi.redirect_status_env If cgi.force_redirect is turned on, and you are not running under Apache or Netscape (iPlanet) web servers, you may need to set an environment variable name that PHP will look for to know it is OK to continue execution.

NOTE: Setting this variable may cause security issues, know what you are doing first.

fastcgi.impersonate FastCGI under IIS (on WINNT based OS) supports the ability to impersonate security tokens of the calling client. This allows IIS to define the security context that the request runs under. mod_fastcgi under Apache does not currently support this feature (03/17/2002) Set to 1 if running under IIS. Default is zero.

Tags

February 5th, 2007

Comments Welcome

  • Vijay Modi

    hi,

    Really very nice article.
    You can find another one on the following link:
    http://vijaymodi.wordpress.com/2007/03/03/phpini-settings/

    Regards,
    Vijay Modi

  • Prasanna

    Hi,

    I am using PHP through Apache. I need to include dynamic extensions in PHP (ssh2.so).

    All i need to know is how to specify the custom php.ini path while starting php through Apache.

    Also i tried SetEnv PHPRC /web/users/web/bEXAMPLE/pow.EXAMPLE in .htaccess file and give All permission in httpd.conf file.

    I am not clear in using PHPRC variable and how to use. Please clarify me

    My versions:
    Apache: 2.0.4.7
    PHP:5.2.4

  • Prasanna

    Hi,

    I got this by adding a line PHPINIDir "conf" in httpd.conf file.

    And created a directory "conf" under ServerRoot and place the file php.ini under that directory.

    Now the default php.ini is getting override by the file(php.ini) which i kept under ServerRoot/conf directory.

    Now i can able to load dynamic extensions in PHP through Apache module.

    Thanks for your help.

    Prasanna

  • http://www.askapache.com/ AskApache

    @ Prasanna

    Very cool. Thanks for that!

  • Peter Parker

    Hi,

    Nice Article. It pointed in the right direction. Just wanna ask how can i restrict users in changing "php_ini_system" directives if i set setenv phprc /user/web/directory/php.ini? And will only allow php_ini_all and php_ini_perdir directives?

  • Mike

    Great article! Thanks!

  • All

    where is my php.ini?

  • San

    Hello,
    They does not have time to check if the article is loaded or not ;-)
    or this site came at to of Google only because of SEO?

    San.

  • Steve

    Hi.
    Is it possible to install a new php extension (for eg. Ming) if I host my site with a hosting company.
    I have access to the php.ini file.

  • http://venkatblog.com/ venkatesh

    I am trying to change php.ini setting using .htaccess
    I tried as you have given in this article. you can have look at the .htaccess content below -

    AllowOverride Options
    AllowOverride All
     
    php_value upload_tmp_dir “/usr/local/pem/vhosts/45555/webspace/httpdocs/tmp/”

    It is throwing 500 – internal server error.
    can you please help me in this case

  • http://www.KillerSmiley.com Killer Smiley

    I have a problem after upgrading from PHP4 to PHP5 - my screenscraper scripts stopped working. What I would like to be able to do is simply upload a single .htaccess file to the root directory of each affected site to fix this instead of renaming all of the files involved to "filename.php4" from "filename.php".

    I have tried the methods above, and none of them work - the browser attempts to download the files instead of displaying their contents.

    Any ideas? Solutions?

    I cannot revert my entire hosting package to php4 as many of my newer sites need PHP5 functionality.

  • http://www.novidades100.com.br frankzeffi

    How to work in https pages on localhost Apache server.

  • http://pingzio.com/ ping

    Thanks for tricks, i aplied to my server and my pagespeed score increased.

  • cent

    Directive "php_admin_value open_base_dir /var/www/html/safephphost/whatever" doesn't work with php running as a fastcgi.
    What's the equivalent then?
    Sure, one can change "open_basedir" in php.ini and hide it from users but then, users are only allowed to change run-time php configuration options!
    Is this the only solution in this model?

  • cent

    Directive "php_admin_value open_base_dir /var/www/html/safephphost/whatever" doesn't work with php running as a fastcgi.
    What's the equivalent then?
    Sure, one can change "open_basedir" in php.ini and hide it from users but then, users are only allowed to change run-time php configuration options!
    Is this the only solution in this model?

  • Pingback: Must Read PHP Articles and Resources | androepic

  • debasis

    Nice post,great info

    implicit_flush = Off
    Example demo that

    Turn off safe mode.
    safe_mode = Off
    http://seo-tips-tech.blogspot.com/2013/01/php-configuration-directives.html‎

    Set maximum execution time to 1 minute.
    max_execution_time = 60

    Set the max uploaded file size to be 2 Mb.

    upload_max_filesize =2000000

  • nus

    There is a phrasing problem with the bit about "No input file specified". It says you have the problem when "you have set doc_root (in php.ini) to a value which is to the DocumentRoot defined in the apache configuration". I think this should be: "below the DocumentRoot"...

  • http://yousha.blog.ir/ Yousha Aleayoub

    Sux.

Popular Articles
My Online Tools

Related Articles
Newest Posts
Twitter


  • @askapache · Jul 21
    Magic spells for sending thoughts across time? Books
  • @askapache · Jul 20
    TV is just a relic of the previous generation. We just don't know it yet.
  • @askapache · Jul 20
    I will never go back on my ideals, no matter the cost. I'll never let the economic vultures steal my dreams. I'd rather give up the ghost
  • @askapache · Jul 18
    I don't want a better seat, I want control of the engine
  • @askapache · Jul 14
    No matter how good u r, there will always be someone 2x, 5x, 100x better. This is true for me and everyone. No direction but forward.
  • @askapache · Jul 12
    Heads up, I'll DDoS the f out of askapache next week, to see how resilient it really is :) - will try to overflow disk, net, and ip stack
  • RUN GCC! This is a typical shirt I wear, from the  t.co/46LYbFr4k2  shop. A clerk at the LQ recognized it!  t.co/jjmT0dkCPu 
  • Merlin the Magician  t.co/iMmRbanUi4 
  • ROGUE CODE - Latest novel from @markrussinovich  t.co/apkn0LoPIt 
  • RTFM - surprisingly very helpful and way more comprehensive than it looks! @redteamfieldman #pwnAllTheThings  t.co/xiaJ5g0aC9 
  • Dear Hacker - Letters to the Editor of 2600, from Emmanuel Goldstein  t.co/JCfLab7FAJ 
  • The Mythical Man-Month - Essays on Software Engineering, by Frederick P. Brooks, Jr.  t.co/ilWN5GHElr 
  • "where wizards stay up late" - The Origins of the Internet. Favorite book detailing the birth of the net and IMPs  t.co/gY9VTGJgZz 
  • ZERO DAY - read before Trojan horse  t.co/pPMLGDJv8P 
  • Trojan Horse, a novel!  t.co/Hf8EtYaZVa 
  • The Hacker Playbook - very nice high level overview of attacks  t.co/lHwNVWi61u 
  • Clean Code - A Handbook of Agile Software Craftsmanship  t.co/hnJX0x1qIc 
  • Secrets of the JavaScript Ninja - By my absolute favorite JS hacker John Resig!  t.co/tZ42ljmcCl 
  • Hacking Exposed 7: Network Security Secrets & SolutionsMy all time favorite, basic but thorough and accurate.  t.co/jycW0RDVtZ 
  • Empty words will be no surrogate for cold resolve. Pain is nothing.  t.co/qXjpRxbjCw 

Hacking and Hackers

The use of "hacker" to mean "security breaker" is a confusion on the part of the mass media. We hackers refuse to recognize that meaning, and continue using the word to mean someone who loves to program, someone who enjoys playful cleverness, or the combination of the two. See my article, On Hacking.
-- Richard M. Stallman






[hide]

It's very simple - you read the protocol and write the code. -Bill Joy

Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 3.0 License, just credit with a link.
This site is not supported or endorsed by The Apache Software Foundation (ASF). All software and documentation produced by The ASF is licensed. "Apache" is a trademark of The ASF. NCSA HTTPd.
UNIX ® is a registered Trademark of The Open Group. POSIX ® is a registered Trademark of The IEEE.

| Google+ | askapache

Site Map | Contact Webmaster | License and Disclaimer | Terms of Service

↑ TOPMain