php 数字位数不足前面加0补足

php 这一块和 c 语言简直一模一样:

<?php   
    $var=sprintf("%04d", 2);  //结果为0002     
?>

语法

sprintf(format,arg1,arg2,arg++)

参数 描述
format 必需。转换格式。
arg1 必需。规定插到 format 字符串中第一个 % 符号处的参数。
arg2 可选。规定插到 format 字符串中第二个 % 符号处的参数。
arg++ 可选。规定插到 format 字符串中第三、四等等 % 符号处的参数。

详解

参数 format 是转换的格式,以百分比符号 (“%”) 开始到转换字符结束。下面的可能的 format 值:

  • %% - 返回百分比符号
  • %b - 二进制数
  • %c - 依照 ASCII 值的字符
  • %d - 带符号十进制数
  • %e - 可续计数法(比如 1.5e+3)
  • %u - 无符号十进制数
  • %f - 浮点数(local settings aware)
  • %F - 浮点数(not local settings aware)
  • %o - 八进制数
  • %s - 字符串
  • %x - 十六进制数(小写字母)
  • %X - 十六进制数(大写字母)

arg1, arg2, ++ 等参数将插入到主字符串中的百分号 (%) 符号处。该函数是逐步执行的。在第一个 % 符号中,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。

另外:百分号转小数,php 小数转换百分数:

$a = "20.544545%"; 
echo (float)$a/100; 

参考资料


Linux 下 PAM authentication failed 问题

出现这个问题时,基本上所有敏感操作都会请求输入密码,而且密码都是不对的。

很有可能是 Shell 的设置有问题。打开文件/etc/passwd查看 root 用户的 Shell 是不是正确的:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
...

注意 root 的 Shell 一定是/bin/bash。多半可能是中途某个地方将它改错了,改回来就好了。

改错的情况下还会出现很头疼的问题——无法登录。

附修改默认 Shell 命令

chsh -s /bin/zsh

Linux root不能 ssh 登陆的问题

有的发行版的 ssh 配置限制了,需要修改以下几个地方。

vim /etc/ssh/sshd_config

    #PermitRootLogin without-password    #注释这句话
    PermitRootLogin yes                  #改为yes  然后重启ssh
    
service ssh restart

Mac 下 Parallels 虚拟机使用宿主机的网络代理

环境:

宿主:Mac
VM: Debian (linux系统都可以吧

步骤

  • 在宿主机的 shadowsocks 设置监听地址为 0.0.0.0 (默认是127.0.0.1)

  • 使用桥接方式运行虚拟机(使得虚拟机与宿主处于同一个局域网)

  • 进入linux系统,在 ~/.bashrc 或者 ~/.zshrc 设置代理:

      export ALL_PROXY=socks5://172.20.10.5:1086  # IP设置是你 Mac 的内网 IP 地址
        
      alias checkip="curl -i http://ip.cn"        # 查看本机外网 IP 归属地。
    
  • 测试是否成功。在命令行里运行下面的命令查看是否设置成功。

      checkip
    

Mac 下使用 homebrew 切换不同版本 php

最近刚切换回 Mac 下进行开发,所以写了比较多的 Mac 环境部署之类的文章。今天需要重新切换一下本地的开发环境。原本想直接在当前环境下开发, 毕竟 Mac 自带了 PHP 环境,今天需要新添一个扩展 freetype ,需要重新编译一遍 PHP。 由于这个扩展是核心内置扩展,没法通过phpize来编译安装。 解决办法只有一个,就是找到PHP的安装源码重新编译一下,在编译的时候,加上–with-freetype-dir。

但是要知道的一个事 —— Mac上PHP是内置的,根本就找不到它的安装源码在哪!

所以需要重新编译一遍 PHP,并且不影响 Mac 当前的 PHP 环境。

Mac 下软件的安装和管理,当然离不开 homebrew 了。

安装 php 不同版本

brew install php54
brew install php55
brew install php56
brew install php70

安装新版本时,你很大几率上会被提醒,php 已经安装了 xxx 版本了,你需要先 unlink 原先的版本。于是就是下面的这个命令了。先 unlink 再安装。 安装后自然就 link 好了。

常规切换

通过 brew 安装的 php 可以通过brew link和brew unlink来切换不同版本。

brew list
brew unlink php56
brew link php55

大版本可以用brew list来查,如果是小版本的话只能去/usr/local/Cellar/php55看了。这个时候使用php-version可以更方便一点。

homebrew 中有一个非常便于管理和切换 PHP 版本的工具 —— php-version.

php-version

安装php-version

brew install php-version

然后执行下面的命令。也可以讲下面这个命令放到 ~/.bashrc 或 ~/.zshrc 里去

source $(brew --prefix php-version)/php-version.sh && php-version xxx # xxx 是版本号

直接执行

php-version

就可以看到现有的版本,比如我自己的

➜  ~ php-version
      5.4.45
      5.5.38
      5.6.30
    * 7.0.20

然后使用以下命令切换即可

php-version 7.0.20

再看php的版本,已经切换好了。

php -v

注:我在早期时已经装好了 php7,今天切换版本的时候 php -v 一直没什么变化,误导了我。最后我先将这个 php70 版本 remove 后再 install, 就没问题了。

在 IDEA 中使用

虽然在终端里,php -v 已经是最新的7了。我原先 IDEA 里的 php 版本还是 5.6.30 的。这个改起来就很简单了。

在 Preference 里找到 php 的设置,讲原先的 /usr/bin/php 改为 /usr/local/bin/php 即可。

不同版本的配置

各版本的配置在目录

/usr/local/etc/php/xxx

里,根据需要设置即可。

安装扩展

假设我们要装5.6版本的 mcrypt 插件

brew search php56-mcrypt

brew install php56-mcrypt  #默认安装在`/usr/local/Cellar/`下

然后找到mcrypt.so 文件,通过pwd查看路径,接着编辑PHP配置文件(php.ini):

vi /usr/local/etc/php/xxx/php.ini  #通过brew默认配置文件路径

在php配文件增加代码:

extension=/usr/local/Cellar/php56-mcrypt/5.6/mcrypt.so

参考资料