建立 PHP Web 和背景工作角色

概觀

重要

針對新客戶目前已取代 Azure 雲端服務 (傳統),而針對所有客戶,該服務將從 2024 年 8 月 31 日起完全淘汰。 新部署應該使用 Azure Resource Manager 型的新部署模型 Azure 雲端服務 (延伸支援)

本指南將說明如何在 Windows 開發環境中建立 PHP Web 或背景工作角色、從「內建」的可用版本中選擇特定版本的 PHP、變更 PHP 組態、啟用擴充功能,最終部署至 Azure。 此外也會說明如何設定 Web 或背景工作角色,以使用您所提供的 PHP 執行階段 (具有自訂組態和擴充功能)。

Azure 提供三種運算模型來執行應用程式:Azure 應用程式服務、Azure 虛擬機器和 Azure 雲端服務。 這三種模型都支援 PHP。 雲端服務 (包含 Web 和背景工作角色) 可提供 平台即服務 (PaaS)。 在雲端服務中,Web 角色提供專用的 Internet Information Services (IIS) Web 伺服器,用來代管前端 Web 應用程式。 背景工作角色可以執行非同步、長時間或永久的工作,且不受使用者互動或輸入所影響。

如需這些選項的詳細資訊,請參閱計算 Azure 提供的裝載選項

下載 PHP 適用的 Azure SDK

Azure SDK for PHP 由數個元件組成。 本文將使用下列兩個元件:Azure PowerShell 和 Azure 模擬器。 這兩個元件可透過 Microsoft Web Platform Installer 來安裝。 如需詳細資訊,請參閱 如何安裝及設定 Azure PowerShell

建立雲端服務專案

建立 PHP Web 或背景工作角色的第一個步驟是建立 Azure 服務專案。 Azure 服務專案可作為 Web 和背景工作角色的邏輯容器,且包含專案的服務定義 (.csdef)服務組態 (.cscfg) 檔案。

若要建立新的 Azure 服務專案,請以系統管理員身分執行 Azure PowerShell 並執行下列命令:

PS C:\>New-AzureServiceProject myProject

此命令會建立新目錄 (myProject),讓您可將 Web 和背景工作角色新增至該處。

新增 PHP Web 或背景工作角色

若要將 PHP Web 角色新增至專案,請從專案的根目錄中執行下列命令:

PS C:\myProject> Add-AzurePHPWebRole roleName

對於背景工作角色,請使用下列命令:

PS C:\myProject> Add-AzurePHPWorkerRole roleName

注意

roleName 是選用參數。 若省略此參數,將會自動產生角色名稱。 第一個建立的 Web 角色將是 WebRole1、第二個將是 WebRole2,依此類推。 第一個建立的背景工作角色將是 WorkerRole1、第二個將是 WorkerRole2,依此類推。

使用您自己的 PHP 執行階段

在某些情況下,您可能會想要提供自己的 PHP 執行階段,而不依照前述的說明選取內建 PHP 執行階段並加以設定。 例如,您可以使用與在開發環境使用的 Web 或背景工作角色中相同的 PHP 執行階段。 這可讓您更輕鬆地確保應用程式在您的生產環境中不會變更行為。

設定 Web 角色以使用您自己的 PHP 執行階段

若要設定 Web 角色以使用您所提供的 PHP 執行階段,請遵循下列步驟:

  1. 如本主題先前所述,建立 Azure 服務專案並加入 PHP Web 角色。

  2. 在位於 Web 角色根目錄內的 bin 資料夾中建立 php 資料夾,然後將 PHP 執行階段 (所有的二進位檔、組態檔、子資料夾等) 新增至 php 資料夾。

  3. (選擇性)如果您的 PHP 執行階段使用 適用於 PHP for SQL Server 的 Microsoft 驅動程式,您必須設定 Web 角色,以在佈建時安裝 SQL Server Native Client 2012。 若要執行此動作,請將 sqlncli.msi x64 安裝程式 新增至 Web 角色根目錄的 bin 資料夾中。 下一個步驟中說明的啟動指令碼,將會在角色進行佈建時以無訊息方式執行安裝程式。 如果您的 PHP 執行階段並未使用適用於 PHP for SQL Server 的 Microsoft 驅動程式,您可以從下一個步驟所顯示的指令碼中移除以下一行:

    msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
    
  4. 定義啟動工作,設定 Internet Information Services (IIS) 使用您的 PHP 執行階段來處理 .php 頁面的要求。 若要執行此動作,請在文字編輯器中開啟 setup_web.cmd 檔案 (位於 Web 角色根目錄的 bin 檔案中),並使用下列指令碼來取代它的內容:

    @ECHO ON
    cd "%~dp0"
    
    if "%EMULATED%"=="true" exit /b 0
    
    msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
    
    SET PHP_FULL_PATH=%~dp0php\php-cgi.exe
    SET NEW_PATH=%PATH%;%RoleRoot%\base\x86
    
    %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%PHP_FULL_PATH%',maxInstances='12',idleTimeout='60000',activityTimeout='3600',requestTimeout='60000',instanceMaxRequests='10000',protocol='NamedPipe',flushNamedPipe='False']" /commit:apphost
    %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%PHP_FULL_PATH%'].environmentVariables.[name='PATH',value='%NEW_PATH%']" /commit:apphost
    %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%PHP_FULL_PATH%'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']" /commit:apphost
    %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/handlers /+"[name='PHP',path='*.php',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='%PHP_FULL_PATH%',resourceType='Either',requireAccess='Script']" /commit:apphost
    %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /"[fullPath='%PHP_FULL_PATH%'].queueLength:50000"
    
  5. 將應用程式檔案新增至 Web 角色的根目錄。 這會是 Web 伺服器的根目錄。

  6. 如以下的發佈您的應用程式一節所述,發佈您的應用程式。

