PHP中斷程式碼並查看變數

如果是使用傳統方式開發程式,沒有抓 bug 套件可隨時中斷查看,可以在要中斷的程式中加入中斷的程式碼


$a = array('a','b','c');
var_dump($a);
die();
echo 'hi';

結果:

array(3) { [0]=> string(1) “a" [1]=> string(1) “b" [2]=> string(1) “c" }


$a = array('a','b','c');
echo '<pre>';
print_r($a);
echo '</pre>';
die();
echo 'hi';

結果:

Array
(
    [0] => a
    [1] => b
    [2] => c
)

以上兩種方式都不會執行最後一行的 echo ‘hi'; 程式碼,但陣列的顯示方式有所不同,可視情況選擇不同的顯示方式。

同步Host和Docker container內的用戶uid

當使用 Docker container 進行開發時,通常會 mount 一個本機端的資料夾給 container,但這會造成 Host 和 Client 資料夾擁有人:群組的錯亂,除了強制給資料夾 777 權限外,也可以同步本機端和 Docker container 裡的用戶名稱和 uid,以解決這個問題。

首先在Host端,查詢使用者名稱和uid


ben@ben-UX305CA:~$ sudo -i
[sudo] password for ben:
root@ben-UX305CA:~# cat /etc/passwd
ben:x:1000:1000:ben,,,:/home/ben:/bin/bash

 

然後進入 Docker,增加一個同名的用戶,並手動指定 uid


useradd ben -u 1000

此時在 Host 本機端和 Docker container 裡的用戶具有相同的名稱和 uid,所以對應到所 mount 的資料時,就不需要另外去調整權限。

然後我們在本機端開發時,預設是使用ben這個用戶,所以存檔後的權限為ben。因為我們設定好了 container 內的用戶名稱,所以在 container 內的權限也是ben,連uid也是相同的。

下圖在本機端使用Sublime Text 3增加檔案存檔後的結果,進入docker container 也是相同的用戶和權限


ben@ben-UX305CA:~/docker/ben_centos69/httpd$ ll
總計 36
drwxrwxr-x 2 ben ben 4096 5月 8 11:25 ./
drwxrwxr-x 4 ben ben 4096 5月 6 23:09 ../
-rw-rw-r-- 1 ben ben 45 5月 8 11:11 centos69.sublime-project
-rw-rw-r-- 1 ben ben 16293 5月 8 11:11 centos69.sublime-workspace
-rw-rw-r-- 1 ben ben 56 5月 8 11:25 for.php
-rw-r--r-- 1 ben ben 43 5月 6 23:13 index.php

另外,如果要刪除用戶時 (連同家目錄也刪除)


userdel -r ben

但仍要手動刪除用戶的 mail box


rm -R /var/spool/mail

手動大量變更named設定檔

趁著有空時,將之前一直沒調整的 domain name server 設定改一改,由於管理的域名約200個,一個一個改效率太差外,也容易出錯,使用一些指令來協助變更。

變更目前目錄下的所有檔案,將111.111.111.111變為222.222.222.222

find *.* | xargs -i sed -i 's/111.111.111.111/222.222.222.222/g' {}

變更目前目錄下的所有檔案,針對 named 設定檔變更日期

find *.* | xargs -i sed -i 's/20[0-9][0-9]\{7\}/2017050201/g' {}

在 vim 中取代所有字串

:1,$s/111.111.111.111/222.222.222.222/g

檢查目前目錄下,檔案中是否仍有111.111.111.111字串

find *.* | xargs grep '111.111.111.111'

PHP getimagesize(): php_network_getaddresses 錯誤訊息

使用 Docker 開發時,在商品內頁出現錯誤訊息
這是因為 Container 中的 Server 無法辨識程式內所設定的網域名稱

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  getimagesize(): php_network_getaddresses: getaddrinfo failed: Name or service not known</p>
<p>Filename: shop/shopctrl.php</p>
<p>Line Number: 1271</p>

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  getimagesize(http://trprj.fyvm.docker/trupl/shop/product_cover_148410523073244600.jpg): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known</p>
<p>Filename: shop/shopctrl.php</p>
<p>Line Number: 1271</p>

進入 Docker 中,修改 /etc/hosts,加入以下即可

127.0.0.1   trprj.fyvm.docker

注意!如果對 container 操作 stop 再 restart 後,container 裡的 /etc/hosts 檔案將自動回復,將會再度出現錯誤訊息