2023/02/27
[macOS] PHP 7.4 在 Homebrew 近期更新升版後發生 Library not loaded 錯誤
markdown
### 問題
在月初更新了 PHP 的版本,而最新版本來到了 PHP 8.2。近期開發的專案都以 PHP 8.1 為主,也並未發現異常。剛好最近在修改舊專案,是跑在 PHP 7.4 的版本,這時才發現無法正常運作。
2022/04/11
[Linux] 如何在 Ubuntu 20.04 升級 PHP 8.1
markdown
### 前言
PHP 7.4 即將於 2022/11/28 停止安全性支援,而 PHP 8.0 也即將於 2022/11/26 EOL (End of life),也就是今年底遲早勢必要將主機的 PHP 版本升級至 PHP 8.1。
### Server 環境及版本
- Ubuntu 20.04.4
- PHP 7.4.3
- Apache 2.4.41
2022/03/21
[PHP] 如何在 VS Code 使用 php-cs-fixer 自動修正 coding style 格式
markdown
因應 [PSR-12: Extended Coding Style](https://www.php-fig.org/psr/psr-12/),讓 VS Code 來幫忙自動修正程式碼風格
### 環境
- PHP 8.0.15
- Composer 2.2.6
- friendsofphp/php-cs-fixer v3.6.0
### php-cs-fixer
Composer 全域安裝
```
composer global require friendsofphp/php-cs-fixer
```
其他安裝方式: [PHP-CS-Fixer 安裝文件](https://github.com/FriendsOfPHP/PHP-CS-Fixer/blob/master/doc/installation.rst)
2020/12/13
[VSCode] 如何在 VSCode 搭配 XDebug 偵錯 PHP 程式
markdown
Xdebug 3 已經正式釋出, 不僅在效能上提升, 在設定上也變得簡單許多。
今天來介紹如何在 VSCode 上使用 XDebug 來偵錯 PHP 程式。
### 環境
- Windows 10
- VSCode v1.52.0
- PHP v7.4.12
- XDebug v3.0.0
PHP 在本機上的環境變數設定,請參考 [如何整合設定 PHP 的開發環境至 Visual Studio Code](https://devmanna.blogspot.com/2019/01/vs-code-php-environment-intergration-settings.html)
### PHP 加上 Xdebug 下載 [PHP XDebug](https://xdebug.org/download#releases),請務必下載對應 PHP 的版本 `php.ini` 設定檔需加上 XDebug 的設定來開啟 debug 模式 zend_extension 請設定您的 PHP XDebug 的檔案位置 ``` [xdebug] zend_extension="D:\_devlib\php\xdebug\php_xdebug-3.0.0-7.4-vc15-x86_64.dll" xdebug.mode=debug xdebug.start_with_request=yes ; xdebug 3 版 port 預設為 9003, 若想維持與 2 版一樣的 9000 port 則可變更 client_port 的值 ;xdebug.client_port = 9000 ``` XDebug v3 的設定是不是精簡許多? 確認 PHP 是否正確掛載 XDebug 的 extension ``` $ php -v ``` 顯示應會如下 (必須出現 with Xdebug ...) ``` PHP 7.4.12 (cli) (built: Oct 27 2020 17:18:47) ( ZTS Visual C++ 2017 x64 ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Xdebug v3.0.0, Copyright (c) 2002-2020, by Derick Rethans ```
### 安裝 VSCode 的 PHP Debug 套件 - [PHP Debug](https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug) by Felix Becker 或者是安裝 [PHP Productive Pack](http://bit.ly/2xSEkwZ) 套件包增加生產力
### VSCode 的偵錯設定 在 VSCode 開啟 PHP 專案,點 "執行" 選擇 "新增組態",選擇 "PHP" 即會自動產生對應程式語言的偵錯設定檔 `.vscode/launch.json` 由於目前使用 XDebug 的版本是 v3.0.0,預設的 port 要改成 `9003` 才行 ```json { "version": "0.2.0", "configurations": [ { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9003 }, { "name": "Launch currently open script", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "port": 9003 } ] } ```
### 執行偵錯 下圖為一個簡單的 PHP 檔案,前面有紅點為指定偵錯的中斷點 1. 先在程式加上偵錯中斷點 2. 執行偵錯 - Listen for XDebug (偵錯監聽中,需在終端機或網站執行到此行程式才會觸發偵錯) - Lunch currently open script (即會在 focus 的 PHP 程式啟動偵錯) 3. 偵錯步驟 (繼續/不進入函式/逐步執行/跳離函式/重新啟動/停止) 在偵錯的面板上即可看到偵錯的訊息 例如此例在程式跳到第 5 行時, $x 的變數值為 "VSCode + PHP Debug mode!" 偵錯 PHP 就是這麼簡單!
PHP 在本機上的環境變數設定,請參考 [如何整合設定 PHP 的開發環境至 Visual Studio Code](https://devmanna.blogspot.com/2019/01/vs-code-php-environment-intergration-settings.html)
### PHP 加上 Xdebug 下載 [PHP XDebug](https://xdebug.org/download#releases),請務必下載對應 PHP 的版本 `php.ini` 設定檔需加上 XDebug 的設定來開啟 debug 模式 zend_extension 請設定您的 PHP XDebug 的檔案位置 ``` [xdebug] zend_extension="D:\_devlib\php\xdebug\php_xdebug-3.0.0-7.4-vc15-x86_64.dll" xdebug.mode=debug xdebug.start_with_request=yes ; xdebug 3 版 port 預設為 9003, 若想維持與 2 版一樣的 9000 port 則可變更 client_port 的值 ;xdebug.client_port = 9000 ``` XDebug v3 的設定是不是精簡許多? 確認 PHP 是否正確掛載 XDebug 的 extension ``` $ php -v ``` 顯示應會如下 (必須出現 with Xdebug ...) ``` PHP 7.4.12 (cli) (built: Oct 27 2020 17:18:47) ( ZTS Visual C++ 2017 x64 ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Xdebug v3.0.0, Copyright (c) 2002-2020, by Derick Rethans ```
### 安裝 VSCode 的 PHP Debug 套件 - [PHP Debug](https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug) by Felix Becker 或者是安裝 [PHP Productive Pack](http://bit.ly/2xSEkwZ) 套件包增加生產力
### VSCode 的偵錯設定 在 VSCode 開啟 PHP 專案,點 "執行" 選擇 "新增組態",選擇 "PHP" 即會自動產生對應程式語言的偵錯設定檔 `.vscode/launch.json` 由於目前使用 XDebug 的版本是 v3.0.0,預設的 port 要改成 `9003` 才行 ```json { "version": "0.2.0", "configurations": [ { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9003 }, { "name": "Launch currently open script", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "port": 9003 } ] } ```
### 執行偵錯 下圖為一個簡單的 PHP 檔案,前面有紅點為指定偵錯的中斷點 1. 先在程式加上偵錯中斷點 2. 執行偵錯 - Listen for XDebug (偵錯監聽中,需在終端機或網站執行到此行程式才會觸發偵錯) - Lunch currently open script (即會在 focus 的 PHP 程式啟動偵錯) 3. 偵錯步驟 (繼續/不進入函式/逐步執行/跳離函式/重新啟動/停止) 在偵錯的面板上即可看到偵錯的訊息 例如此例在程式跳到第 5 行時, $x 的變數值為 "VSCode + PHP Debug mode!" 偵錯 PHP 就是這麼簡單!
2020/10/24
[Composer] v2.0 已釋出! 來更新至最新的 Composer 2.0 版本吧!
markdown
2020-10-24 Composer 2.0 正式釋出!
### 關於 Composer 2.0 新功能
- 改善效能 50% 以上 (這個很需要啊)
- 架構變更及確定性:vendor 更新不受網路錯誤干擾
- Runtime 特徵 (可在 composer.json 設定 `"composer-runtime-api": "^2.0"`)
- 錯誤訊息改善
- 暫時限制部分更新 (`composer update vendor/package:1.0.*`)
### 如何更新至 Composer 2.0
Composer 2.0 基本上可以順利快速升級
- 2.0 版本仍支援 PHP 5.3 以上版本
- composer.lock 檔案可在版本間互相操作,可更新至 2.0 版本或是回復
- 大多數的命令在 2.0 保持一致
若原先使用 Composer 1.x 版本,執行 `composer self-update` 則會更新 1.x 的主要穩定版本
更新至 2.0 只要執行以下命令
```
composer self-update --2
```
若隨時要變更至 1.x 版本,則執行
```
composer self-update --1
```
### 向下相容問題
- plugings: 需要更新支援 Composer 2
- 避免相容性錯誤,可在部署至 production 時執行 `composer check-platform-reqs --no-dev`
- Repository 優先性:若套件存在於較高優先的儲存庫,即會完全忽略較低優先性的儲存庫
- 無效的 PSR-0 / PSR-4 設定將不自動載入 optimized-autoloader 模式
### 未來如何
根據發佈消息,Composer 2.1 應該還是會支援 PHP 5.3,但 Composer 2.2 就會要求要 PHP 7.1.3 以上版本。
### References
- [Composer 2.0 is now available!](https://blog.packagist.com/composer-2-0-is-now-available/)
- [Upgrade guides for Composer 1.x to 2.0](https://getcomposer.org/upgrade/UPGRADE-2.0.md)
2020/06/15
[PHP] 解決執行 Composer 出現 PHP Fatal error: Allowed memory size exhausted 的問題
markdown
### 問題
今天在執行 composer require 套件安裝時出現 PHP Fatal error: Allowed memory size of xxx bytes exhausted 的錯誤訊息
### 解決方法
1. 在 `php.ini` 加大 `memory_limit` 或是設 `memory_limit = -1` (不限制)
2. 使用命令 `php -d memory_limit=-1 composer.phar`
### 參考連結
- [Composer trouble shooting: memory-limit-errors](https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors)
2019/06/26
[Azure] 如何在 Azure Web App 啟用 PHP 模組
markdown
### 前言
最近有一個小小的 PHP 專案,資料量不大,我想直接用 Azure 的 Web App 搭用 SQLite 可攜式資料庫做應用
開個資料庫太殺雞用牛刀,而且資料庫開下去都是要 $$ 的
在部署上去之後發現 PDOException,當然就是連不上我要用的 SQLite 資料庫啦!
那該怎麼辦呢?找方法把缺的模組補上去吧!
### 環境
Azure Web App - Windows
PHP 版本
### 解決方法
1. 先在 site 資料夾下加上 ini 及 ext 的目錄,如圖:
下載 [PHP for Windows](https://windows.php.net/download/) 對應的版本 (NTS x86 版本), 需要加的模組 *.dll 上傳至 `ext` 目錄
其實我只需要 php\_pdo\_sqlite.dll 就好,但要試就一次定位吧~
在 `ini` 目錄增加 `extensions.ini` 檔案
`extensions.ini` 內容如下
```ini
extension=d:\home\site\ext\php_pdo_sqlite.dll
extension=d:\home\site\ext\php_sqlite3.dll
```
2. 在組態設定部分,新增應用程式設定
名稱:`PHP_INI_SCAN_DIR`
值:`d:\home\site\ini` 儲存後,記得重新啟動網站以載入模組設定
在主控台上鍵入: `php -m` 列出模組,有看到 `pdo_sqlite` 及 `sqlite3` 就表示正確載入囉!
終於網站可以確定讀到資料,完成!
### References
- [在 Azure App Service 中設定 PHP](https://docs.microsoft.com/zh-tw/azure/app-service/web-sites-php-configure)




值:`d:\home\site\ini` 儲存後,記得重新啟動網站以載入模組設定


2019/06/12
[PHP] 解決連線 MySQL 錯誤訊息亂碼顯示問題
markdown
### 問題
一直以來這亂碼問題遇到的重覆不下 N 次,後來看到 `SQLSTATE[HY000] [2002]` 的錯誤代號,可以直覺反應就是連不到資料庫
Trace 出來的錯誤訊息實際是長這個樣子的,這是因為 MySQL 預設輸出錯誤訊息的是以 UTF-8 輸出,而非二進制的字符字串值從其字符集轉換為 UTF-8 就產生像以下的編碼狀況
```
mysqli_connect(): (HY000/2002): \xb5L\xaak\xb3s\xbdu\xa1A\xa6]\xac\xb0\xa5\xd8\xbc\xd0\xb9q\xb8\xa3\xa9\xda\xb5\xb4\xb3s\xbdu\xa1C\r\n
```
我們看顯示的樣子就像下圖,以使用者端來看就是有點不開心
### 解決方法
用 mb\_convert\_encoding 的方式,先將取得編碼訊息轉成 utf-8 (以繁體中文的來說就是 big5)
如此就能正常顯示中文訊息啦
### References
- [iconv big5轉換utf8問題](http://sweslo17.blogspot.com/2012/04/big5-erpms-sql-local-cache-phpiconv.html)
- [PHP: mb\_convert\_encoding](https://www.php.net/manual/en/function.mb-convert-encoding.php)
- [MySQL: 10.6 Error Message Character Set](https://dev.mysql.com/doc/refman/5.7/en/charset-errors.html)



[PHP] 指定專案特定 PHP 版本以下載符合的 composer 套件
markdown
### 前言
一般來說,開發人員的機器總是會安裝最新版本的 PHP 來開發
但是總是會有久遠要維護的專案,而 PHP 版本可能也是久遠的舊版本
如果想透過 Composer 來管理套件,但又想要限制特定支援的安裝版本套件,那該怎麼辦呢?
### 問題
開發環境用 PHP 7.3,維護專案採用 PHP 5.6.1
在不變更開發環境的 PHP 版本之下,專案更新套件時會下載到最新的版本
### 解決方法
在 Composer 有個方便的設定
`composer.json`
只要在 config 加上 platform 的 php 版本即可
```json
...
"config": {
"platform": {
"php": "5.6.1"
}
},
...
```
也可用指令方式來下命令達到一樣的效果
```
composer config platform.php 5.6.1
```
### 更新 composer
修改 composer.json 後執行更新,即會做降版動作
```
$ composer update
```
### References
- [Enforcing a PHP Version for Installed Composer Packages](https://andy-carter.com/blog/composer-php-platform)

2019/01/17
[VS Code] 如何整合設定 PHP 的開發環境至 Visual Studio Code
最近在帶 Laravel 工作坊,有許多學員為非程式開發人員,在入門程式開發的過程中。要把開發環境設定完成,若不透過手把手帶領,可能要繞很大圈才有辦法完全設定完畢。
由於 Laravel 這個框架的底程程式語言為 PHP。就以 PHP 的開發環境來跟 Visual Studio Code 做整合介紹。
以 Visual Studio Code 為我們整合的開發環境:Git, Terminal, PHP 的整合設定
這次介紹主要以 Windows 的作業系統平台來做範例。當然大多數的 Visual Studio Code 設定也適用於 Mac,只是在 Mac 的設定上會少很多 (主要是 Terminal 以 bash 為主,PHP 及 Git 的路徑設定在安裝完時已經 Ready 了)


由於 Laravel 這個框架的底程程式語言為 PHP。就以 PHP 的開發環境來跟 Visual Studio Code 做整合介紹。
目的
以 Visual Studio Code 為我們整合的開發環境:Git, Terminal, PHP 的整合設定
這次介紹主要以 Windows 的作業系統平台來做範例。當然大多數的 Visual Studio Code 設定也適用於 Mac,只是在 Mac 的設定上會少很多 (主要是 Terminal 以 bash 為主,PHP 及 Git 的路徑設定在安裝完時已經 Ready 了)
環境
- Windows 10
- wagon (v1.4.0) (WAMP 安裝整合包: 已包含 PHP)
- Git (v2.20.1)


2018/06/05
[VSCode] PHPUnit Snippets 擴充套件釋出
來囉~ 來囉~ Visual Studio Code 的擴充套件 PHPUnit Snippets 釋出囉!

套件介紹: PHPUnit Snippets
基本用法 - 看圖片說故事
1. 先確認文件是 PHP 的文件 (可按 Ctrl + K + M 切換)
2. 在 PHP 程式碼區段輸入 snippet, 圖例: assequ (自動會找到相近的名稱可使用,是不是超級聰明?可以少打好多字)

快來試試看吧~ PHPUnit Snippets 也別忘了給星星跟推薦唷!
2017/04/23
[nginx] 如何設定簡易 PHP Web Server 於 Windows 10 來跑 Laravel 專案 (用 nginx + PHP 7.1)
輕量 nginx 網頁伺服器,在之前曾寫過一篇超簡易的 nginx 設置上手文
今天來加點料,加上可執行 PHP 的環境,並設置 Laravel 的專案環境
設置環境
- Windows 10
- nginx 1.12.0
- PHP 7.1.4-nts-x86/x64
準備檔案
- nginx
- Visual C++ 可轉散發套件
- PHP
至於 Visual C++ 可轉散發套件要選什麼版本,是依照 PHP 下載的版本來決定要用哪個。
如果像下圖 php-7.1.4-nts-Win32-VC14-x86 則需要裝 vc_redist_x86.exe (下載的是 Microsoft Visual C++ 2015 的 x86 版本)

2016/11/18
[Linux] CentOS 7 主機遇到 file_put_contents(): failed to open stream: Permission denied 的解決方法
今日在客戶的 Linux (CentOS 7) 主機遇到從來未遇過的事, 不管權限加到多高, 擁有者, 該設定的讀寫權限全設定了。卻仍在網站的 log 看到 file_put_contents(): failed to open stream: Permission denied.
弄了一下午,終於找到原兇了,原來是 SELinux 搞的鬼!
查看 SELinux 的設定狀態
暫時關閉,不用重開機的方法
要完全關閉則需修改 /etc/sysconfig/selinux 把 SELINUX 的設定值從 enforcing 改成 disabled,存檔後再重新開啟主機即會套用設定
另外在這之前,網站曾處在 httpd 403 forbidden 的錯誤,一併記錄以免忘記 這也是因為 SELinux 在搞鬼,只要下以下指令即可
以上都是用 root 權限去設定的 感謝有一群社群技術支援的朋友們,才解開這個羅生門~
References:
弄了一下午,終於找到原兇了,原來是 SELinux 搞的鬼!
查看 SELinux 的設定狀態
sestatus
暫時關閉,不用重開機的方法
setenforce 0
要完全關閉則需修改 /etc/sysconfig/selinux 把 SELINUX 的設定值從 enforcing 改成 disabled,存檔後再重新開啟主機即會套用設定
SELINUX=disabled
另外在這之前,網站曾處在 httpd 403 forbidden 的錯誤,一併記錄以免忘記 這也是因為 SELinux 在搞鬼,只要下以下指令即可
restorecon -r /var/www/html
以上都是用 root 權限去設定的 感謝有一群社群技術支援的朋友們,才解開這個羅生門~
References:
2016/08/21
[IIS] Windows 10 + IIS 10 + PHP + Laravel 環境設定
2016/07/19
[PHP] XDebug 之愛恨糾結設定
2016/07/10
2016/06/24
[Laravel] 如何連接 SQL Server 資料庫及注意事項
通常開發 Laravel 使用的資料庫大多為 MySQL 或是 Sqlite, 今天遇到網友發問連線至 MS SQL Server 的問題.
我好像也沒真正去連 SQL Server, 那麼就來手動測試一下連線至 MS SQL Server 看看吧!
必備元件:
下載 Microsoft PHP Driver for SQL Server

現在官網上的下載版本只支援到 PHP v5.6, 所以只能下載 3.2 版本, 測試的 PHP 版本為 5.6.x
另外若是使用 PHP 7 的朋友, 可以到 GitHub 下載 Azure/msphpsql v4.x 的版本
https://github.com/Azure/msphpsql/tree/v4.0.4
我好像也沒真正去連 SQL Server, 那麼就來手動測試一下連線至 MS SQL Server 看看吧!
環境:
- Windows 10
- SQL Server 2014
- Apache 2.4.18 (Win32)
- Laravel 5.2.39
- PHP 5.6.9 / Microsoft PHP Driver for SQL Server v3.2
- PHP 7.0.6 / Microsoft Drivers for PHP for SQL Server v4.0.4
必備元件:
下載 Microsoft PHP Driver for SQL Server

現在官網上的下載版本只支援到 PHP v5.6, 所以只能下載 3.2 版本, 測試的 PHP 版本為 5.6.x
另外若是使用 PHP 7 的朋友, 可以到 GitHub 下載 Azure/msphpsql v4.x 的版本
https://github.com/Azure/msphpsql/tree/v4.0.4
2015/10/26
[Tracy] 善用工具 -- Tracy 讓 PHP Debug 變簡單了
過去在開發 PHP 專案, 在除蟲的過程當中, 只能利用有限的錯誤訊息, 加上過去的經驗, 才能一步一步解決 error!
今天有機會學到新工具 Tracy (https://github.com/nette/tracy), 真讓人覺得 Debug PHP 程式變簡單了~
1. Composer 安裝
這樣該有的基本 library 就具備了
2. 如何使用?
先將 vendor/autoload.php 這支檔案引用進來
加上
今天有機會學到新工具 Tracy (https://github.com/nette/tracy), 真讓人覺得 Debug PHP 程式變簡單了~
1. Composer 安裝
composer require tracy/tracy
這樣該有的基本 library 就具備了
2. 如何使用?
先將 vendor/autoload.php 這支檔案引用進來
require __DIR__.'/vendor/autoload.php';
加上
Tracy\Debugger::enable();
就可以馬上使用囉2015/06/16
[PHP] 變更預設上傳大小限制
PHP 預設上傳大小 post_max_size 為 8 MB
若要增大尺寸有兩個方式
1. 修改 php.ini (需重啟伺服器)
2. 在 .htaccess 中設定
若要增大尺寸有兩個方式
1. 修改 php.ini (需重啟伺服器)
post_max_size=20M
upload_max_filesize=20M
2. 在 .htaccess 中設定
php_value post_max_size 20M
php_value upload_max_filesize 20M
2011/01/27
[PHP] 處理 MySQL bit 欄位值問題
MySQL bit 欄位值在不同 server 版本處理值會不一樣
最保險做法, 使用 tinyint(1) 而且設為非 NULL 值
不管 1,0,true,false 的值進來會自動傳成 int 數值
Overview of Numeric Types
Before 5.0.3, BIT is a synonym for TINYINT(1)
最保險做法, 使用 tinyint(1) 而且設為非 NULL 值
不管 1,0,true,false 的值進來會自動傳成 int 數值
Overview of Numeric Types
Before 5.0.3, BIT is a synonym for TINYINT(1)
訂閱:
文章 (Atom)