Mirroring The PHP Website
If you would like to participate in the official PHP mirrors program, read and follow these instructions carefully. You should have the consent of your hosting company (if you aren't a hosting company yourself), and be prepared for some potentially significant bandwidth usage. As of January 2011, the network is averaging 223GB per day spread across 115 mirrors, or roughly 1.9GB per day. This can go up to 12GB per day or more for busy mirrors, such as those in the US, UK, and India. Please be sure your server or hosting account is able to handle a minimum of roughly 58 gigabytes of transfer each month without incurring any additional costs or penalties. In the event that such action is taken against your account, remember, it is your responsibility.
Official mirror program participants are required to use PHP 5.2.0 or greater, with a preference towards PHP 5.3. Set it up as an Apache module with the settings outlined below, or in any other Apache connected way (CGI, FastCGI, etc), considering the requested PHP settings outlined below in the Apache vhost instructions. The size of the full website is approximately 2.1 gigabytes.
Applications to join the official mirror program are reviewed on a case-by-case basis, but we will only approve those from ISPs and web hosting providers, universities and state-recognized academic institutions, and PHP-centric web development firms. Under no circumstances will we permit new applications from marketing firms, website portals or directories, or anything of questionable moral or legal standing. We also reserve the right, at our discretion, to refuse any application for any reason.
Please note that we are currently only accepting new official mirrors in countries where we don't already have two official mirrors. For a list of active official mirrors, have a look at mirrors.php. Before you start to set up an official mirror site, you are advised to contact firstname.lastname@example.org (a publicly-available mailing list, publicly archived around the web) and ask if your application will have a chance to be accepted. We have this limit in place to avoid overloading our rsync servers and monitoring infrastructure. We have found that this 2 mirror limit per country serves our users well, so please do not ask to be the 3rd in a country that already has 2 unless you have a very good reason. Please also be aware that the mirror is required to be physically located in the country you would like to serve. If there are already two mirrors in a country for which you would like to provide an official mirror, we operate an official waiting list, to which you may add your name and information here. If and when a spot becomes available, we will go through the applications on the waiting list before entertaining new public applications.
If you are not an official mirror (e.g. you mirror the site for your company's
internal use), you should not rsync from
rsync.php.net more frequently
than once a day, or you may find your IP blocked. Also, please make
an effort to only mirror those parts of the site that you actually need.
(For example, exclude the manual in all languages that you
will not be using and exclude the distributions directory.)
Get Files With Rsync
First, you need to have a rsync installed. As you have rsync, fetch the web files with the following:
rsync -avzC --timeout=600 --delete --delete-after \ --include='distributions/*.exe' \ rsync.php.net::phpweb /your/local/path
Setting up an unofficial mirror, and want to only mirror one language of the manual? Add:
--include='manual/en/' --include='manual/en/**' --exclude='manual/**' --exclude='distributions/manual/**'
"--delete-after" in the command line above (substituting your
prefered language code in place of
'en'). You can also exclude the
whole distributions directory (and the related extra folder) by replacing
/your/local/path isn't in your web document tree (why isn't it?),
then symlink the
phpweb/ directory to the correct place on your
Official PHP mirror sites should provide the exact content coming from
rsync.php.net, and should not be altered in any way not described
in the mirroring guidelines. Failing to do so can result in immediate
removal of your mirror from our list.
Add SQLite 3 Support
SQLite is an embedded SQL database implementation that has very high performance for applications with low write concurrency. PHP mirrors currently employ SQLite for URL shortcut lookups, and it is a requirement of all official mirrors to have it installed and available to PHP.
There are a couple of SQLite 3 implementations in PHP. One is via the PDO extension by using the SQLite driver (pdo_sqlite), which is what you should be sure is installed. The other is via the SQLite3 extension. These extensions are both compiled into PHP by default. Note: Some Linux distributions disable many extensions in their package systems, including SQLite. Please make sure you install the "php5-sqlite" (or similiar) package if using such a system.
Setup Apache VirtualHost
Make sure your web server is set up to serve up
as PHP parsed files. If it isn't, add the mime-type to your config.
Please make sure you have turned off output compression for binary files
Create a virtualhost which looks something like:
<VirtualHost *-or-your-hostname-or-your-ip-here> <Directory /www/htdocs/phpweb> # Do not display directory listings if index is not present, # and do not try to match filenames if extension is omitted Options -Indexes -MultiViews </Directory> ServerName ccx.php.net ServerAlias cc.php.net www.ccx.php.net www.cc.php.net the.cname.you.set.up.example.com ServerAdmin email@example.com UseCanonicalName On # Webroot of PHP mirror site DocumentRoot /www/htdocs/phpweb # Log server activity ErrorLog logs/error_log TransferLog logs/access_log # Set directory index DirectoryIndex index.php index.html # Handle errors with local error handler script ErrorDocument 401 /error.php ErrorDocument 403 /error.php ErrorDocument 404 /error.php # Add types not specified by Apache by default AddType application/octet-stream .chm .bz2 .tgz .msi AddType application/x-pilot .prc .pdb # Set mirror's preferred language here SetEnv MIRROR_LANGUAGE "en" # The next two lines are only necessary if generating # stats (see below), otherwise you should comment them out Alias /stats/ /path/to/local/stats/ SetEnv MIRROR_STATS 1 # Apache2 has 'AddHandler type-map var' enabled by default. # Remove the comment sign on the line below if you have it enabled. # RemoveHandler var # Turn spelling support off (which would break URL shortcuts) <IfModule mod_speling.c> CheckSpelling Off </IfModule> # A few recommended PHP directives php_flag display_errors off # If you have Russian Apache with mod_charset installed, # do not forget to search for this line in your existing # configuration, and comment it out: # AddHandler strip-meta-http .htm .html </VirtualHost>
You should only start to set up an Apache virtualhost for an official
mirror, if you have contacted us first, and asked
for a possible name for your mirror. The official names for PHP mirrors
are in the convention:
stands for the 2-letter ISO country code of your mirror's location and
"x" is an incremental identifier for the mirrors of that country.
Do not assume that you know the code you will receive until your
application has been reviewed and approved, and do not submit an application
saying, for example, "We are applying to become DE1.PHP.NET," because it's
possible that the mirror already exists, but is experiencing issues that
have it temporarily removed from active rotation.
We do not want anyone to waste their time only to have their application
altered or rejected.
The mirrors should also listen for the
as we have round robin
dns configured for the those records, so any active mirror can receive
traffic for their respective
Before adding new official mirrors to our DNS, we require the maintainers
to set up the mirrors with an address we can use as a CNAME in the DNS.
This subdomain (
the.cname.you.set.up.example.com in the above
example) will be checked by mirror admins before the mirror is added.
Therefore it is important that the mirror is capable of serving requests
for this name and the
(www.)cc(x).php.net address provided by the
When setting up the vhost, provide an asterisk, a hostname or an IP
address in the VirtualHost container's header depending on whether
you would like to make the vhost work for all IPs handled by Apache,
or just a specific hostname/IP address. Consult
documentation for the differences of the two methods. It is very
important to use your
ccx.php.net address as the ServerName, so
URL redirections will keep the requests in the php.net domain, ensuring
that the My PHP.net service will work, plus it will cause the mirror to show
up as an unofficial mirror.
Change the DocumentRoot setting as appropriate, specify the mirror's preferred language, and provide settings according to your stats setup, if your mirror is going to provide it. For the preferred language setting, choose one from those available as manual translations. If you provide something else, your default language will be English. After you restart Apache, your mirror site should start working.
Setting Up Local Stats
Setting up local stats can be a plus on your mirror. We provide some setup instructions for that.
Setup Regular Updates
You must also set up a cron job that periodically does an rsync to refresh your web directory. This will ensure that your web site is up to date. Something like:
50 * * * * rsync -avzC --timeout=600 --delete --delete-after --include='distributions/*.exe' rsync.php.net::phpweb /your/local/path
Remember to specify the same rsync parameters you used to get
the phpweb files. You should try to stagger your times a bit from the
example to help spread the load on the
We would like to thank you for providing a mirror, so if you would like to display a logo on the mirror site promoting your company, you are able to do so by following these steps:
- Create a 120 x 60 pixel sized logo button.
- Copy it to your
- Go visit your mirror URL and check if it is there.
The PHP Group do reserve the right to refuse images based on content, but most things should be fine.
We have chosen a banner size which conforms with the Internet Advertising Bureau standards.
And finally, don't forget to put a nice little PHP logo somewhere on your hosting company's site if possible. Grab one of the logos from the Download logos page, and link it to your mirror. This shows the community that you are a proud supporter of PHP and open source technology, and you will be worshipped every hour, on the hour, by millions. Well, okay, not worshipped.... but folks will certainly appreciate your generosity and support!
Mirror Setup Troubleshooting
The mirror troubleshooting guide contains information about the common and potential problems discovered when setting up and maintaining a PHP.net mirror. Included are links that perform many of the tests executed by the automated mirror management tools.
Data Registered About Official Mirrors
Once you have done the above and your site appears to work, send a message to firstname.lastname@example.org with the following information, and appropriate steps will be taken to integrate your mirror site:
- Your country.
- The ccx.php.net address you used to set up the mirror site, which you obtained previously in a conversation with the mirror admins.
- Your name and email address to be registered as the admin of the mirror.
A hostname that we can use as a CNAME for the country-code-based
name of the mirror (
the.cname.you.set.up.example.comin the above setup example). Using a name means you can move the mirror to another IP address without coordinating with us at all.
- Whether or not you've installed local stats support on your mirror.
- The name of the hosting company.
- The URL of the hosting company. This link is provided with the company's name at the bottom of pages, with the sponsor image on the frontpage and in the mirror listing.
There is a mailing list named
lists.php.net which we would appreciate if you could sign up to.
This mailing list is extremly low traffic and only used for communication
between mirror maintainers and the php.net webmasters.
To subscribe send an empty message to: email@example.com
Thank you for your interest in providing a mirror! If you ever have any questions or concerns, drop us a line at firstname.lastname@example.org --- we are here to help!