Category Archives: WAMP Developer Server

Installing PEAR For WAMP

Installing and setting up PEAR is very easy.

1. Create this folder if it does not already exist:

2. Download the latest version of PEAR’s installation file and save it into the above folder:

3. Open the command line (WampDeveloper, System Tab, button: Command Line) and within run these commands:

cd \WampDeveloper\Tools\PEAR
php go-pear.phar

4. Select to install PEAR system-wide.


WampDeveloper already includes path "C:\WampDeveloper\Tools\PEAR" in PHP’s "include_path" setting (php.ini).

PEAR Installation Guide

List Of PEAR Packages

Enabling WampDeveloper’s PHP OPcache (OPcode Cache)

To enable the PHP’s OPcode cache extension “php_opcache.dll”:

1. Open PHP’s configuration file php.ini (Reliability Tab, click button: php.ini).

2. Near the bottom of the file find section “[Zend OPcache]“, and uncomment that section (remove the ‘;’ from each line).

This setting should already be set to “1″, which enables OPcache globally for all websites (…the other option is to only enable it for specific websites via their VirtualHost files):

* Be careful not to uncomment the plain-text lines (the real comments that explain things) or Apache might not start.

3. Open the website’s HTTP and SSL VirtualHost files (Websites Tab, select website, click buttons ‘HTTP VirtualHost’ + ‘SSL VirtualHost’). Remove, or comment out, this line:
php_admin_flag opcache.enable Off

* The above line might be inside both a “<IfModule php5_module>” (for PHP5) and “<IfModule sapi_apache2.c>” (for PHP4) blocks.

4. Save files (php.ini and VirtualHost files), and restart Apache for configuration changes to take effect. * Close and open WampDeveloper again to see changes in UI checkbox of Zend OPcache.


* There is a minor bug in the current release of Apache and/or PHP versions that makes phpMyAdmin eventually crash Apache while the PHP OPcode cache is enabled, unless you implement the fix shown here:

Edit file:

Comment out line (add ‘#’ in front):
php_admin_flag opcache.enable Off

* If you update your PHP scripts while the PHP OPcode cache is enabled, this configuration line in the “[Zend OPcache]” section will cause the previous results to remain for 60 seconds before your changes are displayed (which confuses a lot of developers when they don’t see the changes immediately):

* OPcache must be enabled globally (opcache.enable=1) when using PHP-FCGI, as in this case, it’s not possible to set this value via a website’s VirtualHost.

Setting Up An FTP Connection To WAMP

To set up FTP access to your websites, you have to -

1. Install your choice of an FTP Server, such as FileZilla (a popular one), on the same system that the WAMP server is on.

2. Using the FTP Server:

A) Create an FTP user account with full read and write permission granted on your website’s \webroot (DocumentRoot) folder.
Example: C:\WampDeveloper\Websites\\webroot\

B) And set that folder as the FTP user’s home-folder.

Then to take care of everything else -

1. Port-forward the FTP port in the Router to the LAN IP address of the server (if you are behind a Router).

2. Open the FTP port (for incoming connections) in Windows’ Firewall application.

The FTP port is 21.

The remote FTP user would then login on the WAMP server’s IP address (Public IP) or website’s domain-name (if the domain is registered and reachable) using his username + password credentials, and will have access to the specified home-folder.

* Everything related to FTP would be done via the FTP Server, and not the WAMP server.

* WinSCP is a good FTP client that can be used to connect to the FTP server.

Using Gmail and MSMTP To Send Mail From PHP

1. Enabled IMAP access under your Gmail account, to be able to connect to Gmail via something other than its web interface:

Settings - Forwarding and POP/IMAP - IMAP Access - Enable IMAP - Save Changes


2. Set PHP to use MSMTP as “sendmail”:

Edit file php.ini (C:\WampDeveloper\Config\Php\php.ini)

Disable mail()’s default use of a local mail server.

;SMTP = localhost
;smtp_port = 25

* Comment the above lines for SMTP and smtp_port by using the “;” character.

Enable mail()’s use of MSMTP.

sendmail_path = "C:/WampDeveloper/Tools/msmtp/msmtp.exe -d -C C:/WampDeveloper/Tools/msmtp/msmtprc.ini -t --read-envelope-from"

mail.log = "C:/WampDeveloper/Logs/Php/maillog.txt"

* Uncomment the above lines by removing the “;” character. And make sure to update the paths to the correct drive letter.

