【问题标题】:Compiling PHP 5.3.3 From Source Into Apache将 PHP 5.3.3 从源代码编译到 Apache
【发布时间】:2011-03-26 16:39:21
【问题描述】:

刚刚从源代码编译 5.3.3 (win32)。 试图测试一些 header() 东西,但它看起来不适用于 CLI sapi。 任何关于将编译后的源代码作为模块放入 apache 的好的文档,就像我通常对预编译模块所做的那样。

基本上我的测试将来自 CLI

php -r "header('Content-Type: text/plain', true, 404); var_dump(headers_list());"

我从 headers_list() 得到一个空数组,所以我需要将此内置源代码放入 apache 中,以便从 headers_list() 获得响应。

提前谢谢各位。

------- 更新 ------

配置命令,但还没有 apache? http://pastebin.com/qhFVR8A3:

E:\phpsdk\bin\php53dev\vc9\x86\php5.3.3>configure --disable-all --enable-cli --enable-apache2-2handler --enable-apache2-2filter

Enabled SAPI:
-------------
| Sapi Name |
-------------
| cli       |
-------------

----- 第二次更新----

下载了apache,将其卡在../apache中并尝试了以下命令但找不到标头。

http://pastebin.com/XyrzuZvu:

E:\phpsdk\bin\php53dev\vc9\x86\php5.3.3>
configure --disable-all --enable-cli --enable-apache2-2handler=../apache --enable-apache2-2filter --enable-cgi

---- 第三次更新 ---

Enabled SAPI:
--------------------
| Sapi Name        |
--------------------
| apache2_2filter  |
| apache2_2handler |
| cgi              |
| cli              |
--------------------

I have it working now.
E:\phpsdk\bin\php53dev\vc9\x86\php5.3.3>configure --disable-all --enable-cli --enable-apache2-2handler --enable-apache2-2filter --enable-cgi --with-extra-includes=E:\phpsdk\bin\php53dev\vc9\x86\apache\include --with-extra-libs=E:\phpsdk\bin\php53dev\vc9\x86\apache\lib

感谢链接

【问题讨论】:

  • 你的意思是 LoadModule php5_module modules/libphp5.so 吗?这不是在 httpd.conf 中加载模块的方式吗?
  • 我冒昧地“解决”了外部 pastebin“实体”。

标签: php c apache pecl


【解决方案1】:

PHP cli SAPI 并不是真的要发送 HTTP 标头;它的目的是在命令行中使用。

如果您想在 Apache 中使用 PHP,您必须编译 Apache 模块 SAPI 或 CGI SAPI。

要编译 Apache 2.2 模块,您必须拥有 Apache 库并分别在 %LIB% 和 %INCLUDE% 中包含目录,并使用:

--enable-apache2-2handler

请注意,您走的是 Apache 模块路线,您必须使用 Apache 二进制文件使用的相同版本的 C 运行时库来编译它。原因是 PHP 必须能够分配内存并将这些指针传递给 Apache 以便它释放它们,反之亦然,并且为了正确发生这种情况,版本必须相同。因此,例如,如果您编译(或从某处下载)使用 Visual C++ 9 编译的 Apache,则必须使用 Visual C++ 9 编译 PHP。

【讨论】:

  • 是的,我知道这一点,但我正在寻找配置中的相关选项以启用 apache SAPI。查看我更新的帖子。
  • 我已将 apache 从最新的 pastebin 中显示的构建目录下载到 ../apache 中。你能指定 %LIB% 和 %INCLUDE% 在哪里吗?
  • @Paul 这些是环境变量。使用 SET LIB=%LIB%;X:\path\to\apache2.2\libSET INCLUDE=%INCLUDE%;X:\path\to\apache2.2\include 或使用 VolkerK 所说的配置选项。
  • 我确实有 /include/ 目录,但没有 /lib/ 目录。我正在从:apache.mirror.anlx.net/httpd/httpd-2.2.16-win32-src.zip 下载
  • 完美的链接,我有必要的库来启用 SAPI。
【解决方案2】:

应该比你在http://pastebin.com/qhFVR8A3发布的几行输出多得多
很可能有消息Could not find apache2.2 libraries/headers,这意味着配置脚本至少找不到以下文件之一:

  • httpd.h
  • libhttpd.lib
  • libapr-1.lib
  • libaprutil-1.lib

要么将这些文件复制到 php-build 包含/库路径,要么使用 --with-extra-includes--with-extra-libs 指向适当的目录。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-04-23
  • 2014-05-24
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多