web:mirror

This is an old revision of the document!


How to create a PHP.net mirror

Setting up an official (or unofficial) mirror is described within the official mirror page. However, setting up your own mirror via SVN is possible too and is especially helpful for those working on the PHP website.

I'm lazy. Just give me something to execute

Save the following shell script as IcanHazPHPWeb.sh Then execute sh ./IcanHazPHPWeb.sh And wait for ca 10 minutes.

#!/bin/sh
mkdir ~/php.net
cd ~/php.net
 
# Checkout the english manual sources
svn co https://svn.php.net/repository/phpdoc/modules/doc-en
# Checkout the actual website, except for the distribution/ and extra/ dirs (huge binary files, takes days to download)
svn co --depth immediates https://svn.php.net/repository/web/php/trunk phpweb
cd phpweb
svn up --set-depth infinity ./styles ./security ./images ./reST ./manual ./backend ./stats ./bin ./releases ./conferences ./pear ./license ./js ./ie6update ./archive  ./include
 
# Some files are pre-generated on master.php.net for various reasons
(cd include && for i in countries.inc last_updated.inc mirrors.inc pregen-confs.inc pregen-events.inc pregen-news.inc; do wget "http://www.php.net/include/$i"; done;)
(cd backend && for i in ip-to-country.db ip-to-country.idx; do wget "http://www.php.net/backend/$i"; done;)
cd ..
 
 
# Install PhD and build the manual
cd doc-en
php doc-base/configure.php
pear install doc.php.net/phd_php
phd -d doc-base/.manual.xml -P PHP -f php
cd ..
 
# Symlink the generated english documentations from our PhD build dir
(cd manual && ln -s ~/doc-en/output/php-web en)
 
echo "Now copy&paste the VirtualHost config from http://php.net/mirroring.php#settings"
echo "Fill out the 'template' and restart apache"

The SVN way, but with a hack

  1. Checkout phpweb (svn co http://svn.php.net/repository/web/php/trunk phpweb)
  2. Within phpweb, run this:
    <?php
    // Note: This is a complete hack
    // Mirror to steal from
    $mirror = 'http://www.php.net/';
     
    // Files phpweb needs (typically from rsync box)
    $files = array('include/mirrors.inc', 'include/countries.inc', 'include/pregen-events.inc', 'include/pregen-news.inc', 'include/pregen-confs.inc');
     
    foreach ($files as $file) {
    	file_put_contents($file, file_get_contents($mirror . $file));
    }
     
    // Another required file, let's create it ourselves
    file_put_contents('include/last_updated.inc', '<?php $LAST_UPDATED=' . time() . '; ?>');
    ?>
  3. Make a virtual host, see The official mirror page
  4. If wanting the PHP Manual too, either:
web/mirror.1293407028.txt.gz · Last modified: 2017/09/22 13:28 (external edit)