passing Cookies and other environment stuff to PHP SAPI Embed
| From: | Alexander Heinlein | Date: | Mon, 28 Apr 2008 13:50:09 +0000 |
| Subject: | passing Cookies and other environment stuff to PHP SAPI Embed | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-37275@lists.php.net to get a copy of this message | ||
Hi
I'm trying to write the php processing part of a small httpd. I want to use
the SAPI Embed for interpreting php scripts. But I can't find a way to
specify the content of variables like $_COOKIE, $_REQUEST, $_SERVER etc.
Is there any function to initalize the SAPI header with all this stuff?
That's what my little programm looks like at the moment:
<cpp>
#include <php_embed.h>
#include <iostream>
#include <string>
using namespace std;
string output = "";
int store_string (const char *str, unsigned int str_length TSRMLS_DC)
{
if(strlen > 0)
output += str;
return SUCCESS;
}
int main(int argc, char* argv[])
{
// pass output of script to store_string() instead of printing it to stdout
php_embed_module.ub_write = store_string;
PHP_EMBED_START_BLOCK(argc, argv)
// php_request_startup(TSRMLS_C);
sapi_header_struct *h;
zend_llist_position pos;
zval retval; // return value
// execute script
zend_eval_string("include 'test.php';", &retval, "script"
TSRMLS_CC);
cout << "\nscript output:\n" << output << endl;
// convert retval to long
convert_to_long(&retval);
cout << "\nretval: " << Z_LVAL(retval) << endl;
// free memory
zval_dtor(&retval);
cout << "\nreading header:" << endl;
// get header (SG = SAPI Globals)
sapi_headers_struct *sapi_headers = &(SG(sapi_headers));
// read first element (= header line)
h = (sapi_header_struct*)zend_llist_get_first_ex(&sapi_headers->headers, &pos);
// while existing elements
while (h)
{
// print them
cout << h->header << endl;
// get next element
h = (sapi_header_struct*)zend_llist_get_next_ex(&sapi_headers->headers, &pos);
}
PHP_EMBED_END_BLOCK()
return 0;
}
</cpp>
Before calling zend_eval_string() to interpret the script there has to be
some way to pass all the client information like Cookies and stuff to the
SAPI, but I can't find a way to do this. Unfortunately there is no
documentation at all for this API.
Is there anyone who could give me some hints, or a small code snippet?
Regards,
Alex