当前位置: 首页 > 面试题库 >

从虚拟/自定义“ Web服务器”调用PHP

邵胜涝
2023-03-14
问题内容

基本上,我试图弄清楚如何从“ Web服务器”调用PHP。

我已经阅读了文档,但是并没有太大帮助。

据我所知,有三种方法可以调用PHP:

  • 通过命令行(例如:php -f "/path/to/script.php"
  • 通过CGI(??)/通过FastCGI(???)
  • 通过网络服务器(例如:Apache)模块

因此,让我们从CGI开始。也许我只是瞎子,但规范中并未提及网络服务器在地球上如何将数据(标头和回调)传递给实现CGI的事物。使用FastCGI时情况甚至更糟。

接下来,我们有特定于服务器的模块,由于所有线索最终都无处可寻,我什至都不知道要搜索什么。


问题答案:

调用CGI脚本非常简单。PHP具有一些特性,但是您基本上只需要设置一个环境变量列表,然后调用PHP-CGI二进制文件:

setenv GATEWAY_INTERFACE="CGI/1.1"
setenv SCRIPT_FILENAME=/path/to/script.php
setenv QUERY_STRING="id=123&name=title&parm=333"
setenv REQUEST_METHOD="GET"
...

exec /usr/bin/php-cgi

他们大多数都是样板。SCRIPT_FILENAME这是您如何将实际的php文件名传递给PHP解释器,而不是作为exec参数。对于PHP来说,至关重要的也是非标准变量REDIRECT_STATUS=200

对于GET请求,您仅需要环境变量。对于POST请求,您只需将HTTP请求主体stdin传递给已执行的php-
cgi二进制文件即可。返回的stdout是CGI响应,由不完整的HTTP标头\ r \ n \ r \ n和页面正文组成。

(仅从内存即可。也许还有更多陷阱。)



 类似资料:
  • 预先定义的虚拟服务器 FreeRADIUS包括站点可用子目录下的虚拟服务器。有些可以按原样使用,而有些则是用于特殊要求的模板。以下是一些虚拟服务器: buffered-sql:此虚拟服务器用于克服大型SQL数据库(type = detail)的速度限制。 copy-acct-to-home-server:此虚拟服务器可用作模板,用于在两个位置记录一个计费请求(type = detail)。 coa

  • 定义和启用虚拟服务器 FreeRADIUS默认启用了两个虚拟服务器。 它们位于FreeRADIUS配置目录的已启用站点的子目录下。 他们是: default:该名称几乎说明了虚拟服务器的功能。 此虚拟服务器处理未明确指定由virtual_server指令处理的所有缺省请求。 到目前为止,我们一直使用这个虚拟服务器。 inner-tunnel:此虚拟服务器用于某些隧道式EAP请求,如TTLS和PEA

  • 在sites-available目录中创建新的虚拟服务器。 为此新虚拟服务器配置并指定单独的SQL数据库。 将此虚拟服务器链接到启用站点(sites-available)的目录。 在client.conf文件中将VPN服务器定义为客户端,并使用virtual_server指令强制将此新虚拟服务器用于RADIUS请求。 sites-available目录下的buffered-sql虚拟服务器可以用作

  • FreeRADIUS 2.x分支的一个主要新功能是引入虚拟服务器。 这个概念并不新鲜,并且在2.x分支诞生时已经被Web服务器使用。 然而,freeradius是第一个将虚拟服务器引入到radius中的。 本章将更深入地了解RADIUS中虚拟服务器的世界。 在本章中,我们将: 了解您使用虚拟服务器的原因 了解如何定义和启用虚拟服务器 探索监听和客户端部分 发现预定义的虚拟服务器 让我们继续吧...

  • 如果你喜欢系统管理员的工作,或者对这方面感兴趣,虚拟或者专用服务器可以让你完全控制自己的生产环境。 nginx 和 PHP-FPM PHP 通过内置的 FastCGI 进程管理器(FPM),可以很好的与轻量级的高性能 web 服务器 nginx 协作使用。nginx 比 Apache 占用更少内存而且可以更好的处理并发请求,这对于并没有太多内存的虚拟服务器尤其重要。 阅读更多 nginx 的内容

  • 行动时刻 - 使用虚拟服务器 请按照以下步骤使虚拟服务器可用: 1.编辑FreeRADIUS配置目录中的radiusd.conf文件,并将以下内容添加到包含type = auth的listen部分(有两个listen部分,一个有type = auth,另一个有type = acct): virtual_server = always_accept。 2.在调试模式下重新启动FreeRADIUS。