作者 kfrico 的所有文章

PHP empty, is_null, isset 判斷結果列表

empty判斷值在不在,isset判斷變數在不在,兩個不同屬性

使用 PHP 函數對變量 $x 進行比較
表達式 gettype() empty() is_null() isset() boolean : if($x)
$x = “”; string TRUE FALSE TRUE FALSE
$x = null; NULL TRUE TRUE FALSE FALSE
var $x; NULL TRUE TRUE FALSE FALSE
$x is undefined NULL TRUE TRUE FALSE FALSE
$x = array(); array TRUE FALSE TRUE FALSE
$x = false; boolean TRUE FALSE TRUE FALSE
$x = true; boolean FALSE FALSE TRUE TRUE
$x = 1; integer FALSE FALSE TRUE TRUE
$x = 42; integer FALSE FALSE TRUE TRUE
$x = 0; integer TRUE FALSE TRUE FALSE
$x = -1; integer FALSE FALSE TRUE TRUE
$x = “1”; string FALSE FALSE TRUE TRUE
$x = “0”; string TRUE FALSE TRUE FALSE
$x = “-1”; string FALSE FALSE TRUE TRUE
$x = “php”; string FALSE FALSE TRUE TRUE
$x = “true”; string FALSE FALSE TRUE TRUE
$x = “false”; string FALSE FALSE TRUE TRUE

參考連結

http://php.net/manual/zh/types.comparisons.php

Docker筆記

### 進入容器
docker exec -it sk2_mysql_1 bash
docker attach sk2_mysql_1 bash

### 查看私庫套件
http://docker.private.today/v2/_catalog

### 查看私庫套件Tag列表
http://docker.private.today/v2/scott/gusher/tags/list

### 讓容器在後台運行而不退出的方法
tail -f /dev/null
service nginx -g “daemon off;”

### 獲取容器/鏡像的元數據
docker inspect

### 產生image
docker build –no-cache –pull –force-rm -t ken/ubuntu:base -f ubuntubase.dockerfile .

### 存儲容器狀態到tar
docker export ubuntu > ubuntu.tar

### 容器tar 轉成 image
cat ubuntu.tar | docker import – ken/ubuntu

### 把現有的images推到私倉
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
docker tag [現有的IMAGE]:[TAG] [私倉名字]/[建立者]:[TAG]

docker push [私倉名字]/[建立者]:[TAG]

### 建立容器
docker create -t -i fedora bash

### 啟動已終止容器
docker start -ai fedora

### 映射IP(對外連線 本機:Docker容器內)
docker run -p 8080:80 -v \local\work:container\work ken\php

Mac 初體驗

必裝軟體

1.HomeBrew

套件管理軟體,類似ubuntu的apt-get

brew install bash-completion 自動補齊

2.CheatSheet

查閱快捷鍵的小幫手

3.Magnet

App視窗分邊的工具

4.iTerm2

好用的 terminal 支援快捷鍵Hide/Show

semantic history設定,下載iterm_open_with.sh

/usr/local/bin/iterm_open_with \5 \1 \2

5.AppCeaner

深度移除APP的工具

6.Sublime text

編輯器

 

 

Git 常用指令整理

###推回上一個點

git revert -m 1 eff349a7a4132fdbb5f45bbb0d1b72248ace29a1(merge的點) 會新增一個commit

##連同檔案一起推回上一個點

git reset --head HEAD^1

##回覆修改紀錄

git reset --soft HEAD^

–soft – 緩存區和工作目錄都不會被改變
–mixed – 默認選項。緩存區和你指定的提交同步,但工作目錄不受影響
–hard – 緩存區和工作目錄都同步到你指定的提交

###取消追蹤檔案

git rm --cached xxxxxxxxxxxx

###git stash pop 衝突解法
git reset 或 git git reset HEAD [files]
[參考]http://stefaanlippens.net/resolve-git-unmerged-paths-after-stash-pop

###建立分支

git branch branch_name SHA

###檢查Log

git log

###輸入指令!帳號密碼只要打一次

git config --global credential.helper store

###git 從那個點到那個點的差異or檔案名稱

git diff 93fd4171999e8682850ff5d1ca300c419fe3610e HEAD
git diff --name-only 93fd4171999e8682850ff5d1ca300c419fe3610e HEAD

###更換git遠端名稱

git remote rename origin upstream

Git Repository

mkdir ${PROJECT}.git

cd ${PROJECT}.git

git --bare init

然後在本機裡加入

git remote add origin file:///${PROJECT}.git

上傳更新本地位址

在${PROJECT}.git底下的hooks資料夾加入post-receive並寫入以下bash (檔案權限須改成755)

 #!/bin/bash

while read oldrev newrev refname
do
 if [ "$refname" == "refs/heads/master" ]; then
 break;
 fi
done

if [ "$refname" != "refs/heads/master" ]; then
 exit;
fi

branch=$(git rev-parse --symbolic --abbrev-ref $refname)

git --work-tree=要覆蓋的位址 checkout -f $branch

Debain 建立防火牆規則

查看有無建立iptables

sudo iptables -L

建立一個新檔案 iptables.firewall.rules

sudo vim /etc/iptables.firewall.rules 

內容如下

*filter

#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

#  Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  Allow SSH connections
#
#  The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  Allow ping
-A INPUT -p icmp -j ACCEPT

#  Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

#  Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

規則只開放 80(http), 443(https), SSH(22), ICMP 服務

啟用規則

sudo iptables-restore < /etc/iptables.firewall.rules

最後是確保每次重開機都會載入這規則

sudo vi /etc/network/if-pre-up.d/firewall

內容如下

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.firewall.rules

更改檔案權限

sudo chmod +x /etc/network/if-pre-up.d/firewall

linode官方教學: https://www.linode.com/docs/security/securing-your-server

linux 開機自動執行

vim /etc/rc.loca

加入想執行的系統指令

這樣在還沒登入時就會執行

自動關機

vim /etc/crontab

# m h dom mon dow user command
0   0 *       *       6       root reboot

星期六零晨0點0分重新開機

php-fpm和nginx 權限設定問題

php-fpm#########################

修改/etc/php5/fpm/pool.d/www.conf

user = www-data 改為 user = ken

group = www-data 改為 group = user

listen.owner = www-data 改為 listen.owner = user

listen.group = www-data 改為 listen.group = user

nginx###########################

修改/etc/nginx/nginx.conf

user www-data; 改為 user;

 

這樣就沒權限問題了