diff options
author | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2014-04-03 12:47:09 +0200 |
---|---|---|
committer | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2014-04-03 12:47:09 +0200 |
commit | c9d8cabfebc9a3b757fa1492c4431b0f88e9ded0 (patch) | |
tree | c76764dcd4ae2737b2de23a8a2d0d575613cd71e | |
parent | a5aaa0877fa586499c4be8f19df760fff11f28dd (diff) |
{auto} fixed super-globals when running as apache module, and when using just-in-time setting for the super-globals (fixes issue #63)
-rw-r--r-- | include/super.h | 15 | ||||
-rw-r--r-- | src/super.cpp | 24 |
2 files changed, 26 insertions, 13 deletions
diff --git a/include/super.h b/include/super.h index 73e3761..97ba6b8 100644 --- a/include/super.h +++ b/include/super.h @@ -25,9 +25,10 @@ public: * Extension writers do not have to access the super-globals themselves. * They are always accessible via Php::POST, Php::GET, et cetera. * - * @param index number + * @param index index number + * @param name name of the variable in PHP */ - Super(int index) : _index(index) {} + Super(int index, const char *name) : _index(index), _name(name) {} /** * Destructor @@ -40,7 +41,7 @@ public: * @param key * @return Value */ - Value operator[](const std::string &key) const; + Value operator[](const std::string &key); /** * Array access operator @@ -48,7 +49,7 @@ public: * @param key * @return Value */ - Value operator[](const char *key) const; + Value operator[](const char *key); private: /** @@ -56,6 +57,12 @@ private: * @var int */ int _index; + + /** + * Name of the variable in PHP + * @var name + */ + const char *_name; }; /** diff --git a/src/super.cpp b/src/super.cpp index b344159..b2e7ad9 100644 --- a/src/super.cpp +++ b/src/super.cpp @@ -14,13 +14,13 @@ namespace Php { /** * A number of super-globals are always accessible */ -Super POST (TRACK_VARS_POST); -Super GET (TRACK_VARS_GET); -Super COOKIE (TRACK_VARS_COOKIE); -Super SERVER (TRACK_VARS_SERVER); -Super ENV (TRACK_VARS_ENV); -Super FILES (TRACK_VARS_FILES); -Super REQUEST (TRACK_VARS_REQUEST); +Super POST (TRACK_VARS_POST, "_POST"); +Super GET (TRACK_VARS_GET, "_GET"); +Super COOKIE (TRACK_VARS_COOKIE, "_COOKIR"); +Super SERVER (TRACK_VARS_SERVER, "_SERVER"); +Super ENV (TRACK_VARS_ENV, "_ENV"); +Super FILES (TRACK_VARS_FILES, "_FILES"); +Super REQUEST (TRACK_VARS_REQUEST, "_REQUEST"); /** * Array access operator @@ -28,11 +28,14 @@ Super REQUEST (TRACK_VARS_REQUEST); * @param key * @return Value */ -Value Super::operator[](const std::string &key) const +Value Super::operator[](const std::string &key) { // we need the tsrm_ls pointer TSRMLS_FETCH(); + // call zend_is_auto_global to ensure that the just-in-time globals are loaded + if (_name) { zend_is_auto_global(_name, strlen(_name) TSRMLS_CC); _name = nullptr; } + // create a value object that wraps around the actual zval Value value(PG(http_globals)[_index]); @@ -46,11 +49,14 @@ Value Super::operator[](const std::string &key) const * @param key * @return Value */ -Value Super::operator[](const char *key) const +Value Super::operator[](const char *key) { // we need the tsrm_ls pointer TSRMLS_FETCH(); + // call zend_is_auto_global to ensure that the just-in-time globals are loaded + if (_name) { zend_is_auto_global(_name, strlen(_name) TSRMLS_CC); _name = nullptr; } + // create a value object that wraps around the actual zval Value value(PG(http_globals)[_index]); |