3. Define your Gmail account information for MSMTP to use (using Gmail’s outgoing mail settings):

Edit file msmtprc.ini (C:\WampDeveloper\Tools\msmtp\msmtprc.ini)

# Default values for all accounts
tls_certcheck off
logfile C:/WampDeveloper/Tools/msmtp/msmtplog.txt

* Make sure to update the logfile path to the correct drive letter.

account Gmail
port 587
auth on
tls on
password mypassword

* Update the above lines with your email address and password.

4. Send a test email:

Create file C:\WampDeveloper\Websites\\webroot\send-email.php

Set the proper “$from” and “$to” email addresses.

  $from    = '';
  $to      = 'someone.else@somewhere.else';

  $subject = 'Test Subject';
  $message = 'Hello. Testing email.';
  $headers =
    'From: ' . $from . "\r\n" .
    'Reply-To: ' . $from . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

  if(mail($to, $subject, $message, $headers))
    echo 'Mail function returned successfully. Mail has probably been sent.';
    echo 'Error! Mail function failed. Mail NOT sent.';

* Make sure that your “From:” email address matches the email address defined for Gmail in msmtprc.ini. You cannot use another email address (Gmail will reject it).

Access URL

Then check your Gmail’s Sent folder, and your receiving account’s Inbox and Spam folder.

5. Debugging MSMTP:

If you do not receive your test email, and your Gmail account does not have a copy of the email in its Sent folder, check MSMTP’s log file for clues (msmtplog.txt).

You can also test sending a basic email directly from the command line (to bypass PHP) to see if MSMTP is working itself (it will output debug info)…

echo Subject: Testing Email. | C:\WampDeveloper\Tools\msmtp\msmtp --debug --file=C:/WampDeveloper/Tools/msmtp/msmtprc.ini --logfile=C:/WampDeveloper/Tools/msmtp/msmtplog.txt -t someone.else@somewhere.else

