PHP 系列:PHP Web 開發基礎

来源:http://www.cnblogs.com/easygame/archive/2016/01/16/5136228.html
-Advertisement-
Play Games

PHP是動態類型的Web開發的腳本語言,PHP以頁面文件作為載入和運行的單元,PHP現在有了Composer作為開發包管理。1.使用Composer管理依賴自從.NET開發用了Nuget管理程式集依賴,我就再也離不開它了,幸虧Java中也有Maven管理jar包,雖然開源中國的鏡像太慢但還有ibib...


PHP是動態類型的Web開發的腳本語言,PHP以頁面文件作為載入和運行的單元,PHP現在有了Composer作為開發包管理。

1.使用Composer管理依賴

自從.NET開發用了Nuget管理程式集依賴,我就再也離不開它了,幸虧Java中也有Maven管理jar包,雖然開源中國的鏡像太慢但還有ibiblio的鏡像可用,PHP現在終於有了Composer(參考1)用來管理資源包。

(1)全局安裝(參考2)

在指定安裝目錄中執行命令行:

php -r "readfile('https://getcomposer.org/installer');" | php

在指定安裝目錄中執行命令行:

echo @php "%~dp0composer.phar" %*>composer.bat

將指定安裝目錄添加到環境變數的系統變數Path中。

(2)項目安裝

在項目目錄中執行命令行:

php -r "readfile('https://getcomposer.org/installer');" | php

使用 composer.json 文件配置依賴。如配置PHP中常用的日誌組件:

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

使用命令行命令 php composer.phar install 安裝依賴的資源包。如果進行了全局安裝,只需要執行composert install。

這會將生成 composer.lock 文件並依賴下載資源包到 vendor 目錄,composer.lock 文件是下載依賴時真正使用的文件。

(3)升級依賴

項目使用 composer.lock 文件維護依賴,如果我們需要使用更新版本的依賴,需要按需修改 composer.json 文件並執行更新命令。全局安裝:composer update,項目安裝使用:php composer.phar update。

(4)資源包查詢與鏡像

可以使用http://packagist.org檢索資源包,好比.NET中的https://www.nuget.org/packages/和Java中的http://search.maven.org/。

可以使用http://packagist.phpcomposer.com鏡像,全局配置使用如下命令行命令:

composer config -g repo.packagist composer http://packagist.phpcomposer.com

項目配置使用如下命令行:

composer config repo.packagist composer http://packagist.phpcomposer.com

當然最簡單的方式是直接修改composer.config文件:

{
    "require": {
        "monolog/monolog": "1.0.*"
    },
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "http://packagist.phpcomposer.com"
        }
    }
}

(5)自動載入

Composert 在 vendor 目錄下自動生成並維護包含了全部依賴信息的 autoload.php 文件。因此我們只需要通過 autoload.php 使用第三方庫即可。例如:

<?php 
require 'vendor/autoload.php';
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');
?>

2.PHP基礎

(1)PHP類似C語系語法的腳本語言。

如果你有C或C++語言的基礎,那麼很多概念和語法都可以直接對照。從大小寫敏感到註釋,從數據類型、函數、參數傳遞和成員引用等。從C/C++/Java/C#這一體系學習下來,再加上JavaScript腳本語言的基礎,加點PHP的技能點水到渠成。

(2)PHP是動態類型語言。

PHP有和C語言等強類型語言一樣的數據類型定義,支持的類型也相仿,只是PHP中同一變數在不同時刻可以表示不同類型的數據,但同一時刻,每個變數都相當於強類型中的指定類型的變數。因此對於PHP,更適合的稱呼是動態類型。習慣使用Java/C#等強類型語言總會對動態類型的腳本語言心存焦慮,可以通過PHP的類型檢查函數減少這方面的顧慮(is_bool\is_integer\is_double\is_string\is_null等)。

(3)PHP以頁面文件方式運行。

無論如何使用PHP,PHP的都是以頁面文件方式運行的,這和運行在瀏覽器端的JavaScript方式類似,JavaScript文件只有在被載入到當前頁面才能引用和執行,PHP也只有在通過include或required方式載入後才能引用和執行,即使後續添加的 __autoload和spl_autoload依然只是簡化而非改變了其載入引用的本質。

(4)PHP不需要複雜的框架

PHP天生是處理Web請求的,HTTP協議相關的內容是PHP的重點,一般來講,除了縱向請求的處理,橫向的認證和授權控制部分,其他部分不應該過於依賴PHP,如果通過耦合性較高的Web框架使用PHP本身就是錯誤的。由於PHP本身的運行和載入方式,導致PHP天生就適合復用各種組件而非使用框架來解決問題。成天寄希望於框架的人,要麼是不想在PHP基礎要麼是不想在業務邏輯基礎上下功夫。

