Laravel 專案有更新時,部屬後除了需要做 database migration 以外,還要清理暫存:
artisan route:clearartisan config:clearartisan cache:clearartisan view:clear- …..
偷懶一點,可以使用 optimize 指令一次做完:
php artisan optimize:clear

軟體開發、伺服器和生活瑣事
Laravel 專案有更新時,部屬後除了需要做 database migration 以外,還要清理暫存:
artisan route:clearartisan config:clearartisan cache:clearartisan view:clear偷懶一點,可以使用 optimize 指令一次做完:
php artisan optimize:clear

phpbrew install 8.0.11 時會出現 OpenSSL 的錯誤訊息:
/home/zero/.phpbrew/build/8.0.29/ext/openssl/xp_ssl.c:1240:9: warning: ‘DH_free’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
1240 | DH_free(dh);
| ^~~~~~~
In file included from /usr/include/openssl/dsa.h:51,
from /usr/include/openssl/x509.h:37,
from /usr/include/openssl/ssl.h:31,
from /home/zero/.phpbrew/build/8.0.29/ext/openssl/xp_ssl.c:31:
/usr/include/openssl/dh.h:200:28: note: declared here
200 | OSSL_DEPRECATEDIN_3_0 void DH_free(DH *dh);
| ^~~~~~~
主要是因為舊版的 PHP 使用到的 OpenSSL 也是舊版的。
解決方法:
先下載 OpenSSL v1.1,並編譯:
cd ~/tmp/openssl-1.1.1v # --prefix 設定為暫存路徑 ./Configure --prefix=/home/zeroplex/openssl-1.1.1/ -fPIC -shared linux-x86_64 make make install
make install 後執行檔、函式庫就會存放到 /home/zeroplex/openssl 中。
先設定要使用的 OpenSSL pkgconfig:
# 在 openssl 位置中找到 pkgconfig 的路徑 export PKG_CONFIG_PATH=/home/zeroplex/openssl/lib/pkgconfig
接下來 phpbrew 使用相同的指令即可:
phpbrew install 8.0.29 +defaults
備註:phpbrew install 7.4 也需要相同的方法
在 Eloquent 中,假設要刪除某使用者的資料:
User::select(['name'])->chunk(100, function ($users) {
foreach ($users as $user) {
if ( condition ) {
$user->delete();
}
}
}
以上的寫法,在 $user->delete(),即使 Model 回傳刪除成功,但實際上資料庫的資料不會被刪除。
原因是 Eloquent 刪除資料是以 id 欄位為準,若 select 不包含 id 則會刪除失敗。
在 select() 中加入 id 即可正常刪除資料:
User::select(['id', 'name'])->chunk(100, function ($users) {
// ....
}
ps. 文件沒寫,fu …..
除了 sqlsrv 以外,也可以透過 pdo_dblib 來連線。
若使用 ondrej 的 PHP PPA,則安裝 php-sybase,安裝後透過 php -i 可以看到 extension 資訊:
....
/etc/php/8.2/cli/conf.d/20-pdo_dblib.ini,
....
PDO drivers => dblib, mysql, pgsql, sqlite, sqlsrv
pdo_dblib
PDO Driver for FreeTDS/Sybase DB-lib => enabled
Flavour => freetds
....
寫個 script 測試連線:
<?php
$conn = new PDO(
'dblib:host=192.168.0.7;port=1443;dbname=test;',
'username',
'password',
);
先說,很麻煩。
需要先安裝二個驅動程式:
裝完以後執行 php -i,若有顯示 pdo_sqlsrv 和 sqlsrv 表示有正確啟動。
最後可參考 PHP PDO 與 SQL Server 連線的語法,建立連線。
手上的專案是跑在 Alpine Linux with PHP on Docker,這裡先做好 docker image,有需要請自取:https://hub.docker.com/repository/docker/johnroyer/php-mssql-docker/general