* Update the above paths, and the “from” ( and “to” (someone.else@somewhere.else) email addresses. This email will only have a subject line, it will not have a body due to the limitations of the command line.

6. Help:

PHP Mail Function
Problems sending mail with POP or IMAP

Website Only Shows Text Content With All Graphics Missing

My site look perfect from localhost, but not from the internet. Why can’t I see styles and pictures on my website?

The simple answer is that all your generated links (in the HTML source of the page) are still probably using “localhost”…

If you load your website in your Browser (Chrome, IE, Firefox) from outside, right click on the page, and select ‘View Page Source’, you’ll see that all the links to the CSS and Graphic content (images) are either:

  1. Of the form http://localhost/ or
  2. Or using a domain-name that is made up or does not have proper global DNS set up.

None of these locations and URLs are reachable from outside. They are only reachable from the server (the local system).

You have to use a Domain Name for the website that is not localhost, a LAN IP, etc. That Domain Name should also resolve to the public IP address of the server, and not a local or LAN IP.

This could also be a webapp issue – for example, with WordPress originally installed for localhost, you’ll need to go into WordPress Setting, General Tab, and update/change the “wordpress address” and “site address” to a address other than “localhost” (an address that can be reached from outside).

* When you test your website again from outside, make sure to hard-refresh the page (in your Browser) by pressing Ctrl-F5 so everything is reloaded (so you don’t get cached pages and old results).

How to Transfer a Local MySQL Database to Another Server

These instructions will show you how to export a single database from MySQL into an SQL file, that you can move/copy to the remote Host, and import it into that Host’s MySQL server. The local and remote Hosts can be either Windows or Linux (it will work identically).

Execute these commands into the command-line (Windows) or shell (Linux).

On Local Host

mysqldump --user=root --password >

This will create and populate file \<working-directory-path>\ with database named “”.

On Remote Host

mysqladmin --user=root --password drop
mysqladmin --user=root --password create
mysql -u root -p < \path\to\

This will delete and create database named “”, and then will populate that database with data from SQL file \path\to\


* Leave the “--password” and “-p” switch out if MySQL’s root password is not set. Otherwise, the password will be prompted for when you press Enter.

* Be careful copy/pasting character: ‘-’. It can be inadvertently changed to a special Unicode dash character (instead of the ASCII hyphen-minus) that’s indistinguishable, which will not work.

* Aside from the command-line, all this can also be done from phpMyAdmin.

* Also, this can be done automatically by saving the export and import commands into a BAT or SH file on each system, so you never have to redo/retype them, just click or execute one file.

* To create a user with permissions set to a database, execute:

mysql -u root -p
GRANT ALL PRIVILEGES ON ``.* TO 'db.username'@'db.hostname' IDENTIFIED BY 'db.password';

For wordpress, and other webapps, you can find the name, host, and password in the webapp’s configuration file.

* WinSCP is a good FTP client if you need to transfer the files.

Hosting Apache and WAMP Websites on Azure Cloud

After installing Apache, or a WAMP server such as WampDeveloper Pro, in a Windows VM on Azure Cloud, you’ll need to connect that VM to port 80 and also open internet access to Apache.

Create Endpoints for Port 80 and 443

Azure needs to have its “port endpoints” set up to be able to forward incoming port 80 and 443 traffic to the right VM (and the right port in the VM).

Create new endpoints from Public:80 to Private:80 (and the same for port 443). Don’t select/check-mark ‘Create load-balancing set’, nor ‘Enable direct server return’, unless you are running multiple VMs and want the traffic to be split between them for these ports.

Virtual Machine > Endpoint > Add endpoint > Next > name:http, protocol:tcp, public port:80, private port:80 > click Complete

How to Set Up Endpoints to a Virtual Machine

Configure Windows Firewall To Open Port 80 and 443

Windows Firewall blocks, by default, incoming port 80 (HTTP) and 443 (HTTPS) requests, for Protocol TCP and UDP. You’ll need to create Inbound Rules to open these ports.

Note that:

  • If IIS was installed previously, the existing port 80 and 443 rules might only be in effect for IIS. Delete them and create new rules for general port 80 and 443 use.
  • Check for any blocking rules automatically created for the Apache httpd.exe program, they will be named as such (Apache HTTP Server).
  • Every time you update/change Apache versions, the Windows Firewall will attempt to create a new blocking rule for it.

Clear Access Control List Rules

Select port 80 and 443 Endpoints and click ‘Manage ACL’. Delete any rules present (you do not need them for a publicly accessible website).


* It might take 10 minutes for endpoint changes to take effect in the system.

* Before installing or running Apache on Azure, make sure that IIS is uninstalled, or at least that its Service is stopped and its Startup Type changed from “Automatic” to “Manual” or “Disabled”. Apache and IIS are both configured (by default) to bind-to/listen-on ports 80 and 443 on all IPs, and unless they are bound to different IPs or on different ports, they will not be able to run at the same time (side-by-side).

Using Custom Apache PHP MySQL Versions Under WampDeveloper

WampDeveloper Pro can use (just about) any version of Apache, PHP, and MySQL that is supplied… It does not matter if those versions are provided through us, or from somewhere else.

WampDeveloper Pro will happily use any custom (user supplied) 32 and 64 bit versions of Apache, PHP, and MySQL as long as:

  • They are placed into the proper \WampDeveloper\Versions\<component-name>\<version-format>\ folder.
  • Any extra Apache and PHP modules/extensions *that are used* (ex: XDebug loaded in php.ini) are also included.

Howto Use 64bit Apache 2.4 + PHP 5.5 + MySQL 5.6 Versions

Apache 2.4 and PHP 5.5 64 bit VC11 (VS.NET 2012) builds can be downloaded from here:

Unpack and place Apache as:

Unpack and place PHP as (depending if it’s PHP-regular or PHP-FCGI):


All extra Apache modules will need to be of build type: VC11, 64bit

The following Apache modules will need to be inside the version’s \modules folder:

  • mod_fcgid – only if you are using PHP-FCGI.
  • mod_logio + mod_ssl – are almost always already present/provided in the package.
  • mod_security – only if you are using it / have it enabled (most don’t).

Also, you can safely delete these Apache version’s folders as they will be re-created by WampDeveloper Pro:
cgi-bin, conf, htdocs, logs


All extra PHP extensions will need to be of build type: VC11, 64bit

PHP extensions also have the TS/NTS specification:

  • For PHP-regular, extensions are “TS” (Thread Safe)
  • For PHP-FCGI, extensions are “NTS” (Not Thread Safe)

The following PHP extensions will need to be inside the version’s \ext folder, at least if you are using them (have them loaded in php.ini):
php_xdebug.dll, ioncube_loader.dll, php_memcache.dll, php_mongo.dll, php_varnish.dll, php_xcache.dll, php_imagick\php_imagick.dll

The extensions will need to be properly re-named from their default file-names to the above names.

The extensions will need to be downloaded for build: PHP 5.5, VC11, 64bit, TS and/or NTS (depending on if it’s for PHP or PHP-FCGI).

Most PHP extensions can be downloaded from here:

Also, you can safely delete the PHP version’s php.ini file as it will be re-created by WampDeveloper Pro.


Download the “zip archive” of MySQL 5.6 64 bit from here:

Unpack and place it as:

Delete it’s \data folder.

VC++ Runtime DLLs

Since we are using VS.NET 2012 builds of Apache and PHP, the proper Runtime DLLs that they depend on might not be present on your OS…


The VC++ 2012 Runtime (x64) will need to be installed on your OS:

Running Multiple Versions of PHP 5 Under Apache Side-by-Side

This guide will show you how to set up and run PHP 5.5 and 5.3 at the same time under Apache (but can also be used to set up and run any two, or more, different PHP 5 versions side-by-side).

1. Make sure WampDeveloper is currently using PHP 5.5 FCGI (check Components Tab). This will load the default/global PHP-FCGI configuration, which we will later override under a website or directory.

You’ll also need the PHP 5.3 FCGI version already downloaded and present on the system.

We’ll use PHP version 5.3.28 in this example.

2. Create a separate PHP configuration file for the specific PHP 5.3 version, php-…

Make a copy of file:

Rename the copy:

Edit the new file and replace all occurrences of the global PHP path with the specific version’s path:









3. Edit the website’s HTTP and SSL VirtualHost files and insert into the “webroot” Directory block the overriding PHP-FCGI configuration:

<IfModule fcgid_module>
	FcgidWrapper "C:/WampDeveloper/Versions/Php/php- -c C:/WampDeveloper/Config/Php/php-" .php virtual
	FcgidWrapper "C:/WampDeveloper/Versions/Php/php- -c C:/WampDeveloper/Config/Php/php-" .php4 virtual
	FcgidWrapper "C:/WampDeveloper/Versions/Php/php- -c C:/WampDeveloper/Config/Php/php-" .php5 virtual

This will set up the entire website to use the different PHP version. If instead you just want a specific directory using a different PHP version… Instead of using the “webroot” Directory block, create your own block next to it, and place the above configuration inside.

4. Save edited files. Restart Apache.

WampDeveloper 5 Known Issues and Solutions


Issue: Mediawiki installation into root (/) of a website produces Browser error “website is not available”


Fixed in upcoming release.


When Mediawiki is installed into the root of a website (into ‘\webroot’), as opposed to some sub-folder like ‘\webroot\wiki’, Browser is redirected to http://index.php/… (no domain-name in URL) and produces a general website not available or reachable error.


The webapp package uses a relative path in Mediawiki’s configuration file that is misinterpreted as a full path.


After Mediawiki installation, edit file (via Notepad) -

Change this:
$wgScriptPath = "/";

To this:
$wgScriptPath = "";

Save file. Also clear your Browser cache and restart (close + open) it.

Issue: New websites’ VirtualHost files are missing PHP error_log setup for Legacy Channel: Apache 2.0 + PHP 4.4


Fixed in upcoming release.


When using Legacy Channel for Apache 2.0, and PHP 4.4, PHP’s error_log is not set per website (the global PHP error_log defined in php.ini is used instead).


The VirtualHost templates seems to be missing this part.


Edit files (via Notepad) -

Right after this code:

<IfModule mod_php5.c>
  php_value error_log "{{logsAlt}}/Websites/{{websiteName}}/http.phplog.txt"
  # php_admin_flag {{opcodeString}} Off

Add this:

# Apache 2.0 / PHP 4.4
<IfModule sapi_apache2.c>
  php_value error_log "{{logsAlt}}/Websites/{{websiteName}}/http.phplog.txt"
  # php_admin_flag apc.enabled Off

* For the SSL VirtualHost, instead of string http.phplog.txt, using string ssl.phplog.txt.

Save files. Also edit any previously created websites with real values (don’t use the above template codes).


Issue: Access of \phpmyadmin is denied to root user (and others)


Fixed in upcoming release.


When accessing phpmyadmin by using the “phpmyadmin” button in WampDeveloper’s System Tab, or using this URL: http://localhost/phpmyadmin, user ‘root’ is not able to login.

Opposite to the above, this URL does work:


  • 1) “localhost” is getting resolved to IPv6 “::1″ instead of IPv4 “″ (due to the Windows Hosts file entries).
  • 2) phpmyadmin’s configuration file is missing an access entry for the corresponding MySQL “root@::1″ account.

