Backend

Laravel - Homestead

Laravel Homestead 介紹

Laravel 為了讓PHP開發整體體驗都能完善,在local開發的環境設定也提供了相關解決方案

也就是這裡要介紹的 Homestead

Laravel Homestead 是官方所維護的 Vagrant box pre-package

讓你可以直接透過這個環境開發,而不必再獨立安裝PHP、Web server…等軟體

並且不必擔心忘記系統設定,因為 Vagrant boxes 是一次性設定安裝完畢,

如果在安裝流程有發現錯誤,隨時都可以重新安裝環境,並且只需要幾分鐘的時間就能完成

Continue Reading

PHP, Larave, Nginx 設置Header允許請求 CORS 的幾種方式

跨域資源共享 CORS (Cross-origin resource sharing) 是一個 W3C 標準

這裡主要針對 php (Laravel) 以及 nginx 如何設置 CORS 進行說明

以及 Laravel 5.5 之後的版本自定義 cros Middleware 踩過的坑進行紀錄

首先,先看一般原生PHP設定 cors 的方式

Continue Reading

PHP 判斷來源裝置的方法

通常會使用 user agent 來判斷來源裝置

在 PHP 可以使用下方式來取得 user agent

<?php
$user_agent = $_SERVER['HTTP_USER_AGENT'];

Continue Reading

Laravel 程式緩存優化技巧

設定訊息緩存

會將config內容合併保存在 /bootstrap/cache/config.php 重新設定.env 時,直接輸入這個指令就能更新設定內容

php artisan config:cache

可以用以下命令清除訊息緩存配置

php artisan config:clear

Continue Reading

Laravel - PHP 無法取得 Hppt Request $_GET Params 值的解決方式

這裡記錄一下,在 Nginx + PHP 環境無法取得 Http Get Request 的問題

在本機端,使用的是 apache 環境,會需要取得網址上的Get參數

<?php

    public function index(Request $request) {
    	$message = $request->message;
      ...
    }

上傳至 Server Side (Nginx 環境) 卻發現無法取得參數

嘗試取得完整網址與$_GET是否能取得值

這時先測看看完整網址以及檢查$_GET

