Manually install Apache, PHP and MySQL on Windows (WAMP)

This post is about how to manually install WAMP without using any ready-made package such as WampServer, XAMPP, Ampps, etc. Also, how to configure them to work with each other. WAMP stands for Windows, Apache, MySQL and PHP. FYI, I’m using Windows 10 Pro 64-bit.


First, you need to install Apache. It’s recommended for you to read the Platform Specific Notes of Apache for Windows before you can proceed because it explains some Windows-specific features like running as a service that you don’t have on other OSes and you probably never used before.

As mentioned in the notes, Apache doesn’t provide binaries for Windows. However, they have links to several third-party sites that provide binaries, for example Apache Lounge.

From that website, we can download either the 32-bit version or 64-bit version. If your OS is 64-bit, you should always try to install 64-bit version of software.

Here’s the latest version that I used when writing this: Apache 2.4.17 Win64 (

Once downloaded, just extract the Apache24 folder to the root of your C drive, so that you will have a path like this C:\Apache24\bin.

Open a command line window (Windows+R and type cmd then press Enter), change directory into C:\Apache24\bin or type the following:

cd C:\Apache24\bin

Normally, it shouldn’t print any errors.

If you get an error dialog stating that MSVCR110.dll is missing, you’ll need to install the Visual C++ Redistributable for Visual Studio 2012. If it’s saying that it can’t bind to port 80, check if another application uses that port. Skype application is known to use port 80 and 443 by default. You may need to uncheck “Use port 80 and 443 as alternatives for incoming connections” in its advanced connection settings and restart your Skype to apply the changes.

A warning like Could not reliably determine the server’s fully qualified domain name can be ignored for now.

Then, open a web browser and browse to http://localhost. If you see a page saying It works!, then it means your Apache installation is working.

The warning above can be fixed by editing C:\Apache24\conf\httpd.conf, uncomment and change it into something like this:

ServerName localhost:80

Finally, if you want to run the server automatically when the system starts (even if nobody logs in), you’ll need to run it as a service. Open your command prompt as an administrator, type:

cd C:\Apache24\bin
httpd.exe -k install

If it’s currently still running, you need to terminate it first by pressing Ctrl+C in the command prompt.

Now you have a new service in Services (Windows+R, then type services.msc then press Enter) named as “Apache2.4”. You can control just like other Windows services to start, stop or restart.


Download the latest PHP binaries from the official PHP for Windows download page, choose Thread Safe version that matches your Apache installation (x86 for 32-bit, x64 for 64-bit).

The version I used is VC11 x64 Thread Safe (

Create an empty PHP folder at the root of your C drive, extract the archive there. You should have a path like C:\PHP\ext.

Ini C:\PHP, rename the php.ini-production or php.ini-development (depending on what you want) to php.ini. For me, I chose php.ini-development.

Open that php.ini file, search for extension_dir = "ext" and uncomment that line (remove the first ;). I also uncommented several other extensions such as these following:


Don’t forget to set your timezone. Search for ;date.timezone, remove ; and update it into something like this; date.timezone = Asia/Kuala_Lumpur as for me. Else, it will set to UTC by default.

Back to Apache

Now configure Apache to use that PHP by editing C:\Apache24\conf\httpd.conf, after all the LoadModule lines, add the following:

LoadModule php5_module C:/PHP/php5apache2_4.dll

<IfModule php5_module>
    DirectoryIndex index.html index.php
    AddHandler application/x-httpd-php .php
    PHPIniDir "C:/PHP"

Now try to start Apache manually or restart the service, if you see no errors, it means your configurations file is valid and PHP is most likely working.

You can test your PHP installation by creating a file like info.php with <?php phpinfo(); inside. Then browse to http://localhost/info.php, you should see a quite bit of info about your system and your PHP installation plus all of its modules.


On the MySQL Installer download page, download the web installer version. Mine is mysql-installer-web-community- - it is the latest version as I’m writing this article.

The installer will automatically install the appropriate version (32-bit or 64-bit) depending on your system. During the installation, it might install all the available products and may ask for some dependencies like Python for MySQL Connector/Python. You may ignored it first and just proceed. I ignored it because I don’t need those MySQL Connectors and I’m going to remove them anyway.

If you’re installing for development, then the Developer default will be your best option. It’ll also install MySQL Workbench which is a native GUI client, thus avoiding you having to install slow web-based tools such as phpMyAdmin if you aren’t comfortable with using the command line client.

However, as for me, I just installed MySQL Server, MySQL Workbench and MySQL Documentation. The others I removed them via MySQL Installer.

Bug in MySQL Workbench 6.3 CE

But, there is a bug that I’m facing where I cannot start MySQL Workbench and got the error dialog stating something like this:

The type initializer for 'HtmlRenderer.Utils.FontsUtils' threw an exception.

This issue occurs due to the HTML rendered DLL that is included in MySQL Workbench. Full details of the bug are here.

To fix the bug, I just downloaded this DLL file (HtmlRenderer.dll), go to C:\Program Files\MySQL\MySQL Workbench 6.3 CE\ then paste it here (replace the existing file). Now I can open MySQL Workbench as usual.

phpMyAdmin or Adminer for database management


Go to phpMyAdmin download page, as for me I chose Extract the archive into the Apache htdocs folder and rename phpMyAdmin- into phpmyadmin. You should have a path like this; C:\Apache24\htdocs\phpmyadmin.

C:\Apache24\htdocs is your Apache WWW folder. So, your phpMyAdmin can be accessed by visiting the URL: http://localhost/phpmyadmin.

Inside C:\Apache24\htdocs\phpmyadmin, look for then rename it into Open the file, fill in the code line:

$cfg['blowfish_secret'] = 'YOUR_SECRET_KEY'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

For example:

$cfg['blowfish_secret'] = 'W4Y1'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

By default, nothing much need to configure since phpMyAdmin automatically detect the port used by MySQL Server. So, you can directly access http://localhost/phpmyadmin and login (username and password) as what you set during MySQL installation.


Alternatively, you can use Adminer, a database management in a single PHP file. It’s really lightweight and I mostly use this script to manage my MySQL database online.

Optional: Installing Composer

Composer is a tool for dependency management in PHP, like a package manager. It allows to easily install PHP packages and even entire frameworks.

Composer requires the PHP OpenSSL extension to be enabled, so you need to uncomment the extension line in C:\PHP\php.ini into something like this:


Now download Composer’s Windows installer from their download page. Install it and follow the instructions. When prompted for the path to PHP, browse to C:\PHP then select php.exe.

To test if it works, open the command prompt, type composer.

You should get a nice ASCII-art logo like this:

/ ____/___  ____ ___  ____  ____  ________  _____
/ /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
Composer version 1.0-dev (a54f84f05f915c6d42bed94de0cdcb4406a4707b) 2015-10-13 13:09:04

That’s it! You now have a fully functional WAMP server that runs as a service. If you set up for production environment instead of development, you might need to read carefully their notes or instruction manual, configure your firewall properly and try to consult with expert in order to maximize the security and performance. Thanks for reading anyway!