Developing PHP applications which support a variety of servers and environments requires me to occasionally develop on Windows. The first thing someone notice when switching from Linux or macOS to a Windows machine for PHP development is that it’s so darned slow. Even on the exact same machine, Linux is a good 2x to 5x faster than Windows. Most of the sluggishness observer, however, is down to configuration and can be mitigated. This article explains some of the tricks I used to make PHP faster on my Windows development machines.
I’ve had a Surface Book with an i7 processor since November 2016. I liked the idea of a laptop with detachable tablet, the touchscreen and that it comes with a pressure sensitive pen. It makes for a neat, if slightly expensive, machine. It has a fatal flaw though: Windows 10. I tried to like Windows, I really did, but it’s just so. darned. slow. File access is inexcusably slow, especially for a device equipped with lightning fast NVMe storage. In real world usage it proved 4 to 10 times slower than Linux running on the same machine… off a USB 3 attached SSD. This relegated the Surface Book to a role of a secondary machine for me, while my primary was a cheap i5 laptop with inexpensive m2 SATA3 SSD storage (and yes, there is a huge maximum performance difference to the NVMe storage, not to mention the processor speed).
To cut a long story short, I wanted to unleash the true potential of the Surface Book using Kubuntu Linux. The end goal is having a dual boot Windows and Linux laptop with the Linux side sporting encrypted storage (because of GDPR requirements) and working keyboard, touchpad, WiFi, card reader and touch screen at the very least. I’m glad to say, mission accomplished! I’m writing this article using Kubuntu on my Surface Book. Now, this is a comprehensive How To of what I did. I am writing this mainly for me to remember all the small details and in hope I can help some of you out there. Most, if not all, of what I am writing here also applies to Surface Pro 2 and above, Surface Book 2 (2018) and Surface Laptop.
We can all agree that taking backups is important. We also agree that backups on the same medium as the backed up content are as good as no backup at all. This has led a lot of us to store our backups to the cloud, predominantly on cheap Amazon S3 storage. But how can we make sure that should the content server be compromised our backups will not be abused or deleted?
A while back I had written two blog posts about setting up an Apache, MySQL and multiple, simultaneous PHP versions environment for macOS -or Linux, same concept- and for Windows. In the meantime HTTPS has been promoted to a near necessity and so being able to build and test a site on HTTPS is very desirable. Well, as it turns out, it’s perfectly possible too!
Amazon Web Services (AWS) offers a wealth of services for site owners. A service I particularly enjoy is the inexpensive CloudFront CDN which lets me deliver static content, like downloads and update information for my software, very fast to people across the world. What became apparent is that while it was fast and cheap, it wasn’t the most secure solution. Anyone could forge the update response and mislead my users to downloading a modified package full of malware. The solution was to use an SSL certificate with the CDN, ensuring the integrity of the downloads and update information. For this purpose I used Let’s Encrypt™ which allows you to create properly singed SSL certificates for free. The process is non-obvious so I’m documenting this for you.
I regularly have the need to try things out on Linux. Sometimes a virtual machine won’t cut it for me typically due to memory, disk and performance limitations. Moreover, a decent, up-to-date, bootable Linux environment is a great backup in case all of my other computers are broken, infected or stolen. That entails having the Linux installation on an external, USB-attached hard disk drive which can boot with relative ease on any UEFI-enabled PC (driver compatibility notwithstanding). Moreover, all the preparatory work has to be performed using a single-boot Windows computer without ending up having a dual boot system. It sounds tough. It is tough, but I’m writing this from my portable Ubuntu Linux installation running off a USB-attached SSD!
If you want to use SSH or SFTP with PHP you need the SSH2 extension. Unfortunately MAMP doesn’t come with it out of the box. Last year I had written about how to add the SSH2 extension to MAMP, on PHP 5.6. In the meantime two major changes ocurred which pretty much nullified the process: OS X El Capitan was released requiring new prerequisites to be installed and PHP 7 was included which requires an entirely new approach to installing SSH2 (it’s no longer as simple as using pecl). In this article we’ll discuss the process required to get the SSH2 extension installed on PHP7 in MAMP.
Has your Mac’s Bluetooth stopped responding or got stuck in the Off position? Do you have work to do and cannot afford a reboot?
If you want to use SSH or SFTP with PHP you need the SSH2 extension. Unfortunately MAMP doesn’t come with it out of the box. Moreover, it comes with no PHP sources making it a bit complicated to use pecl to install the extension. So here I document it, mostly for my future self and in the hope that I’ll spare a poor soul the trouble. The middle part of the instructions is a prerequisite for installing any other PHP extension, so here’s another utility to this.
If you want to start developing PHP applications, or merely work on your PHP-based site off-line, on Mac OS X you can easily do so. In this how-to we’ll see how you can set up NginX, a high performance web server, with the PHP version shipped with Mac OS X itself to create a local web server. In case you’re wondering, you can of course use it in parallel with MAMP, XAMPP or even the multi-PHP version server I’ve described in an earlier post.