macOS Change the Default Save Location of Screenshots

MacOS have a built-in screenshot feature which can be used right off the bat. This feature is an important one which I previously never met in Windows environment. It’s so helpful to chat and give instant example of my screen.

However, I took screenshots often, so it started to pile up on my desktop. Something I’m not very fond about. Fortunately, I can set up a dedicated folder for them and have them automatically save there. This can be done with a simple Terminal command

First, I create a dedicated screenshots folder via Finder.

Create Screenshots Folder

Open Terminal, and fire these commands. Don’t forget to change the path on the first command. The easy way rather than typing the path by yourself is by dragging the newly created screenshots folder into the Terminal, after you type

defaults write com.apple.screencapture location /Users/username/Pictures/Screenshots
killall SystemUIServer

The first command, sets the screenshot location to defined path, and the seconds restarts the SystemUIServer so the alteration can be recognized instantly by system.

Brew Install PHP Redis on MacOS High Sierra 10.13

After upgrading to MacOS High Sierra (or any upgrade process previously), first thing I need to check is the local webserver status: apache, php, redis, mysql. Brew install php redis. Thankfully, MacOS High Sierra is now shipped with PHP 7.1 installed, which met the new standard for my future web developments.

PHP-redis is a must-installed library since I love the MySQL + Redis tandem for handling data storage and requests. Of course, along with the newly upgraded OS, the Apache installation in fresh installed with standard “It works!” welcome page.

Now, into the installation steps.

1. Install php71-redis Library

Easier said, I simply shot brew install php71-redis into Terminal and then served with Error, suggesting that I need to install Xcode Command Line Tools.

xcode-select --install

2. Unlink Previous PHP 5.6 Libraries

I tried to install again the library, but another error came along. It said the installed formulae was conflicting: different php versions install the same binaries. It suggested me to unlink all php 5.6 libraries. Ok then..

brew unlink php56

3. Install php71-redis (Again)

Hopefully this attempt for installing php71-redis library was a successful one.

brew install php71-redis

brew install php redis php7.1 macos high sierra

4. Edit php.ini; Include php71-redis Extension

Edit /etc/php.ini, add the extension as follows. If the php.ini file not exist, copy the php.ini~previous. Don’t forget to include the igbinary extensions too, so you won’t get problem my previous php56-redis module not loaded here.

5. Restart Apache

Final steps

sudo apachectl restart
dyld: Library not Loaded MacOS High Sierra

MacOS High Sierra problem when executing php command through terminal. Problem? An error stating dyld library not loaded.

dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.9.dylib
Referenced from: /usr/local/bin/php
Reason: image not found
Abort trap: 6

According to this stackoverflow post, I need to uninstall current version of libjpeg. Use --ignore-dependencies to force uninstallation since libjpeg is needed by other library dependencies.

brew uninstall libjpeg --ignore-dependencies

Reinstall with: brew install libjpeg

dyld library not loaded /usr/local/opt/jpeg/lib/libjpeg.9.dylib

The command will produce warning since latest version of libjpeg has already installed Warning: jpeg 9b is already installed, it's just not linked.

Simply we can shoot brew link jpeg command into Terminal, and all our problem should be solved.

php56-redis Module Not Loaded in PHP-CGI macOS Sierra

After macOS Sierra 10.12.6 Update, my php56-redis module is not working, causing some of my PHP applications cannot communicate with Redis as storage engine. My confusion raises when the module is loaded in PHP-CLI but not in PHP-CGI. It means, if I type php -m in command line, redis shows up. But, if I access via browser via phpinfo(); nothing says about redis.

I googled for nearly two days, until I realized that I haven’t look for a file which I should investigate the first time any errors occured in PHP: error_log. In macOS, the logs are located in /var/log/apache2/ so the file is located on /var/log/apache2/error_log.

I open the file via Sublime and then voila … Here comes the essential hint.

PHP Warning:  Cannot load module 'redis' because required module 'igbinary' is not loaded in Unknown on line 0

I remember that I never typed any of these igbinary module in php.ini, so this is new case for me. Maybe after macOS Sierra last update, the module is not loaded automatically.

php56-redis Module Must Be Defined Manually in php.ini

I’m sure I have this igbinary module installed, however I try to install it again via Homebrew. Of course, it results in error message homebrew/php/php56-igbinary 2.0.4 already installed. This means the binary has been installed within the modules directory, all I need to do is define its inclusion within the php.ini file.

php56-redis module: php56-igbinary extension must be loaded manually within php.ini

I add one line statement right before the php56-redis module extension.

extension="/usr/local/opt/php56-igbinary/igbinary.so"

Restart apache, then everything just back to normal, like the good ol’ days.

WORKS