如何编写可以修改PHP解释器内部的自定义PHP扩展?

如何编写可以修改PHP解释器内部的自定义PHP扩展?,php,c,unix,cgi,php-extension,Php,C,Unix,Cgi,Php Extension,是否可以编写一个PHP扩展(UNIX、CGI SAPI),我可以: 重新定义PHP函数的实现(如mail():许多PHP软件使用标准的mail()函数-我不能改变这一点,因为客户希望使用它,到此为止…-但我需要重写它,就像在chroot()中一样“ed环境无法生成sendmail进程-我需要套接字级别的通信,这不是标准的SMTP(顺便说一句) 在实际解析/执行PHP脚本之前,先“停止”PHP解释器(这样我就可以为我的oen做其他事情),但在完成所有初始化工作(扩展加载、ini文件解析等)之后,

是否可以编写一个PHP扩展(UNIX、CGI SAPI),我可以:

  • 重新定义PHP函数的实现(如mail():许多PHP软件使用标准的mail()函数-我不能改变这一点,因为客户希望使用它,到此为止…-但我需要重写它,就像在chroot()中一样“ed环境无法生成sendmail进程-我需要套接字级别的通信,这不是标准的SMTP(顺便说一句)
  • 在实际解析/执行PHP脚本之前,先“停止”PHP解释器(这样我就可以为我的oen做其他事情),但在完成所有初始化工作(扩展加载、ini文件解析等)之后,让我们称之为“在PHP脚本执行挂钩之前”等等:)
  • 强制解析INI文件(路径由我生成/定义),该文件可以重新定义之前设置的所有设置(如果有)
目前我已经修改了PHP源代码本身,但这很难看,可能也很危险,如果我可以作为一个PHP扩展来做这件事就好了,好吧,至少有一些看起来像PHP扩展:)所以我不需要修改“核心PHP”


提前多谢

网络上有很多介绍基本Hello World和其他内容的Howto文章和参考资料

祝你好运

特写
罗马

关于第2点和第3点:

  • “php脚本执行挂钩之前”已经以php.ini选项
    auto_prepend_file
    的形式存在
  • 您可以使用覆盖特定的ini选项

auto_prepend_文件对我没有帮助,因为我需要C代码(即使是低级代码,因为我想扩展CGI SAPI来处理与SCGI的网络通信:不,FastCGI是我在这里不能使用的东西),而不是PHP。ini是一个很好的观点,尽管感谢您的建议,但是我不确定它是否有效,因为我需要解析一个ini文件,该文件位于用户主页所在的目录结构/路径之外。据我所知,PHP(从5.3.0开始)只有在检测到我的脚本(将要执行)所在路径中的文件时才会解析这些文件。更具体地说,我不希望用户能够指定PHP设置,但我在用户使用的目录结构之外,根据每个用户的基础为他们提供额外的设置(他们无法更改)(确保他们不能操纵它-至少不能直接操作)。建议您的客户花几美元使用PEAR::Mail,或者继续使用带有zend core修改的Mail()几千美元。这可能会让他们改变主意:)使用PEAR之类的东西是我最不想要的:因为我使用的是chroot-ed环境,我需要将这些东西分别部署到每个用户的家中。这就是为什么我会喜欢mail(),如果我可以用一种很好的方式对它进行修改,以使用除调用sendmail二进制文件之外的其他策略。老实说,这对我来说有点奇怪:对于windows,有基于SMTP的实现,但对于UNIX,则是sendmail方式。为什么PHP不能在UNIX上提供SMTP呢?至少对我来说,修改起来要容易得多:)好吧,谢谢,但我的问题是关于“如何”的更详细信息,而不是一般的“如何”或API参考,在我找到答案之前,还需要整体学习:)