有没有将php移植到native client的项目? 我一直都找不到。
我的目标是进行php lint检查,而不必往返于服务器。
答案 0 :(得分:3)
回答@ crystal-miller这个问题的复兴:我不知道任何到NaCl的PHP端口,但是有很多其他语言的端口,所以以下信息应该指向右边方向,如果你想将PHP(或任何其他语言)移植到NaCl。
NaCl团队在naclports中保留了经过回归测试的端口列表。这些都是合理的最新版本,有时包含一个应用于上游项目的小补丁(虽然团队尝试上游这些补丁),并且有适当的make
咒语来构建各种NaCl和PNaCl目标(便携式) ,x86-32,x86-64,ARM,静态链接,动态链接,......)。
您希望从naclports开始查看您的项目是否在那里。如果您确实让PHP工作,我建议contacting the mailing list并提供您的更改。
下一个棘手的问题是你是否要运行语言:
编译的基本方法是相同的,但是应用程序与外部世界的通信方式将完全不同:沙箱公开了与沙箱外部进程通信的通信机制。
在编译方面,您可以选择目标NaCl本身(特定于体系结构:x86-32 / x86-64 / ARM / MIPS)或PNaCl(体系结构不可知)。两者都是操作系统不可知的,可以作为扩展/应用程序或服务器执行,但只有PNaCl可以在开放的Web上执行。 NaCl工具链基于GCC(截至编写4.4版x86,4.9代表ARM),而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 bitcode,并且可以将这个bitcode传递给PNaCl但是在编写它时有时仍然很棘手,请按照邮件列表进行更新(有些人已经将这些更新到了工作)。但是,可以动态生成PNaCl的.pexe
文件,将它们存储在本地文件系统中,然后执行它们,通过动态链接,您应该可以使用.pso
执行相同操作。
当作为Chrome(开放式网络或扩展程序或应用)的一部分执行时,有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等项目可以执行此操作。在这些情况下,您可能希望依赖NaCl的sel_ldr
或sel_ldr_seccomp
来执行NaCl .nexe
文件(seccomp
版本设置基于seccomp的沙箱在通常的NaCl沙箱周围进行系统调用过滤,我建议也这样做。 NaCl和PNaCl自己的测试套件使用sel_ldr
进行回归测试。
考虑到这一点,我认为你已经指出了从任何方向入手所需的所有信息!
答案 1 :(得分:0)
[edit]我看到你现在正在做什么...发布一个链接到谷歌项目页面会很有帮助。
您可能需要自己为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>.
答案 2 :(得分:0)
我最终使用php.js在浏览器中检查PHP。 http://phpjs.hertzen.com/
PHP.js是一个用Javascript编写的PHP vm。它有效,但不是一个完美的解决方案,因为一些语法已经过时了。 NaCl溶液可能会更好,因为我认为它更容易维护。但在平均时间里,这是我能找到的最好的。