PHP

介紹 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

php artisan key:generate

修改 session 儲存方式 (可選擇,如果要存在本地就可略過此步驟)

.evn

SESSION_DRIVER=database

建立 session migrate

php artisan session:table

重新 dump

composer dump-autoload

建立 migrate

php artisan migrate

建立 Authentication 架構

php artisan make:auth

建立 OAuth 2 passport

composer require laravel/passport

設定舊版本MySQL Migration

如果安裝的MySql版本較舊,可能會發生錯誤,因此需加入下方修改設定

app/Providers/AppServiceProvider.php

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

Migrate

將 auth 及 passport 相關 migration 來自動建立資料表

Continue Reading

在 Windows 架設 nginx + php

安裝 nginx

前往 nginx 官網,下載nginx/windows 的檔案

這裡下載的版本是 Stable version - nginx/Windows-1.12.2

在 C 槽新增一個 nginx_php/ 資料夾

將下載的nginx 壓縮檔解壓縮後放入

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 資料。

其中, 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

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 的參數設定為負值即可

<?php
$rest = substr("abcdef", -1);    // returns "f"
$rest = substr("abcdef", -2);    // returns "ef"
$rest = substr("abcdef", -3, 1); // returns "d"

將 length 設定為負值的方式,從後方開始算結束點

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"

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

在 Windows 環境安裝 composer 教學

##下載 Composer安裝檔

前往官網下載 Composer-Setup.exe

安裝檔會自動選擇最新的版本,

在安裝過程直接按確定或下一步,直到完成安裝

Continue Reading

slim 2 教學 (含composer 簡易教學)

Slim : 適合前後端分家,後端只用來寫 RESTful API 的 framework。

http://www.9lessons.info/2012/05/create-restful-services-api-in-php.html http://www.9lessons.info/2014/12/create-restful-services-using-slim-php.html http://asika.windspeaker.co/post/3495-php-slim-framework-twig

##其他API參考 http://www.html5rocks.com/en/tutorials/cors/ 現在越來越多人認可這種“一次開發,處處運行”的非原生APP開發了,我們在平時開發中常用的兩套技術棧:1、CoreThink + dcloud + framework7 + cors;2、Ionic+Cordova +CoreThink,全都是開源技術,上手無壓力,之前我們也在OSC上分享過: 非原生App開發的基本步驟(移動端:ionic、cordova,後端:CoreThink)歡迎交流,非原生APP上架蘋果APP store http://www.dcloud.io/index.html

官方教學手冊

可以事情況決定安裝哪個版本 3.0 http://www.slimframework.com/docs/ Slim 3 requires PHP 5.5+ 2.0 http://docs.slimframework.com/ Requires PHP 5.3.0 or newer.

一、 使用composer 安裝slim

建立資料夾以及composer.json檔案

//composer.json
{
    "require": {
        "slim/slim": "~2.0"
    }
}

執行composer

composer install
//如果安裝一直沒有動靜,請留意是否要更新composer版本
//如果有,請按照指示更新

二、直接透過指令安裝

composer require slim/slim "^3.0"

三、直接安裝slim

從這裡複製資料夾 composer/vendor/slim/slim/Slim 這個資料就是Slim的程式包 將他單獨複製到新的資料夾即可單獨安裝Slim

引用composer slim 與 直接引用Slim 差別

事情況以及習慣,首先下面是composer中引用slim的方法

<?php
//引用 vendor/autoload.php
require('vendor/autoload.php');
?>

底下則是直接引用Slim

<?php
require('Slim/Slim.php');
\Slim\Slim::registerAutoloader();
?>

後續範例都會以composer引用的為主。

Continue Reading