跳至主要內容

文章

顯示從 8月, 2022 起發佈的文章

PHP 原生伺服器路由研究

PHP 下載完成後,使用 php -S localhost:8000 就可以建立一個伺服器,完全不需要阿帕契伺服器。This article is about creating server routing from scratch without Apache server with php. 基礎路由(routing) 在 php 本身提供的伺服器中,在哪個資料夾中執行 php -S localhost:8000,localhost:8000 這個網址就會找到哪個資料夾裡面的 index.php 或是 index.html 檔案,然後提供到前端頁面上。 如果輸入的網址沒有給任何的副檔名,伺服器也會抓 index.php 或是 index.html 檔案,然後提供到前端頁面上。 但是如有給提供附檔名,例如 http://localhost:8000/about.php,這邊的網址有 .php,伺服器就會找資料夾中是否有 about.php 這個檔案,然後提供到前端去。 自訂路由 我們可以運用 php 原生伺服器不提供附檔名網址就會導向提供 index.php 或是 index.html 這個特性來撰寫路由。 我們用 $_SERVER[REQUEST_URI] 這個內建全域變數來做。 當網址是 http://localhost:8000/about 時,$_SERVER[REQUEST_URI] 就是 /about。 接下來我們可以運用 switch case 或是 if statements 來建立路由。當然,也需要建立幾個頁面,舉例來說,home.php 跟 about.php。 最後,只要在用 require 或是 include 來提供頁面。 程式碼範例 <h1>This is my header</h1> <a href="/">Home</a> <a href="/about">About</a> <hr> <?php switch($_SERVER["REQUEST_URI"]){ case...

PHP Uncaught Error: Class "mysqli" not found 解決

 php 安裝完,通常現在的版本 mysqli 都已經順便安裝好,可是,就算安裝好了,也無法使用,會出現錯誤: Uncaught Error: Class "mysqli" not found。 解方如下: 修正 php.ini 首先要建立 php.ini 檔,這個檔案是 php 建立後端伺服器時都會讀取的檔案,要先到最初安裝 php 的資料夾,找到 php.ini-development 或是 php.ini-production 裡面的  extension_dir = "ext",然後把前方的分號移除,然後找到 extension=mysqli,也把前方分號移除,另存為 php.ini 檔。 然後記得伺服器要重開才會生效。 然後重新連結 mysql 即可。 Connection failed: could not find driver 如果使用 PDO 來連接 mysql,必須到 php.ini 中找到 extension=pdo_mysql,把前方的分號刪除即可。

Flood Fill 解題經驗談

第一次接觸到 Flood Fill 這個演算法題型時,我連題目都看不太懂,後來經過一些搜尋及研究才了解,Flood Fill 如名所義,就是洪水淹蓋的意思。 你用過小畫家的一個油漆桶的功能嗎?這個功能就是讓相連同顏色的所有區域變成油漆桶要指定的區域,而這就是 Flood Fill。 了解完題目後,就要來解題,才發現,真的不簡單。 以程式碼解釋題型 用程式碼來顯示題型,就會像是一個 2X2 的 array 所形成的 2D 平面圖,而每一個座標上會標示一個整數,舉例來說長得像這個。 111 010 012 而這個 2D 圖就是代表這個 array, [[1,1,1],[0,1,0],[0,1,2]]。假設我們起始的位置是[1,1],也就是正中間的這個數字,我們要讓所有連接數字一樣的全部換成另外一個數字,假設是 2 好了,會變成。 222 020 022 簡單化題型 在寫任何程式碼以前,光是想出解題的邏輯就相當困難。 要每一個座標一個個檢查嗎?可能會太耗時。 要先檢查上下,再左右嗎?可能會有許多地方顏色改不掉。 要繞圈圈檢查嗎?那可能無法檢查是否跟上一個連接座標是否同數字。 所以,我暫時解不開,我只想到一個方案,就是先解解看 1D 的 Flood Fill。 1D 的 Flood Fill 所謂的 1D Flood FIll 就是原本的 2D 變成 1D。這樣,題目就變得簡單多了。假設這個 array [1,0,1,1,1,0,0,1],的第4個數字連接的全都要變成 2 ,就會變成 [1,0,2,2,2,0,0,1]。 我想到的解題方法就是,先往右檢查到底,直到沒有同數字的再回到原點,向左檢查。 範例 執行 回到 2D 1D 版本的 Flood Fill 解完後,我來嘗試原本的版本。 我到參考邏輯跟解 1D 的版本一致,就是先又在作,然後在向上向下移動,但是,這樣的話會有很多需要轉彎的地方數字改變不到,按下方按鈕看結果。 執行 最後 最後我想到最土法煉鋼的方式,就是從原點出發,然後依上、右、下、左順序,依序檢查是否有與上原點連接相同數字,然後記錄起來,在重紀錄起來的座標中重複檢查上、右、下、左方向的連接座標,然而這個解法 leetcode 無法接受,因為花太多時間。 執行

PHP 伺服器基礎

PHP 下載完後把所有資料抓出來即可使用,甚至直接用 php 指令就可以建立伺服器。 舉例來說可以用php -S localhost:8000來建立,這邊的 S 必須要是大寫。 也可以用 php -S 127.0.0.1:8000。

Nodejs 伺服器開發談

用 nodejs 的 express 開發伺服器快速簡單,但是我想研究看看不用 express 開發伺服器。 登入安全性 不用 Express 來創造登入頁面,我想到的是使用 cookie,只要前端傳送果來的 cookie 與使用者資料吻合就算是登入。 http server request 的 cookie 藏在 req.rawHeaders[req.rawHeaders.length-1]。 未解問題 使用 response.writeHead 的 Set-Cookie 時,瀏覽器重新整理時未必能及時更新 cookie,導致前端需要 cookie 的 UI 無法正常運作。

MySQL常用指令

以下為使用 MySQL 常用到的指令。 CMD 登入 要使用 CMD 操作 MySQL 要先設定路徑,指令為 set PATH=%PATH%;C:\Program Files\MySQL\MySQL Server 8.0\bin。 這個 Set path 指令對於 php 也有用,或是任何用指定路徑才能使用的軟體都可。 設定完要登入 MySQL 伺服器,指令為mysql -uroot -p1234,這邊的 root 是伺服器名稱。輸入完之後再輸入密碼即可。 使用 MySQL Shell 輸入 \sql 從 js 模式進入 sql 模式(這個步驟可以沈省略)。 輸入\connect username@servername (root@localhost)。 最後輸入密碼。 如果是JS模式,記得再回到 SQL 模式,輸入 \sql。 使用 nodejs 連接 使用 node 連 MySQL首先要設定:ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; 這個指令也可以改密碼。 查看使用者 Select user(); 查看使用的 DB cmd (專用) status 使用 DB ues tablename; 查詢 table show tables; 新增資料 INSERT INTO categories (cat_title) VALUES ("JavaScript"); 創造 table CREATE TABLE Persons ( PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) ); 查看 table DESCRIBE tablename; 登入 mysql -uroot -p1234 查看使用的 DB status