Installatie en configuratie van XAMPP-stack voor een Drupalsite

Het opzetten van een lokale website met Xampp is vrij eenvoudig. Het vet venijn zit in de staart. Pas na behoorlijk wat 'Trial en Error' slaagde ik erin een configuratie samen te stellen die aan mijn wensen voldoet. De standaardinstellingen voor Apache en MySql zijn te beperkend voor mij en leiden al te vaak tot time out-foumeldingen, en geheugenfouten.

Met onderstaande instellingen lukt het me wel om tijdrovende scripts uit te voeren en grote bestanden te importeren.
Het gemakkelijke onderdeel: de installatie van Xampp

    Nieuwste versie van Xampp downloaden van ApacheFriends
    Het programma laat zich standaard installeren naar de \xampp map in de root van de systeemschijf. Ik verander dit niet, maar hernoem een eventueel bestaande map \xampp eerst naar \xampp-oud. Op die manier worden mijn oude instellingen niet overschreven en kan ik die vergelijken met de nieuwe versie. Bij de installatie aanvaard ik braafjes alle voorgestelde standaardinstellingen.

 
Mijn aanpassingen
1. Poort 80 vrijmaken voor Apache

Het is niet echt noodzakelijk, maar zeker het eenvoudigst om poort 80 vrij te houden voor Apache. In mijn geval is die poort in gebruik door de "SQL Server Reporting Services". Aangezien ik andere software gebruik voor mijn SQL-rapporten, schakel ik die service uit door het opstarttype te wijzigen naar 'Manueel', 'Uitgeschakeld'.  Het was overigens niet zo eenvoudig om te achterhalen dat SQL Server Reporting Services poort 80 bezet hielden. Bij het opstarten van Apache kreeg ik de melding dat het proces met PID 4 de poort bezette. PID 4 verwijst meestal naar System en die service probeer je best niet uit te schakelen.
Van zodra de SQL Server Reporting Services worden uitgeschakeld, startte Apache probleemloos op poort 80. SQL Server Reporting Services is trouwens niet de enige mogelijke dader. Vaak poort 80 in gebruik door andere services, zoals IIS, Web Deployment Agent Service, World Wide Web Publishing, ...

2. http-vhosts
Ik hou er niet van om mijn lokale sites te moeten zoeken onder url's als http://localhost\mijnsite. Een url als http://mijnsite.local vind ik een stuk logischer. Om dit mogelijk te maken zijn aanpassingen vereist in \xampp\apache\conf\extra\httpd-vhosts en in \windows\system32\drivers\etc\hosts.

In \windows\system32\drivers\etc\hosts worden de hostnamen gekoppeld aan het ip adres van de localhost. Daarom wordt voor iedere website een regel toegevoegd, als
    127.0.0.1      mijnsite1.local
    127.0.0.1      mijnsite2.local

 

In \xampp\apache\conf\extra\httpd-vhosts wordt voor elk van websites een virtuele host voorzien, als volgt:

<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/mijnsite1"
    ServerName mijnsite1.local
    <Directory "C:/xampp/htdocs/mijnsite1">
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Deze instellingen worden pas geactiveerd na het heropstarten van de Apache service.

3. Grotere file uploads mogelijk maken

Standaard laat Apache de upload van zeer grote bestanden niet toe. Hierdoor kom je al zeer snel in de problemen als een dump van de database moet worden opgeladen.
Om grotere uploads mogelijk te maken moeten een aantal instellingen worden aangepast in php.ini. Het gaat met name om upload_max_filesize, memory_limit en post_max_size.

upload_max_filesize staat standaard ingesteld op 2M. Ik wijzig dit in 128M. Door deze wijziging wordt maximale waarde voor file upload gewijzigd naar 8M, want de grootte van het maximum te uploaden bestand wordt blijkbaar ook nog beperkt door post_max_size. Pas als ook deze laatste waarde wordt ingesteld op 128M wordt de maximale grootte van de bestand ingesteld op 128M.

Dus wijzigen in \xampp\php\php.ini:

    upload_max_filesize=128M
    post_max_size=128M

Vaak is deze oplossing nog onvoldoende, want het uploaden van grotere bestanden neemt vaak meer tijd in beslag dan de maximale tijdslimiet toelaat.
4. Databaseserver meer tijd geven om opdrachten uit te voeren

Het duurt langer om grote bestanden te importeren, daarom moet de tijdslimiet worden opgeschroefd.

In xampp\php\php.ini worden de volgende wijzigingen aangebracht. Die zorgen dat bij beide parameters geen tijdslimiet meer geldt.

max_execution_time =0
max_input_time =-1

In xampp\phpmyadmin\config.inc.php kan de volgende regel worden toegevoegd.

$cfg['ExecTimeLimit']=6000;
 
5. Foutmelding 2006 (server gone away)

Als je uiteindelijk begint te denken dat er je niets meer kan gebeuren, krijg je dan bovenvermelde foutmelding. Deze is op te lossen door de waarde voor max_allowed_packet in php.ini te verhogen. Deze stond standaard op 1M.

Deze instelling vind je in xampp\mysql\bin\my.ini

max_allowed_packet =32M

 

5. Foutmelding 1118 Row Size too large

 

#1118 - Row size too large (> 8126). Changing some columns to
TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may
help. In current row format, BLOB prefix of 768 bytes is stored inline.

[mysqld]
max_allowed_packet=16M

2. http-vhosts

 
4. l10n_update.locale.inc

De standaardlimiet voor het importeren van vertalingen is vaak onvoldoende om grote po-bestanden succesvol te importeren. Als l10n-update leidt tot de foutmelding "Maximum execution time of 240 seconds exceeded...", dan brengt onderstaande aanpassing wellicht soelaas.

Open l10n_update.locale.inc (in sites/all/modules/l10n_update) en verhoog de waarde van de instelling "drupal_set_time_limit(240);". De instelling vind je wellicht op regel 27. Het verhogen van de waarde 240 naar 1200 is in de praktijk ruim voldoende.

Samengevat:

In php.ini

upload_max_filesize=128M
post_max_size=128M
max_execution_time =0
max_input_time =-1

In phpmyadmin\config.inc.php kan de volgende regel worden toegevoegd.

$cfg['ExecTimeLimit']=6000;

In mysql\bin\my.ini

max_allowed_packet =32M