如何从C扩展名(PHP源)读取和写入PHP超全局变量? [处于保留状态]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从C扩展名(PHP源)读取和写入PHP超全局变量? [处于保留状态]相关的知识,希望对你有一定的参考价值。

我们正在开发自定义邮件处理程序,并希望读取$ _SERVER超级全局变量。我们正在使用现有的mail.c代码。

在浏览了所有代码之后,我们需要一个简单的步骤,就可以从扩展中读取和写入超全局变量(例如$ _SERVER)的代码示例。

以下(答案)是我们想出的:

答案

以下是我们从/ext/info.c改编而来的内容,该内容有助于到达/phar/phar_object.c:

  HashTable *_SERVER;
  zval **stuff;
  char *path_info;
  int code;
  zval *temp;

  _SERVER = Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]);
  /* Reading, find if exists */
  if (SUCCESS == zend_hash_find(_SERVER, "php_SELF", sizeof("PHP_SELF"), (void **) &stuff)) {
    path_info = Z_STRVAL_PP(stuff);
    code = Z_STRLEN_PP(stuff);

    /* Debug info echos on browser */
    php_printf("<br/>code: %d - contents: %s", code, path_info);
    /* Make zend compliant */
    MAKE_STD_ZVAL(temp);
    ZVAL_STRINGL(temp, path_info, code, 0);

    /* Update _SERVER superglobal */
    zend_hash_update(_SERVER, "MY_PHP_SELF", sizeof("MY_PHP_SELF"), (void *) &temp, sizeof(zval **), NULL);
  }

此信息已发布,以便对他人有所帮助。我们找不到任何答案,因此反汇编了PHP源代码。希望发布更多调查结果...

以上是关于如何从C扩展名(PHP源)读取和写入PHP超全局变量? [处于保留状态]的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何把数据写入JSON文件并在另一PHP文件读取JSON数据?

php扩展在全局变量中不存在但是打印phpinfo却存在?

PHP如何写入,读取与替换文件内容

请问php如何自动创建文件夹和文件?

在PHP中,如何实现写入或创建另1个PHP文件?

如何在不修改脚本的情况下计算 PHP 脚本的文件读取和写入?