PHP - Passing by Reference
PHP 提供了一個將變數參照到函式中的功能
只要在定義 function 時,將要參照的變數前面加上 & 就可以宣告為參照
例如:這裡範例定義了函式以及參數設定為參照 - myfun(&$x)
Continue ReadingPHP 提供了一個將變數參照到函式中的功能
只要在定義 function 時,將要參照的變數前面加上 & 就可以宣告為參照
例如:這裡範例定義了函式以及參數設定為參照 - myfun(&$x)
Continue ReadingThere show how to custom a php artisan command
first create your custom command
This will auto generate a file in app/Console/Command/Tests/TestOutput.php
and setting a relative command for calling this file in terminal command
Continue ReadingLaradock 在 Laravel 社群相當知名,它提供了完整套件 Docker-Images及相關設定
讓我們能很簡單的就部署好完整的 Laravel 開發環境
當然也可以支援其他PHP專案,像是 Symfony, CodeIgniter, WordPress 等
這裡介紹如何快速的透過 Laradock 安裝 NGINX, PHP, Composer, MySQL, Redis 及 Beanstalkd
Continue ReadingLaravel 為了讓PHP開發整體體驗都能完善,在local開發的環境設定也提供了相關解決方案
也就是這裡要介紹的 Homestead
Laravel Homestead 是官方所維護的 Vagrant box pre-package
讓你可以直接透過這個環境開發,而不必再獨立安裝PHP、Web server…等軟體
並且不必擔心忘記系統設定,因為 Vagrant boxes 是一次性設定安裝完畢,
如果在安裝流程有發現錯誤,隨時都可以重新安裝環境,並且只需要幾分鐘的時間就能完成
Continue Reading跨域資源共享 CORS (Cross-origin resource sharing) 是一個 W3C 標準
這裡主要針對 php (Laravel) 以及 nginx 如何設置 CORS 進行說明
以及 Laravel 5.5 之後的版本自定義 cros Middleware 踩過的坑進行紀錄
首先,先看一般原生PHP設定 cors 的方式
Continue Reading通常會使用 user agent 來判斷來源裝置
在 PHP 可以使用下方式來取得 user agent
<?php
$user_agent = $_SERVER['HTTP_USER_AGENT'];
會將config內容合併保存在 /bootstrap/cache/config.php 重新設定.env 時,直接輸入這個指令就能更新設定內容
php artisan config:cache
可以用以下命令清除訊息緩存配置
php artisan config:clear
Continue Reading
這裡記錄一下,在 Nginx + PHP 環境無法取得 Http Get Request 的問題
在本機端,使用的是 apache 環境,會需要取得網址上的Get參數
<?php
public function index(Request $request) {
$message = $request->message;
...
}
上傳至 Server Side (Nginx 環境) 卻發現無法取得參數
這時先測看看完整網址以及檢查$_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 使用的是 Nginx
前往Server 設定中,檢查一下 nginx.conf ,發現原因是
Continue ReadingPHP COdeSniffer 包含了兩個 PHP script
在 VS Code 會使用下面這個擴充
PHP 常見魔術方法簡介
這裡針對一些比較常見的魔術方法進行說明:
__construct
首先,提到兩個魔術大家都會常用到: __construct
CVT2HUGO: 與 __destruct
CVT2HUGO: 會在物件被實例化時觸發,__destruct
Laravel 取得最後查詢SQL方式如下:
<?php
//啟用Query Log
DB::enableQueryLog();
//取得所有Query Log
$queries = DB::getQueryLog();
//取得最後一筆Query
$last_query = end($queries);
return $last_query;
這裡,分別會用OAuth Server,以及 OAuth Client 兩個角度來說明 OAuth2 運作機制
composer create-project --prefer-dist laravel/laravel laravel_oauth
cd laravel_oauth
建立資料庫 ex. laravel_oauth 複製 .env.example 並命名為 .env
加入資料庫連線設定
產生 APP_KEY
php artisan key:generate
.evn
SESSION_DRIVER=database
建立 session migrate
php artisan session:table
重新 dump
composer dump-autoload
建立 migrate
php artisan migrate
php artisan make:auth
composer require laravel/passport
如果安裝的MySql版本較舊,可能會發生錯誤,因此需加入下方修改設定
app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
將 auth 及 passport 相關 migration 來自動建立資料表
Continue Reading在 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 資料。
其中, APP_ENV 預設為 testing
直接複製 .env 命名為 .env.testing ,並且將 .env.testing 的 APP_ENV 設定為 testing
在執行 phpunit 時, .env.testing 會覆寫掉 .env 的設定值
此外,針對一些需要透過 migration 等相關 artisan指令操作,可以透過 –env=testing 來讀取.evn.testing 檔案
例如:
php artisan migrate --env=testing
//or
php artisan migrate:refresh --env=testing
這裡紀錄如何透過PHP來取得目前網址的相關方式
假設目前有一個網址: http(s)://www .example.com/site/contact.php?uid=123456&class=3
在 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
Md5 已經公認為危險的加密方式, 而SHA-512也能以每秒4600萬次計算進行破解, 儘管被破解的速度較慢,但是仍有安全上的疑慮。
通常駭客如果取得了大量的加密字串,需要先猜測出你使用的是哪一種SALT, 如果所有的密碼都採用相同的SALT,那麼一但破解第一組,代表其他密碼也就能順而進行破解
現在,PHP提供的 password_hash 可以達到隨機生成處理 SALT, 因此就連開發者也不會知道每次加密會使用甚麼SALT, 這樣當駭客想要進行破解,成本就當然會更高
Continue Reading早期,常使用 md5, sha1 雜湊(hash)來進行加密,
但是md5已經能成功破解,及sha1 (, sha0) 都有理論的破解方式,因此還是推薦使用其他可替換的加密演算法。
Continue Reading這裡簡單介紹如何直接透過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.
透過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 的參數設定為負值即可
<?php
$rest = substr("abcdef", -1); // returns "f"
$rest = substr("abcdef", -2); // returns "ef"
$rest = substr("abcdef", -3, 1); // returns "d"
length 設定為負數,會從後面開始算終結點 例如 start 0, length -1 - 從第一次元開始,至倒數一字元
<?php
$rest = substr("abcdef", 0, -1); // returns "abcde" 從第1次元開始,至倒數2字元
$rest = substr("abcdef", 2, -1); // returns "cde" 從第3次元開始,至倒數2字元
$rest = substr("abcdef", 4, -4); // returns false 從第5次元開始,至倒數5字元 ---> 區間不對會發生錯誤
$rest = substr("abcdef", -3, -1); // returns "de"
在一頁式網頁架設登入系統通常是一件非常麻煩棘手的事情,
在一開始要思考的是該挑選哪個主流框架 Angular、React或Vue…
然後開始建立一個前後端分離的架構,只透過RESTful API來進行溝通,
在這樣的架構下,搭建CMS相當容易,前端通常只需要取得資料後,進行render出來即可,
##SESSION BASE 無用武之地 如果要建設會員或管理者權限功能,傳統 session-based 的權限登入方式相當簡單,
但是在透過 RESTful API 應用的框架中,session-based的方式則行不通,
此外,單純使用SESSION的情況,也必須解決資料跨 Server 的問題
Token是一串加密字串,並儲存在前端, 當使用者再次操作時,就能在後端從資料庫中比對token, 檢查是否為有效的使用者, 但是這樣的查詢也會產生伺服器的負擔
Continue Reading