2011-12-12 53 views
1

有沒有任何項目將php移植到native client? 我一直沒能找到任何。本地客戶端(NaCl)的PHP

我的目標是做php lint檢查,而不必進行往返服務器。

+0

我希望我回答你的問題在下面!我不確定你是以開放網絡,擴展/應用程序還是服務器用例爲目標,所以我試圖回答所有這些問題。 –

+0

你看過http://www.icosaedro.it/phplint/?或想到在命令行上使用php命令做這件事? – unixmiah

+0

Phplint沒有幫助,因爲它運行在PHP中,目的是在不連接到服務器的情況下在瀏覽器中執行lint檢查。 –

回答

0

我結束了使用php.js lint在瀏覽器中檢查PHP。 http://phpjs.hertzen.com/

PHP.js用JavaScript編寫一個PHP虛擬機。它的工作原理,但不是一個完美的解決方案,因爲一些語法已過時。 NaCl溶液可能會更好,因爲我認爲它會更容易維護。但同時這是我能找到的最好的。

0

我明白你現在的想法......發佈一個鏈接到google項目頁面會有幫助。

您可能正處於需要自己編譯NaCl的地步。我不確定最初的答案是否真的有用,但我將它留給子孫後代。 :)


使用command line version of PHP

你要使用的語法檢查option

-l    Syntax check only (lint) 

全參考

Usage: php [options] [-f] <file> [--] [args...] 
     php [options] -r <code> [--] [args...] 
     php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...] 
     php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...] 
     php [options] -- [args...] 
     php [options] -a 

    -a    Run interactively 
    -c <path>|<file> Look for php.ini file in this directory 
    -n    No php.ini file will be used 
    -d foo[=bar]  Define INI entry foo with value 'bar' 
    -e    Generate extended information for debugger/profiler 
    -f <file>  Parse and execute <file>. 
    -h    This help 
    -i    PHP information 
    -l    Syntax check only (lint) 
    -m    Show compiled in modules 
    -r <code>  Run PHP <code> without using script tags <?..?> 
    -B <begin_code> Run PHP <begin_code> before processing input lines 
    -R <code>  Run PHP <code> for every input line 
    -F <file>  Parse and execute <file> for every input line 
    -E <end_code> Run PHP <end_code> after processing all input lines 
    -H    Hide any passed arguments from external tools. 
    -s    Output HTML syntax highlighted source. 
    -v    Version number 
    -w    Output source with stripped comments and whitespace. 
    -z <file>  Load Zend extension <file>. 

    args...   Arguments passed to script. Use -- args when first argument 
        starts with - or script is read from stdin 

    --ini   Show configuration file names 

    --rf <name>  Show information about function <name>. 
    --rc <name>  Show information about class <name>. 
    --re <name>  Show information about extension <name>. 
    --rz <name>  Show information about Zend extension <name>. 
    --ri <name>  Show configuration for extension <name>. 
3

接聽@晶米勒的這個問題的復興:我不知道任何PHP的端口到NaCl,但是有很多其他語言的端口,所以如果您希望將PHP(或任何其他語言)移植到NaCl,以下信息應指向正確的方向。

NaCl團隊在naclports中保留了經過迴歸測試的端口列表。這些都是合理的最新的,有時包含一個適用於上游項目的小補丁(儘管團隊試圖在這些補丁的上游),並且爲各種NaCl和PNaCl目標構建了正確的咒語(便攜式,x86-32 ,x86-64,ARM,靜態鏈接,動態鏈接......)。

您需要從naclports開始查看您的項目是否在那裏。如果你確實讓PHP工作,我建議contacting the mailing list並貢獻你的改變。

下一個棘手的一點是,你是否要運行的語言:

  • 在Chrome瀏覽器,開放的網絡上。
  • 作爲Chrome extensionapp
  • 在一臺機器上,例如一臺服務器。

編譯的基本方法將是相同的,但應用程序與外部世界的通信方式將完全不同:沙箱公開通信機制以與沙箱外的進程交談。

在編譯方面,您可以選擇針對NaCl本身(架構特定:x86-32/x86-64/ARM/MIPS)或PNaCl(架構不可知)。兩者都是操作系統不可知的,可以作爲擴展/應用程序或服務器執行,但只有PNaCl可以在打開的網絡上執行。 NaCl工具鏈基於GCC(寫入x86的4.4版本,ARM的版本爲4.9),而PNaCl工具鏈則基於LLVM 3.5(即將成爲樹結點)。 PNaCl工具鏈也可以用來定位NaCl,目前有點複雜,但是should get much better soon with nacl-clang。NaCl工具鏈支持靜態和動態鏈接(通過newlib或glibc)以及零成本C++異常處理,而PNaCl工具鏈目前僅支持靜態鏈接(work in progress to add dynamic linking)和基於SJLJ的異常處理(零成本稍後) 。

這聽起來很複雜,但總體上它只是一個帶有很多旋鈕的編譯器:在網絡上分發需要速度和可移植性。

有一點需要記住:NaCl確實支持一些有限的動態代碼生成(例如,有一個使用JIT編譯的Mono port),但是PNaCl目前不支持。這意味着口譯員更容易移植(即使V8在NaCl中也能這樣工作)。一些像Halide,Rust或Julia這樣的語言生成LLVM位碼,並且可以將這個位碼傳遞給PNaCl,但是在編寫時它仍然有點棘手,請按照郵件列表獲取更新(有些人已經獲得了這些工作)。不過,可以動態生成PNaCl的.pexe文件,將它們存儲在本地文件系統中,並執行它們,並且通過動態鏈接,您應該可以對.pso執行相同的操作。

當作爲鉻的部分(開放式網絡或擴展程序或應用)執行有APIs to communicate with the rest of Chrome。有些API需要特權,有些僅限於擴展/應用(因爲它們不適合網絡模型),有些需要用戶選擇加入。

自Chrome的一部分,您可能還需要使用nacl_io看齊更加POSIX的行爲,並允許你如安裝HTML5文件系統,然後使用常規的POSIX API。

當作爲一個服務器運行的東西比較複雜:你必須弄清楚如何與外界溝通,和NaCl沒有默認的API。但有可能:Google在內部使用NaCl,並且有ZeroVM和Ripple Lab的Codius Smart Contracts這樣的項目。在這種情況下,你可能要依靠氯化鈉的sel_ldrsel_ldr_seccomp執行氯化鈉.nexe文件(seccomp版本設置圍繞通常氯化鈉沙箱基於的Seccomp沙箱做系統調用過濾,我建議過這樣做)。 NaCl和PNaCl自己的測試套件使用sel_ldr進行迴歸測試。

考慮到這一點,我認爲你已經指出了你需要從任何方向入手的所有信息!