顯示具有 PHP 標籤的文章。 顯示所有文章
顯示具有 PHP 標籤的文章。 顯示所有文章

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 就是這麼簡單!

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)

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 了)

環境

 https://www.laravel-dojo.com/opensource/wagon


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 的專案環境

設置環境

準備檔案

  1. nginx
  2. Visual C++ 可轉散發套件
  3. 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 的設定狀態
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 環境設定

大多數 在 Windows OS 下執行 Laravel 專案都會用 WAMP 環境 - 像是 wagon, UwAmp, 或是 Xampp 以 Apache 為 server 為基礎的伺服器環境.

今天來點不一樣的~ 用 Windows IIS 來架設 PHP 專案環境.

重要的是在 Windows 10 的 IIS 上安裝 PHP Manager 及 URL Rewrite 有些小細節需要微調



2016/07/19

[PHP] XDebug 之愛恨糾結設定

XDebug 在跑測試時需要, 要跑 Code Coverage 時也需要, 唯獨在一個情況下是希望關閉的, 就是執行 Composer 的時候

但是 Composer 對於 PHP 的專案來說, 又是扮演著超級重要的角色, 但若是 XDebug 開啟又會造成它的效率不佳的問題



2016/07/10

[BDD] 實作 PHP 測試 - Behat + PHPUnit

先來一篇 PHP 的 BDD 測試實作

實作測試環境:

  • PHP 7.0.8
  • Behat 3.1
  • PHPUnit 5.4
實作的檔案及步驟已放在 GitHub - php-bdd-behat-demo


2016/06/24

[Laravel] 如何連接 SQL Server 資料庫及注意事項

通常開發 Laravel 使用的資料庫大多為 MySQL 或是 Sqlite, 今天遇到網友發問連線至 MS SQL Server 的問題.

我好像也沒真正去連 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 安裝

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 (需重啟伺服器)

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)