It’s possible that the installer was not able to update the Windows Hosts file, and/or Windows Defender (or some other security app) was able to undo the changes.

And if IPv6 is enabled on your system, and “localhost” get’s resolved to the IPv6 loopback address “::1″, user “root” will not be able to login via URL: http://localhost/phpmyadmin


Edit file (via Notepad):

Add into the “AllowDeny” rules-array this line:

'allow root from ::1',

Also edit the Windows Hosts file (LocalDNS Tab, button: Hosts File) -

  • Remove line:
    ::1 localhost
  • Make sure this line is present: localhost

Save files. Then close and open your Browser, and you should now be able to login to phpmyadmin with user root.

* If you still have issues after this, try: 1) clearing the Browser’s cache, 2) stopping Apache and MySQL and clearing out the C:\WampDeveloper\Temp\ folder of all files (but don’t delete the sub-folders), and 3) rebooting/restarting the system.

Exclude the Windows Hosts file in Windows Defender

*If you are also going to use the provided older phpmyadmin version that’s compatible with the Legacy Apache 2.0 and PHP 4.4 channel, it’s not possible to apply part of this fix due to Apache lacking IPv6 support and the IPv6 syntax (“::1″) being unknown to Apache and/or phpmyadmin. So only the Host file edit is needed. Just as a note, if it was possible to use IPv6 on that channel, these files would need to be updated:

