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