*

從 PHP 到 ASP.NET 移轉小幫手

「從 PHP 到 ASP.NET 移轉小幫手」是專為協助您將 ASP 網頁及應用程式轉換成 ASP.NET 而設計。雖然這個工具無法完全自動地進行轉換程序,但是可以自動化某些移轉的必要步驟,加速您方案的進行。

這是「從 PHP 到 ASP.NET 移轉小幫手」早期的發行版本,因此我們需要您的意見,協助我們讓這個工具成為您絕佳的助手。請造訪從 PHP 到 ASP.NET 移轉小幫手論壇並呈報任何錯誤或提出您的建議。

謝謝您!

ASP.NET 小組


開始之前

在執行移轉小幫手之前,建議您先完成下列步驟:

  1. 如果您之前從未使用 ASP.NET,我們建議您先熟悉 ASP.NET,再嘗試移轉任何 PHP 應用程式。請參閱 PHP 開發人員的 ASP.NET 簡介 (英文版) 做為開始。
  2. 詳細閱讀整個快速入門網頁。
  3. 在移轉現有的 PHP 應用程式之前,請先進行備份。

內容:

如何執行移轉小幫手

移轉小幫手可以執行的作業

移轉小幫手無法執行的作業

移轉之後要做什麼

常見問題和意見


如何執行移轉小幫手:

您可以從 Visual Studio .NET 2003 中或命令列介面執行移轉小幫手。

Visual Studio .NET

開啟 Visual Studio .NET,並到 [轉換] 功能表選項:[檔案] - [開啟] - [轉換]。請參閱下列影像:

然後選取「從 PHP 到 ASP.NET 移轉小幫手」移轉器,並決定是否要建立新的方案,或加入即將要轉換成目前方案的專案。

之後,請依照「從 PHP 到 ASP.NET 移轉小幫手精靈」所提供的指示進行。

 

主控台

您可以使用 PHPConvert.exe 命令列工具將 PHP 檔案移轉至 ASP.NET。

PHPConvert.exe 的命令列語法為:

執行

PHPConvert[.exe] { <DirectoryName> [/Out <DirectoryName>] [/NoLog | /LogFile <filename>] [/NoLogo] [/Verbose] [/ProjectName <ProjectName>] [/ForceOverwrite] }


說明

PHPConvert[.exe] /? 或 /Help

選項:

/? 或 /Help:
顯示命令列選項清單。

DirectoryName:
必要項。含有 PHP 原始程式檔以及和移轉相關 (.php) 的目錄名稱。

/Out DirectoryName:
指定要建立 ASP.NET 專案的資料夾的路徑。預設的路徑為 \OutDir。

/NoLog:
隱藏寫入記錄檔。

/LogFile filename:
指定在移轉期間建立的記錄檔路徑和檔名。如果沒有指定路徑和檔名,則會將記錄檔建立在與 ASP.NET 專案相同的資料夾當中。預設的檔名為 ProjectName.xml,其中 ProjectName 為專案檔的名稱。

/Verbose:
顯示在移轉期間 DOS 視窗的所有輸出。

/ProjectName:
為新的 ASP.NET 專案指定專案名稱。

/ForceOverwrite:
隱藏確認現有目的目錄的覆寫提示。

備註:
含有空格的路徑或檔名必須用引號括住。

 


移轉小幫手可以執行的作業:

語言移轉

移轉小幫手可以將大部分的 PHP 語言元件轉換至 C# 等位,如下所示;

  • 類別和物件: 這項功能有受到充分的支援;類別宣告、繼承、物件初始設定等等都可以被轉換成 C# 類別和物件
  • 常數: 常數定義 (利用 'define' 函式) 可以被轉換成 C# 常數宣告
  • 控制項結構: 移轉小幫手支援幾乎所有的 PHP 控制項結構 (除了 'declare' 陳述式以外),甚至還支援控制項結構的不同語法
  • 函式: 最重要的函式功能會自動轉換:條件函式、宣告函式、預設引數、函式中的函式、叫用函式和類別函式。移轉小幫手並不支援變數函式或叫用不含參數的函式
  • 運算子: 移轉小幫手支援最重要的運算子
  • 參考: 移轉小幫手支援根據參考的傳遞,其他的參考則不轉換
  • 語法: 語法項目,例如註解、HTML 逸出和指示分隔等,也是由移轉小幫手進行轉換
  • 型別: 由移轉小幫手充分支援,包括陣列 (轉換為 Helper 類別)。其他的型別功能,例如型別轉換、特殊型別 (例如 Null、資源) 等,也同樣受到支援
  • 變數: 移轉小幫手可以轉換變數,包括預先定義的變數。由於在 PHP 中不必宣告變數,因此移轉小幫手會分析程式碼,並依需要宣告具有正確型別的變數

依據 aspx 對等用法變更 PHP 檔名和其參考

「從 PHP 到 ASP.NET 移轉小幫手」會產生新專案的檔案,這些檔案會具有 ASP.NET (*.aspx) 所使用的副檔名並且會自動更正原始檔案的所有參考。您可以在 PHP 檔中的多個位置找到其他檔案的參考:

  • Include 函式
  • 使用 Script 標記的包含檔案
  • href 標記
  • 表單動作屬性

包含檔案