注意

在執行前述步驟 (使用您自己的 PHP 執行階段) 之後,您可以將 download.ps1 指令碼 (位於 Web 角色根目錄的 bin 資料夾中) 刪除。

設定背景工作角色以使用您自己的 PHP 執行階段

若要設定背景工作角色以使用您所提供的 PHP 執行階段,請遵循下列步驟:

  1. 如本主題先前所述,建立 Azure 服務專案並加入 PHP 背景工作角色。

  2. 在背景工作角色的根目錄中建立 php 資料夾,然後將 PHP 執行階段 (所有的二進位檔、組態檔、子資料夾等) 新增至 php 資料夾。

  3. (選擇性)如果您的 PHP 執行階段使用 適用於 PHP for SQL Server 的 Microsoft 驅動程式,您必須設定背景工作角色,以在佈建時安裝 SQL Server Native Client 2012。 若要執行此動作, 請將 sqlncli.msi x64 安裝程式 新增至背景工作角色的根目錄。 下一個步驟中說明的啟動指令碼,將會在角色進行佈建時以無訊息方式執行安裝程式。 如果您的 PHP 執行階段並未使用適用於 PHP for SQL Server 的 Microsoft 驅動程式,您可以從下一個步驟所顯示的指令碼中移除以下一行:

    msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
    
  4. 定義啟動工作,在佈建角色時將您的 php.exe 可執行檔新增至背景工作角色的 PATH 環境變數中。 若要執行此動作,請在文字編輯器中開啟 setup_worker.cmd 檔案 (位於背景工作角色的根目錄中),並使用下列指令碼來取代它的內容:

    @echo on
    
    cd "%~dp0"
    
    echo Granting permissions for Network Service to the web root directory...
    icacls ..\ /grant "Network Service":(OI)(CI)W
    if %ERRORLEVEL% neq 0 goto error
    echo OK
    
    if "%EMULATED%"=="true" exit /b 0
    
    msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
    
    setx Path "%PATH%;%~dp0php" /M
    
    if %ERRORLEVEL% neq 0 goto error
    
    echo SUCCESS
    exit /b 0
    
    :error
    
    echo FAILED
    exit /b -1
    
  5. 將應用程式檔案新增至背景工作角色的根目錄。

  6. 如以下的發佈您的應用程式一節所述,發佈您的應用程式。

在計算和儲存模擬器中執行您的應用程式

Azure 模擬器所提供的本機環境,可讓您在 Azure 應用程式部署至雲端前先加以測試。 模擬器與 Azure 環境之間有若干差異。 若要深入了解,請參閱使用 Azure 儲存體模擬器進行開發和測試

請注意,您必須在本機安裝 PHP,才能使用計算模擬器。 計算模擬器會使用您的本機 PHP 安裝執行您的應用程式。

若要在模擬器中執行您的專案,請從專案的根目錄執行下列命令:

PS C:\MyProject> Start-AzureEmulator

您將看到類似以下的輸出:

Creating local package...
Starting Emulator...
Role is running at http://127.0.0.1:81
Started

您可以開啟網頁瀏覽器,並瀏覽至輸出中顯示的本機位址 (在前述範例輸出中為http://127.0.0.1:81 ),即可看見您的應用程式正在模擬器中執行。

若要停止模擬器,請執行下列命令:

PS C:\MyProject> Stop-AzureEmulator

發佈您的應用程式

若要發佈應用程式,您必須先使用 Import-AzurePublishSettingsFile Cmdlet 匯入您的發佈設定。 使用 Publish-AzureServiceProject Cmdlet 發佈應用程式,如下所示。 如需登入的相關資訊,請參閱 如何安裝和設定 Azure PowerShell

下一步

如需詳細資訊,請參閱 PHP 開發人員中心