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

问题描述 投票:-6回答:1

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

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

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

php c zend-framework
1个回答
-2
投票

以下是我们从/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源代码。希望发布更多调查结果...

© www.soinside.com 2019 - 2024. All rights reserved.