Issue: LocalDNS does not work, and/or Hosts file gets overwritten


Reported. Could depend on OS, antivirus software, and environment.


a) On WampDeveloper installation, the entire Windows Hosts file is emptied, or only contains 1 or 2 entries.

b) On website creation or LocalDNS changes, domain-names do not work.


Antivirus software such as BitDefender (and Windows Defender) block WampDeveloper from making edits to the Hosts file, and/or attempt to restore this file when changes are detected.


Exclude the process C:\WampDeveloper\wampdeveloper.exe and the folder C:\WampDeveloper\ in the anti-virus software’s settings.

Then open Windows Hosts file (LocalDNS Tab, click button: Hosts file), and add at least these entries in: localhost ServerStatus stat.apache.local ServerInfo info.apache.local ServerHost host.apache.local DefaultWebsite website

Issue: PHP’s OPcache crashes Apache on some phpMyAdmin URLs


Fixed in upcoming release.


Having PHP’s OPcache extension globally enabled AND having “php_admin_flag opcache.enable Off” in either the website’s VirtualHost file or in the configuration of Config\extra\wampd-phpmyadmin.conf will cause Apache to crash after several \phpmyadmin tabs are clicked in succession.




php_admin_flag opcache.enable Off



It also does not matter if the phpmyadmin file paths are excluded via OPcache’s blacklist file:






PHP, OPcache Extension, and/or Apache bug.


Comment out and do not use “php_admin_flag opcache.enable Off” at all, not in websites’ VirtualHost files nor in any Apache configuration files.

Edit file -

Remove line -

php_admin_flag opcache.enable Off

Also do the same in these files, if they exist -

And perform the same edit in all your websites’ VirtualHost files -

If needed, exclude phpmyadmin (and other) file paths via OPcache’s blacklist… Or don’t disable the caching of phpmyadmin if no opcode cache issues are present with used PHP, OPcache Extension, and phpmyadmin versions.

WAMP Component Versions

Apache 2.4.9
PHP 5.5.11 (via mod_php)

Issue: Strange .htaccess RewriteRule Issues


Fixed in upcoming version.


Some mod_rewrite RewriteCond and RewriteRule lines in a website’s .htaccess file could interact with the VirtualHost file’s “Domain Aliases to Primary Domain Name” redirect ruleset, with faulty results.


‘Domain Aliases to Primary Domain Name’ redirect ruleset does not terminate after the redirect sequence…

# Redirect all ServerAlias to ServerName (and preserve port)
RewriteCond %{HTTP_HOST} !^www\.example\.com(:[0-9]*)?$ [NC]
RewriteCond %{HTTP_HOST} (:[0-9]*)?$ [NC]
RewriteRule ^/*(.*)$$1 [R=301,NC]


Update websites’ HTTP and SSL VirtualHost files, and the template VirtualHost files (C:\WampDeveloper\Resources\default.http.vh.conf, default.ssl.vh.conf).

Changing this line:
RewriteRule ^/*(.*)$$1 [R=301,NC]

To this:
RewriteRule ^/*(.*)$$1 [R=301,L]