<?php

    public function index(Request $request) {
				echo $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        print_r($_GET);

確定在 localhost 確實能完整捕捉到 Localhost 結果如:

http://localhost:8000?message=hello
Array
(
[message] => hello
)

但是在 server 上面有捕捉到完整網址,但同樣輸出的是空的 $_GET Server 輸出結果如:

http://example.com?message=hello
Array
(
)

檢查Server side 設定

正式 Server 使用的是 Nginx

前往Server 設定中,檢查一下 nginx.conf ,發現原因是

Continue Reading

PHP_CodeSniffer 簡介,及 VS Code 擴充使用

PHP COdeSniffer 包含了兩個 PHP script

  • phpcs(PHP Code Sniffer),可以檢查程式碼風格
  • phpcbf (PHP COde Beautifier and Fixer),自動修正程式碼風格

在 VS Code 會使用下面這個擴充

  • php-cs-fixer ,自動修正程式碼風格

Continue Reading

介紹 PHP 常見魔術方法

PHP 常見魔術方法簡介

這裡針對一些比較常見的魔術方法進行說明:

__construct

首先,提到兩個魔術大家都會常用到: __construct CVT2HUGO: 與 __destruct CVT2HUGO: 會在物件被實例化時觸發,__destruct

Continue Reading

Laravel - 取得最後查詢SQL語法

Laravel 取得最後查詢SQL方式如下: <?php //啟用Query Log DB::enableQueryLog(); //取得所有Query Log $queries = DB::getQueryLog(); //取得最後一筆Query $last_query = end($queries); return $last_query;

Continue Reading

Laravel 5.5 OAuth2

這裡,分別會用OAuth Server,以及 OAuth Client 兩個角度來說明 OAuth2 運作機制 一、建立 OAuth Server 安裝laravel composer create-project --prefer-dist laravel/laravel laravel_oauth cd laravel_oauth 設定資料庫 建立資料庫 ex. laravel_oauth 複製 .env.example 並命名為 .env 加入資料庫連線設定 生成 app key 產生 APP_KEY

Continue Reading

Laravel 測試 .env.testing 設置檔

Laravel 測試 .env.testing 設置檔 在 Laravel 執行測試,主要會以 phpunit.xml 設定檔案來定義環境變數。 預設的內容為 <php> <server name="APP_ENV" value="testing"/> <server name="BCRYPT_ROUNDS" value="4"/> <server name="CACHE_DRIVER" value="array"/> <server name="MAIL_DRIVER" value="array"/> <server name="QUEUE_CONNECTION" value="sync"/> <server name="SESSION_DRIVER" value="array"/> </php> 預設的 session 及 cache 都是以 Array driver 方式處理,表示在測試過程不會真的產生 session 或 cache 資料。

Continue Reading

PHP - 目前網址取得方式技巧

這裡紀錄如何透過PHP來取得目前網址的相關方式

假設目前有一個網址: http(s)://www .example.com/site/contact.php?uid=123456&class=3

PHP 取得目前網址相關方式

在 PHP 取得網址相關的方式有以下幾個:

<?php
$_SERVER['HTTP_HOST']; // www.exampe.com
$_SERVER['REQUEST_URI']; // /site/contact.php?uid=123456&class=3
$_SERVER['PHP_SELF'];// site/contact.php
$_SERVER['QUERY_STRING'];// uid=123456&class=3

Continue Reading

[解決] PHP Notice: Undefined index和Undefined variable的解决方法

在安裝新的PHP,或者升級PHP版本時,可能會遇到下列錯誤:

PHP Notice: Undefined variable:

遇到這類問題時,可以嘗試以下解法

Continue Reading

現代PHP password_hash 雜湊加密採用隨機SALT 使用方式

Md5 已經公認為危險的加密方式, 而SHA-512也能以每秒4600萬次計算進行破解, 儘管被破解的速度較慢,但是仍有安全上的疑慮。

通常駭客如果取得了大量的加密字串,需要先猜測出你使用的是哪一種SALT, 如果所有的密碼都採用相同的SALT,那麼一但破解第一組,代表其他密碼也就能順而進行破解

現在,PHP提供的 password_hash 可以達到隨機生成處理 SALT, 因此就連開發者也不會知道每次加密會使用甚麼SALT, 這樣當駭客想要進行破解,成本就當然會更高

Continue Reading

PHP 雜湊加密演算 sha256、sha224、sha512....

過時的 MD5 以及 SHA1

早期,常使用 md5, sha1 雜湊(hash)來進行加密,

但是md5已經能成功破解,及sha1 (, sha0) 都有理論的破解方式,因此還是推薦使用其他可替換的加密演算法。

Continue Reading

PHP - 內建 web server localhost -S -t 啟用方式

這裡簡單介紹如何直接透過PHP 內建 web server,預覽網站的方式

但是還是建議透過 apache, nginx…等 web server 比較好

PHP 啟用內建 web server 使用方式:

直接啟動

> php -S localhost:8000

PHP 7.2.3 Development Server started at Sat Mar 31 08:39:18 2018
Listening on http://localhost:8010
Document root is C:\site
Press Ctrl-C to quit.

從指定的根目錄啟動

Continue Reading

PHP 取得字串前、中、後部分字串長度

透過PHP的 substr 可以取得字串中的部分字元,並且可以指定長度 語法格式如下: <?php //string substr( string $string , int $start [, int $length ] ) substr('原始字串' , 開始位置 ,要取得的長度 ); 下方紀錄一些用法 從前面取得字串 <?php echo substr('abcdef', 1); // bcdef echo substr('abcdef', 1, 3); // bcd echo substr('abcdef', 0, 4); // abcd echo substr('abcdef', 0, 8); // abcdef 從後面取得字串 從最後方開始取得字串的方式,可以把 start 的參數設定為負值即可

Continue Reading

單頁應用程式的登入權限驗證 - 開源標準規範 JSON Web Tokens

在一頁式網頁架設登入系統通常是一件非常麻煩棘手的事情,

在一開始要思考的是該挑選哪個主流框架 Angular、React或Vue…

然後開始建立一個前後端分離的架構,只透過RESTful API來進行溝通,

在這樣的架構下,搭建CMS相當容易,前端通常只需要取得資料後,進行render出來即可,

##SESSION BASE 無用武之地 如果要建設會員或管理者權限功能,傳統 session-based 的權限登入方式相當簡單,

但是在透過 RESTful API 應用的框架中,session-based的方式則行不通,

此外,單純使用SESSION的情況,也必須解決資料跨 Server 的問題

Token

Token是一串加密字串,並儲存在前端, 當使用者再次操作時,就能在後端從資料庫中比對token, 檢查是否為有效的使用者, 但是這樣的查詢也會產生伺服器的負擔

Continue Reading

PHP Socket - simple case tutorial

Open PHP Socket Extension

First, make sure php.ini php_socket extension is opened remove ; and restart http server php.ini

...
extension=php_sockets.dll
...

Socket Server Side

Writing your servier side code as fellowing: php_socket_server.php

Continue Reading

全球900萬用戶恐受PHP Mailer漏洞影響,讓攻擊者能在遠程執行任意代碼!

PHP Mailer是其中一個最受歡迎的郵件程式庫,普遍被應用在各種流行框架 WordPress,Drupal,1CRM,SugarCRM,Yii,Joomla!…等。 卻在日前,由 Dawid Golunski 發現在 v 5.2.18 版本存在一個高度危險漏洞,能允許攻擊者在遠端執行程式代碼。漏洞編號為 CVE-2016-10033

Continue Reading

[教學] 在 windows locahlost 透過 Gmail SMTP server 寄信 ( 使用 phpmailer )

通常在租用主機環境,都會處理好mail server所需的相關設定,

如果在開發過程中,可以在local端就能測試寄發email效果,對開發者而言,一定會更加方便

因此,本文主要說明在 windows 本地 localhost( 127.0.0.1)

如何使用 phpmailer 來透過 GMAIL SMTP server 寄信

How to using phpmailer to sending gmail smtp e-mail in windows localhost

Continue Reading