summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToon Schoenmakers <toon.schoenmakers@copernica.com>2015-09-17 11:43:01 +0200
committerToon Schoenmakers <toon.schoenmakers@copernica.com>2015-09-17 11:43:01 +0200
commitd745768edff718c8483dc1e3613e34800e93559f (patch)
tree3ebe59a201778baaae0d0b23ff72aa782b357bda
parent448b1b873537bed4b616c284ba75ce9392f838a9 (diff)
Added the error reporting method, used to change the error reporting level
-rw-r--r--include/call.h1
-rw-r--r--zend/exception_handler.cpp24
2 files changed, 25 insertions, 0 deletions
diff --git a/include/call.h b/include/call.h
index 55e9ed6..9b1725a 100644
--- a/include/call.h
+++ b/include/call.h
@@ -48,6 +48,7 @@ extern PHPCPP_EXPORT Value require_once(const char *filename);
inline PHPCPP_EXPORT Value require_once(const std::string &filename) { return require_once(filename.c_str()); }
extern PHPCPP_EXPORT Value set_exception_handler(const std::function<Value(Parameters &params)> &handler);
extern PHPCPP_EXPORT Value set_error_handler(const std::function<Value(Parameters &params)> &handler, Error error = Error::All);
+extern PHPCPP_EXPORT Value error_reporting(Error error);
extern PHPCPP_EXPORT const char *sapi_name();
/**
diff --git a/zend/exception_handler.cpp b/zend/exception_handler.cpp
index b864e78..aa925f9 100644
--- a/zend/exception_handler.cpp
+++ b/zend/exception_handler.cpp
@@ -72,6 +72,30 @@ Value set_error_handler(const std::function<Value(Parameters &params)> &handler,
}
/**
+ * Modify the error reporting level, will return the old error reporting level.
+ */
+Value error_reporting(Error error)
+{
+ // store the old error reporting value
+ Value output(EG(error_reporting));
+
+ // create a small temporary buffer
+ char str[21];
+
+ // write the level into this buffer
+ int size = sprintf(str, "%d", (int) error);
+
+ // if we failed for some reason we bail out
+ if (size < 0) return false;
+
+ // alter the ini on the fly
+ zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), str, size, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
+
+ // return the output
+ return output;
+}
+
+/**
* End of namespace
*/
}