3.PHP常用文件

(1)配置文件config.php

應用配置的各種信息定義在一個或多個配置文件中。一般每次請求都會載入配置文件,配置文件中不只包含了資料庫連接信息,如應用MVC時,每次請求都會載入配置文件以便讀取所有URL和Controller以及View之間的規則。

(2)入口文件index.php

處理首頁請求或全部請求的文件。index.php在實現PHP的MVC時是天然的前段控制器FrontController,由index.php負責縱向的處理請求轉發,橫向的認證和授權等處理文件,等也需要在index.php中載入。

(3)數據訪問文件database.php

database.php是工具類中最主要的用於數據訪問的文件,為了避免數據訪問中重覆性出現的代碼,一般的PHP應用程式都會獨立的一個或一組數據訪問文件。

4.自定義Session

在PHP中自定義Session比Java中方便多了,只需要將自定義的函數名稱做為參數傳遞給session_set_save_handler($open, $close, $read, $write, $destroy, $gc)作為參數即可,我們自定義一個使用cookie作為存儲的session,作為演示沒有對數據長度進行驗證,也沒有使用對稱加密解密。

<?php

function open_session() {
    return true;
}

function close_session() {
    return true;
}

function read_session($id) {
    if ($_COOKIE[$id]) {
        return base64_decode($_COOKIE[$id]);
    }
    return '';
}

function write_session($sid, $data) {
    if ($_COOKIE['session_end']) {
        setcookie($sid, base64_encode($data), $_COOKIE['session_end']);
    } else {
        $start = time() + session_get_cookie_params()['lifetime'];
        setcookie('session_end', $start, $start);
        setcookie($sid, base64_encode($data), $start);
    }
    return true;
}

function destroy_session() {
    $_Session = array();
    return true;
}

function gc_session() {
    return true;
}

ini_set("session.cookie_lifetime", "3600");
session_set_save_handler('open_session', 'close_session', 'read_session', 'write_session', 'destroy_session', 'gc_session');
session_start();
$_SESSION['count'] += 1;
echo $_SESSION['count'];
session_write_close();
?>

參考

(1)https://getcomposer.org/doc/00-intro.md

(2)http://docs.phpcomposer.com/00-intro.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.概述 System V三種IPC:消息隊列,信號量,共用記憶體。這三種IPC最先出現在AT&T System v UNIX上面,並遵循XSI標準,有時候也被稱為XSI IPC。本文先探討消息隊列:1.消息隊列允許進程以消息的形式交換數據。讀寫都是針對...
  • 1、利用brctl命令創建虛擬網橋br0brctl addbr br0ifconfig br0 up //上述兩條命令分開執行會導致網路斷開2、將虛擬網橋br0與物理網卡eth0綁定brctl addif br0 eth0ifconfig eth0 0.0.0.0 //網橋類似於交換機,此時...
  • 初學者筆記:linux的程式在發生異常情況下,會導致進程down,多數伺服器會設置生成core文件,本人在實際運營過程中發生過進程不斷core,被自動監控拉起,過段時間有core的情況,進而導致磁碟被撐滿,影響服務這裡對core稍作瞭解後core文件的大小限制:ulimit -c是可以改變core的...
  • 一、簡介 二、安裝 http://www.cnblogs.com/jadeboy/p/5132423.html 三、其他 1)Windows下效率必備軟體 http://www.jeffjade.com/2015/10/19/2015-10-18-Efficacious-win-software/#
  • Hacker Typer 讓你也能像電影中的黑客那樣寫代碼咯~~~
  • 2016-01-16 之前只是大概瞭解過c#語言,感覺掌握不牢靠.現在開始系統學習C#.現以該博客作為學習筆記,方便後續查看.C# 目標:系統掌握c#知識 時間:30天 範圍:C#基礎,Winform應用,C#高級,SQL及.net網頁.
  • WPF預設程式啟動:新建project後自動生成的App.xaml中指定程式啟動方式(StartupUri="MainWindow.xaml"),如下代碼所示,啟動MainWindow頁面 WPF用Main函數方式啟動程式:自己寫Main函數作為啟動點1.在WPF自動生成的App.cs文件中寫M.....
  • lock與C#多線程 lock 關鍵字將語句塊標記為臨界區,方法是獲取給定對象的互斥鎖,執行語句,然後釋放該鎖。簡單講就類似於 你去銀行辦理業務,一個櫃臺一次只能操作以為客戶,而如果你要到這個櫃臺辦理業務就必須等前面的人的業務完成,而彼此之間不會有交集。下麵通過具體的代碼來深入說明: using ....
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...