移轉工具會使用 <!--INCLUDE...--> 指示詞轉換本機包含的檔案 (只移轉含有「php」、「php3」和「inc」副檔名的檔案,其他的檔案只是複製到目標目錄)。
所包含的檔案可以包含 HTML 程式碼、指令碼或兩者的混合。因此,移轉工具在分析和重新配置程式碼時,會將這些檔案納入考量。


型別推斷機制

PHP 並非強型別 (Strongly Typed) 語言。變數型別、函式、常數和其他語言項目都是取決於其中有使用這些項目的內容。另一方面,.NET 語言,特別是 c#,都是強型別語言,也就是說變數、常數、方法和其他項目在宣告時都必須具有型別。為了取得強型別移轉的 ASP.NET 應用程式,「從 PHP 到 ASP.NET 移轉小幫手」會檢查原始程式碼,並分析使用變數和其他語言項目的方式,以推斷這些項目的資料型別,而這些資料型別可以用於宣告項目。


程式碼重新配置

PHP 允許在 PHP HTML 逸出標記 (通常是 <?php ...?>) 之內宣告函式和變數。另一方面,在 ASP.NET 中,這些宣告必須是在指令碼標記 (<script language="C#" runat=server> ...</script>) 之內。此外,PHP 允許在伺服器指令碼中執行陳述式,而在 ASP.NET 中,陳述式的執行只限於轉譯 (Render) 標記 (<%...%>)。

這個移轉工具會執行必要的重新配置作業,將 PHP 程式碼重新配置到對應的區塊 (指令碼標記或轉譯標記),如下所示:

  • 函式宣告: PHP 允許使用函式宣告和轉譯標記內的任何類型程式碼。但是,這在 ASP.NET 中是不可能的,因為轉譯標記只接受陳述式和變數宣告。任何其他程式碼 (例如函式宣告),都必須移入指令碼標記中 (語言屬性設為 c#,而 runat 屬性則設為 server)
  • 陳述式: 陳述式一定是移至 ASP.NET 的轉譯標記 (<%...%>)
  • 變數和常數宣告: 在 PHP 中,在轉譯標記之內宣告的變數和常數具有全域範圍。另一方面,在 ASP.NET 中,轉譯標記之外的變數是看不見的。為了模擬 PHP 行為,移轉工具會擷取所有的這些變數和常數,並在檔案開頭的指令碼標記之內宣告這些變數和常數。在指令碼標記之內宣告的所有變數和常數,都應留在指令碼標記之內

內建函式支援

移轉小幫手還可以轉換主要的 PHP 核心函式。移轉小幫手支援以下最重要的函式群組:

  • Apache
  • Array
  • Calendar
  • Classes & Objects
  • COM
  • Constants
  • Language Constructs
  • Date & Time
  • Directory
  • Error Handling
  • File System
  • Function Handling
  • Http
  • Mail
  • Mathematics
  • Miscellaneous
  • MS-SQL
  • MySQL
  • ODBC
  • Oracle
  • PHP Options
  • Predefined Variables
  • Program Execution
  • Perl Regular Expressions
  • POSIX Regular Expressions
  • Session
  • String
  • URL
  • Variable
  • XML Parser

 


移轉小幫手無法執行的作業:

動態包含

移轉小幫手無法正確轉換動態包含,因此必須進行手動變更,才能成功地轉換動態包含。動態包含就是動態建立的伺服器端檔案包含,例如使用變數做為要包含的檔名。


Declare 陳述式

'declare' 陳述式是移轉小幫手所不支援的唯一控制項結構。


PHP 函式在目前的指令碼中沒有完成

在 PHP 中,您可以將函式分成兩個以上的指令碼。移轉小幫手在處理這一類程式碼時可能會遇到問題,可能會產生轉換不正確的程式碼。


可變函式/可變變數

可變變數和可變函式;移轉小幫手不支援可以動態使用的函式名稱的變數。


參考

移轉小幫手支援的唯一參考種類,是根據方法參考的傳遞引數,其他的參考則不支援。


其他限制的功能

移轉小幫手對以下功能提供有限的支援 (換句話說,不完全支援該功能):

  • COM 物件
  • 具有可變長度參數的使用者函式
  • 內建函式支援部分中未列出的函式群組
  • 不移轉使用 PHP 以外語言所撰寫的程式碼

 


移轉之後要做什麼:

轉換報告檔

檢視「轉換報告檔」,以解決在轉換過程當中發生的問題。這份報告看起來像以下的樣子:

新檔名

原始檔名

狀態

錯誤

警告

問題總數

 (全域問題)

 

 

0

1

1

全域轉換問題:

#

型別

嚴重性

說明

1

全域提示

2

所有的類別、函式、變數和常數宣告已移至 ASP.NET 宣告程式碼區塊。

 

 

 

 


轉換報告檔

檢視程式碼之內所有的「錯誤、警告與問題」,並依照指定的指示 (如果有的話) 來完成功能。例如,這可能是部分的轉換程式碼:

<!--CONVERSION_TODO:Language construct 'include' was converted to '#include' which has a different behavior.-->
<!-- #include file = "file.aspx" -->

 


常見問題和意見:

您可以造訪從 PHP 到 ASP.NET 移轉小幫手論壇,提出問題並提供意見/錯誤報告。