升级Mac OS X的php到8.0,并设置apache2去使用它

问题描述

最近想在本地安装mediaWiki,目前版本是1.36。Macbook自带的php版本是7.3.11,然后出现以下error:

MediaWiki 1.36 requires PHP 7.3.19 or higher; you are using PHP 7.3.11.

于是就干脆升级PHP到8.0。本文记录一下怎样在Mac OS X (Catalina)上安装PHP 8.0。

安装PHP 8.0

使用Homebrew

brew install php

目前brew里面默认版本就是8.0。homebrew的安装目录在/usr/local/Cellar/ 下面。安装完后系统默认的仍然是7.3。

% which php
/usr/bin/php

% php --version
PHP 7.3.11 (cli) (built: Feb 29 2020 02:50:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies

需要

$ brew services start php

这样brew会设置好新版本路径

% which php
/usr/local/bin/php

% php -version
PHP 8.0.10 (cli) (built: Aug 26 2021 15:34:04) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.10, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.10, Copyright (c), by Zend Technologies

设置Apache2

编辑httpd.conf,用mvim或其他编辑器,需要sudo权限

% sudo mvim /etc/apache2/httpd.conf

添加

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

<IfModule dir_module>
#old:
#   DirectoryIndex index.html
#new:
    DirectoryIndex index.php index.html
</IfModule>

#old: LoadModule php7_module libexec/apache2/libphp7.so
#new:
LoadModule php_module local/opt/php/lib/httpd/modules/libphp.so

重启apache2

sudo apachectl restart

Macbook 电脑配置migration

当你需要淘汰你的旧电脑,但想把以前的设置 (比如, iTerm的颜色字体)转移到新电脑上怎么实现。其实不难,这些关于setting的文件都以plist文件形式保存在Library/Preferences目录里,你只要把它们复制粘贴过去保存在同一个目录下就好了。

有时候,你想把note里的内容migrate到新电脑里,你需要做的是,在旧电脑里找到当前note内容保存的地方,Home/Library/Group Containers/group.com.apple.notes/, 然后把目录里的主要文件,NoteStore.*, Media/(保存图片的目录),转移到新电脑的同一目录即可。

还有一个重要的东西是浏览器的bookmark, 你可以参照这个详细的文章来export and import你的chrome bookmarks。Chrome除了bookmarks, 如果你还有search engines的data也想转移,也很简单,去Library/Application\ Support/Google/Chrome/Default/目录下找到Web Data 这个文件,copy到新电脑的同一目录下,重新打开chrome后,这些信息就会自动load进去。

算法练习 力扣 150. Evaluate Reverse Polish Notation

问题总结

这题比较简单,如果学过computer architecture,这个Reverse Polish Notation (RPN)基本就是个stack machine。很像汇编语言。用stack就可以解决。

除法要求

that division between two integers should truncate toward zero.

测试数据里面有负数, python里面整数除法结果如果是小数,约成整数后是往小的方向约的。比如-0.4会变成-1,题目要求往0约,也就是-0.4变成0。用int(a/b)可解决。一个冷门知识。

Python解法

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        stack = []
        ops = {'+', '-', '*', '/'}
        for token in tokens:
            if token not in ops:
                stack.append(int(token))
            else:
                op = token
                num2 = stack.pop()
                num1 = stack.pop()
                res = self.evalSimple(num1, num2, op)
                stack.append(res)
        
        return stack.pop()
                
    def evalSimple(self, num1, num2, op):
        if op == '+':
            return num1 + num2
        elif op == '-':
            return num1 - num2
        elif op == '*':
            return num1 * num2
        elif op == '/':
            return int(num1 / num2)