用于内联网络编程的PHP的替代品?

时间:2011-11-08 03:32:12

标签: php python ruby web-applications

我一开始就用php学习了网络编程。它有一些我觉得非常有用的功能,但整体语言不是我喜欢的东西,只是个人喜好。我想知道使用不同的底层编程语言(Python?Ruby?)可以使用哪些替代方法来提供类似的功能。

我在寻找:

  • 通用编程功能
  • 嵌入在HTML中的嵌入式服务器端代码(即我希望能够根据需要使我的文档成为纯HTML,而不是在我不想要动态内容时要求特殊语法)
  • 访问请求参数
  • 发送标题,设置Cookie等的能力

优选地:

  • 不需要单独的服务器进程
  • 易于与Apache连接

有人有任何建议吗?

我尝试做的一件事是通过CGI嵌入Ruby(erb)。这看起来非常适合纸张。不幸的是,我无法让它工作,因为我正在遵循一些不同的指南,结合它们的结果没有成功。无论如何,似乎这不允许我设置任意标题(更重要的是,使用会话和cookie)。

注意:我目前不是在寻找完整的Web框架。在其他HTML页面中只有相对少量的动态内容。

谢谢!

5 个答案:

答案 0 :(得分:6)

你已经找到了PHP如此受欢迎的重要原因 - 它在服务器可嵌入的软件包中拥有所有这些部分。其易于部署的解决方案并不多; PHP是专门为你想要的而编写的,这既是它的优点也是缺点。这就是为什么它是如此弱的通用语言,以及为什么每个人和他们的狗都知道它。它无处不在,进入的障碍几乎为零。

PHP是一种语言加模板加上一个Web框架,全部融入一个软件包。为了得到一个等价物,你将需要一个Web框架,即使它是一个小框架。像Sinatra之类的东西是在Ruby中做类似的超级轻量级​​方法,虽然它需要一个单独的服务器进程。

你可以用cgi.pm看看像Perl这样的东西,但如果你想要比PHP更清洁的东西,它可能是一个错误的方向。

我不太了解Python包以提供建议,但Twisted使得将Python程序绑定到Web界面变得容易。但这最终会在自己的服务器进程中运行。

如果你想使用PHP以外的东西,你需要做比标准PHP部署更多的工作,但这通常是人们认为是提高生产率的合理权衡的选择。

答案 1 :(得分:4)

Python Flask是一个很好的Web框架:它符合您的要求,易于学习,并且可以优雅地扩展。阅读教程,看看!

答案 2 :(得分:3)

我有三个建议。

第一个是Ruby on Rails - 一旦你进入它就很有趣..我建议你通过Rails for Zombies来了解你是否喜欢它。

http://railsforzombies.org/

Heroku上免费获取并运行起来非常容易,因此您无需花费任何资金在网上获取内容......

我的第二个建议是我刚刚尝试称为Node.js的建议。我建议观看此视频,了解它的内容:

http://www.youtube.com/watch?v=jo_B4LTHi3I

如果您使用的是Javascript,我想您会马上得到它。您还可以在www.cloud9ide.com上构建一个开源的Node.js项目,这个项目非常漂亮。

第三个,如果你正在学习Java,那就是“Play”。一个很酷的视频是:

http://vimeo.com/7087610

我没有用过这么多,但这是我要做的“待办事项”清单。总的来说,我建议只是将你的脚趾浸入水中以获得一系列不同的框架,并了解它们的工作方式,然后你会自然地追求对你最有意义的东西。祝你好运!

答案 3 :(得分:3)

我会说你的要求

  

其他HTML页面中只有相对少量的动态内容。

然后,PHP很难在快速上升和最小的学习开销的情况下被击败。它避免了您原本必须处理的所有CGI问题,实际上它是自己的模板语言。这就是为什么这么多人开始使用它。一旦你超越了将一点编程逻辑混合到HTML页面,开发更灵活,可维护和可测试的应用程序的目标,那么Rails,Django等框架将值得您花时间学习。

答案 4 :(得分:0)

使用Scheme as a web development language符合您的标准,但需要注意:HTML中嵌入的内联代码不是嵌入在HTML的Lisp-ish表示中的内联代码,称为s表达式。 (HTML之间存在一对一的对应关系,与s-exp等价;它们可以通过一个函数调用进行交互。)因此,页面的静态部分和代码共享相同的语法 - 我非常喜欢Scheme

> (sxml->xml `(div (p "It's been: " (i ,(current-time)) " seconds")))

<div>
  <p>
     It's been: <i>1339772791</i> seconds
  </p>
</div>