[PHP-CVS] cvs: php4 /ext/standard php_fopen_wrapper.c /main php_streams.h /main/streams php_stream_plain_wrapper.h plain_wrapper.c
wez Tue Mar 18 18:37:54 2003 EDT Modified files: /php4/ext/standard php_fopen_wrapper.c /php4/main php_streams.h /php4/main/streams php_stream_plain_wrapper.h plain_wrapper.c Log: Implement persistent plain file streams. Usage: php_stream *stream = php_stream_fopen(/path/to/file, r+b, NULL, STREAM_OPEN_PERSISTENT | ENFORCE_SAFE_MODE | REPORT_ERRORS); the filename and mode are combined to form the hash key for the persistent list; they must be identical for this same stream to be returned again in the next request. Calling php_stream_close() on a persistent stream *will* close it, as is usual with all persistent resources in PHP/ZE. This is deliberately *not* exposed to user-space PHP at this time. Index: php4/ext/standard/php_fopen_wrapper.c diff -u php4/ext/standard/php_fopen_wrapper.c:1.36 php4/ext/standard/php_fopen_wrapper.c:1.37 --- php4/ext/standard/php_fopen_wrapper.c:1.36 Tue Mar 18 11:40:28 2003 +++ php4/ext/standard/php_fopen_wrapper.c Tue Mar 18 18:37:53 2003 @@ -17,7 +17,7 @@ | Hartmut Holzgraefe [EMAIL PROTECTED] | +--+ */ -/* $Id: php_fopen_wrapper.c,v 1.36 2003/03/18 16:40:28 wez Exp $ */ +/* $Id: php_fopen_wrapper.c,v 1.37 2003/03/18 23:37:53 wez Exp $ */ #include stdio.h #include stdlib.h @@ -218,7 +218,7 @@ return NULL; } - stream = php_stream_fopen_from_fd(fd, mode); + stream = php_stream_fopen_from_fd(fd, mode, NULL); if (stream == NULL) { close(fd); } Index: php4/main/php_streams.h diff -u php4/main/php_streams.h:1.76 php4/main/php_streams.h:1.77 --- php4/main/php_streams.h:1.76Thu Feb 27 14:10:23 2003 +++ php4/main/php_streams.h Tue Mar 18 18:37:54 2003 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: php_streams.h,v 1.76 2003/02/27 19:10:23 wez Exp $ */ +/* $Id: php_streams.h,v 1.77 2003/03/18 23:37:54 wez Exp $ */ #ifndef PHP_STREAMS_H #define PHP_STREAMS_H @@ -64,7 +64,7 @@ #define php_stream_fopen_with_path_rel(filename, mode, path, opened, options) _php_stream_fopen_with_path((filename), (mode), (path), (opened), (options) STREAMS_REL_CC TSRMLS_CC) -#define php_stream_fopen_from_fd_rel(fd, mode) _php_stream_fopen_from_fd((fd), (mode) STREAMS_REL_CC TSRMLS_CC) +#define php_stream_fopen_from_fd_rel(fd, mode, persistent_id) _php_stream_fopen_from_fd((fd), (mode), (persistent_id) STREAMS_REL_CC TSRMLS_CC) #define php_stream_fopen_from_file_rel(file, mode) _php_stream_fopen_from_file((file), (mode) STREAMS_REL_CC TSRMLS_CC) #define php_stream_fopen_from_pipe_rel(file, mode) _php_stream_fopen_from_pipe((file), (mode) STREAMS_REL_CC TSRMLS_CC) @@ -436,6 +436,9 @@ /* don't apply open_basedir checks */ #define STREAM_DISABLE_OPEN_BASEDIR1024 + +/* get (or create) a persistent version of the stream */ +#define STREAM_OPEN_PERSISTENT 2048 /* Antique - no longer has meaning */ #define IGNORE_URL_WIN 0 Index: php4/main/streams/php_stream_plain_wrapper.h diff -u php4/main/streams/php_stream_plain_wrapper.h:1.2 php4/main/streams/php_stream_plain_wrapper.h:1.3 --- php4/main/streams/php_stream_plain_wrapper.h:1.2Wed Feb 19 03:40:19 2003 +++ php4/main/streams/php_stream_plain_wrapper.hTue Mar 18 18:37:54 2003 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: php_stream_plain_wrapper.h,v 1.2 2003/02/19 08:40:19 sniper Exp $ */ +/* $Id: php_stream_plain_wrapper.h,v 1.3 2003/03/18 23:37:54 wez Exp $ */ /* definitions for the plain files wrapper */ @@ -33,8 +33,8 @@ PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STREAMS_DC TSRMLS_DC); #define php_stream_fopen_from_file(file, mode) _php_stream_fopen_from_file((file), (mode) STREAMS_CC TSRMLS_CC) -PHPAPI php_stream *_php_stream_fopen_from_fd(int fd, const char *mode STREAMS_DC TSRMLS_DC); -#define php_stream_fopen_from_fd(fd, mode) _php_stream_fopen_from_fd((fd), (mode) STREAMS_CC TSRMLS_CC) +PHPAPI php_stream *_php_stream_fopen_from_fd(int fd, const char *mode, const char *persistent_id STREAMS_DC TSRMLS_DC); +#define php_stream_fopen_from_fd(fd, mode, persistent_id) _php_stream_fopen_from_fd((fd), (mode), (persistent_id) STREAMS_CC TSRMLS_CC) PHPAPI php_stream *_php_stream_fopen_from_pipe(FILE *file, const char *mode STREAMS_DC TSRMLS_DC); #define php_stream_fopen_from_pipe(file, mode) _php_stream_fopen_from_pipe((file), (mode) STREAMS_CC TSRMLS_CC) Index: php4/main/streams/plain_wrapper.c diff -u php4/main/streams/plain_wrapper.c:1.11 php4/main/streams/plain_wrapper.c:1.12 --- php4/main/streams/plain_wrapper.c:1.11 Tue Mar 18 11:40:29 2003 +++ php4/main/streams/plain_wrapper.c Tue Mar 18 18:37:54 2003
[PHP-CVS] cvs: php4 /ext/standard php_fopen_wrapper.c
iliaa Fri Feb 28 12:26:28 2003 EDT Modified files: /php4/ext/standard php_fopen_wrapper.c Log: Fixed compiler warnings. Index: php4/ext/standard/php_fopen_wrapper.c diff -u php4/ext/standard/php_fopen_wrapper.c:1.34 php4/ext/standard/php_fopen_wrapper.c:1.35 --- php4/ext/standard/php_fopen_wrapper.c:1.34 Thu Feb 20 15:05:31 2003 +++ php4/ext/standard/php_fopen_wrapper.c Fri Feb 28 12:26:28 2003 @@ -17,7 +17,7 @@ | Hartmut Holzgraefe [EMAIL PROTECTED] | +--+ */ -/* $Id: php_fopen_wrapper.c,v 1.34 2003/02/20 20:05:31 pollita Exp $ */ +/* $Id: php_fopen_wrapper.c,v 1.35 2003/02/28 17:26:28 iliaa Exp $ */ #include stdio.h #include stdlib.h @@ -129,14 +129,14 @@ p = php_strtok_r(filterlist, |, token); while (p) { if (read_chain) { - if (temp_filter = php_stream_filter_create(p, , 0, php_stream_is_persistent(stream) TSRMLS_CC)) { + if ((temp_filter = php_stream_filter_create(p, , 0, php_stream_is_persistent(stream) TSRMLS_CC))) { php_stream_filter_append(stream-readfilters, temp_filter); } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, Unable to create filter (%s)\n, p); } } if (write_chain) { - if (temp_filter = php_stream_filter_create(p, , 0, php_stream_is_persistent(stream) TSRMLS_CC)) { + if ((temp_filter = php_stream_filter_create(p, , 0, php_stream_is_persistent(stream) TSRMLS_CC))) { php_stream_filter_append(stream-writefilters, temp_filter); } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, Unable to create filter (%s)\n, p); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php4 /ext/standard php_fopen_wrapper.c
pollita Tue Feb 18 01:10:17 2003 EDT Modified files: /php4/ext/standard php_fopen_wrapper.c Log: Introduce //filter target to php: wrapper to allow inline application of filters during fopen() style opperations Index: php4/ext/standard/php_fopen_wrapper.c diff -u php4/ext/standard/php_fopen_wrapper.c:1.32 php4/ext/standard/php_fopen_wrapper.c:1.33 --- php4/ext/standard/php_fopen_wrapper.c:1.32 Thu Feb 13 08:43:37 2003 +++ php4/ext/standard/php_fopen_wrapper.c Tue Feb 18 01:10:14 2003 @@ -17,7 +17,7 @@ | Hartmut Holzgraefe [EMAIL PROTECTED] | +--+ */ -/* $Id: php_fopen_wrapper.c,v 1.32 2003/02/13 13:43:37 wez Exp $ */ +/* $Id: php_fopen_wrapper.c,v 1.33 2003/02/18 06:10:14 pollita Exp $ */ #include stdio.h #include stdlib.h @@ -122,10 +122,36 @@ NULL /* set_option */ }; +static void php_stream_apply_filter_list(php_stream *stream, char *filterlist, int +read_chain, int write_chain TSRMLS_DC) { + char *p, *token; + php_stream_filter *temp_filter; + + p = php_strtok_r(filterlist, |, token); + while (p) { + if (read_chain) { + if (temp_filter = php_stream_filter_create(p, , 0, +php_stream_is_persistent(stream) TSRMLS_CC)) { + php_stream_filter_append(stream-readfilters, +temp_filter); + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Unable to +create filter (%s)\n, p); + } + } + if (write_chain) { + if (temp_filter = php_stream_filter_create(p, , 0, +php_stream_is_persistent(stream) TSRMLS_CC)) { + php_stream_filter_append(stream-writefilters, +temp_filter); + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Unable to +create filter (%s)\n, p); + } + } + p = php_strtok_r(NULL, |, token); + } +} + + php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC) { int fd = -1; php_stream * stream = NULL; + char *p, *token, *pathdup; if (!strncasecmp(path, php://, 6)) path += 6; @@ -151,6 +177,36 @@ if (stream == NULL) close(fd); } + + if (!strncasecmp(path, filter/, 7)) { + pathdup = estrndup(path + 6, strlen(path + 6)); + p = strstr(pathdup, /resource=); + if (!p) { + php_error_docref(NULL TSRMLS_CC, E_ERROR, No URL resource +specified.); + efree(pathdup); + return NULL; + } + if (!(stream = php_stream_open_wrapper(p + 10, mode, options, +opened_path))) { + efree(pathdup); + return NULL; + } + + *p = '\0'; + + p = php_strtok_r(pathdup + 1, /, token); + while (p) { + if (!strncasecmp(p, read=, 5)) { + php_stream_apply_filter_list(stream, p + 5, 1, 0 +TSRMLS_CC); + } else if (!strncasecmp(p, write=, 6)) { + php_stream_apply_filter_list(stream, p + 6, 0, 1 +TSRMLS_CC); + } else { + php_stream_apply_filter_list(stream, p, 1, 1 +TSRMLS_CC); + } + p = php_strtok_r(NULL, /, token); + } + efree(pathdup); + } + return stream; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php4 /ext/standard php_fopen_wrapper.c
wez Thu Feb 13 08:43:38 2003 EDT Modified files: /php4/ext/standard php_fopen_wrapper.c Log: Use FILE*-less implementation for php://(stdin|stdout|stderr) Index: php4/ext/standard/php_fopen_wrapper.c diff -u php4/ext/standard/php_fopen_wrapper.c:1.31 php4/ext/standard/php_fopen_wrapper.c:1.32 --- php4/ext/standard/php_fopen_wrapper.c:1.31 Tue Dec 31 11:07:51 2002 +++ php4/ext/standard/php_fopen_wrapper.c Thu Feb 13 08:43:37 2003 @@ -17,7 +17,7 @@ | Hartmut Holzgraefe [EMAIL PROTECTED] | +--+ */ -/* $Id: php_fopen_wrapper.c,v 1.31 2002/12/31 16:07:51 sebastian Exp $ */ +/* $Id: php_fopen_wrapper.c,v 1.32 2003/02/13 13:43:37 wez Exp $ */ #include stdio.h #include stdlib.h @@ -124,7 +124,7 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC) { - FILE * fp = NULL; + int fd = -1; php_stream * stream = NULL; if (!strncasecmp(path, php://, 6)) @@ -139,17 +139,17 @@ } if (!strcasecmp(path, stdin)) { - fp = fdopen(dup(STDIN_FILENO), mode); + fd = dup(STDIN_FILENO); } else if (!strcasecmp(path, stdout)) { - fp = fdopen(dup(STDOUT_FILENO), mode); + fd = dup(STDOUT_FILENO); } else if (!strcasecmp(path, stderr)) { - fp = fdopen(dup(STDERR_FILENO), mode); + fd = dup(STDERR_FILENO); } - if (fp) { - stream = php_stream_fopen_from_file(fp, mode); + if (fd) { + stream = php_stream_fopen_from_fd(fd, mode); if (stream == NULL) - fclose(fp); + close(fd); } return stream; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php4 /ext/standard php_fopen_wrapper.c /main SAPI.c
hholzgraThu Nov 21 05:29:12 2002 EDT Modified files: /php4/main SAPI.c /php4/ext/standard php_fopen_wrapper.c Log: the apache 1.x sapi read_posts tests for SG(read_post_bytes) being counted up, so lets make it happy although this value is not really needed in these cases ... Index: php4/main/SAPI.c diff -u php4/main/SAPI.c:1.156 php4/main/SAPI.c:1.157 --- php4/main/SAPI.c:1.156 Sun Nov 17 19:59:23 2002 +++ php4/main/SAPI.cThu Nov 21 05:29:11 2002 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: SAPI.c,v 1.156 2002/11/18 00:59:23 gschlossnagle Exp $ */ +/* $Id: SAPI.c,v 1.157 2002/11/21 10:29:11 hholzgra Exp $ */ #include ctype.h #include sys/stat.h @@ -390,8 +390,10 @@ if(sapi_module.read_post) { /* make sure we've consumed all request input data */ char dummy[SAPI_POST_BLOCK_SIZE]; - while(sapi_module.read_post(dummy, sizeof(dummy)-1 TSRMLS_CC) 0) { - /* empty loop body */ + int read_bytes; + + while((read_bytes = sapi_module.read_post(dummy, +sizeof(dummy)-1 TSRMLS_CC)) 0) { + SG(read_post_bytes) += read_bytes; } } } Index: php4/ext/standard/php_fopen_wrapper.c diff -u php4/ext/standard/php_fopen_wrapper.c:1.29 php4/ext/standard/php_fopen_wrapper.c:1.30 --- php4/ext/standard/php_fopen_wrapper.c:1.29 Tue Nov 12 13:29:11 2002 +++ php4/ext/standard/php_fopen_wrapper.c Thu Nov 21 05:29:11 2002 @@ -17,7 +17,7 @@ | Hartmut Holzgraefe [EMAIL PROTECTED] | +--+ */ -/* $Id: php_fopen_wrapper.c,v 1.29 2002/11/12 18:29:11 hholzgra Exp $ */ +/* $Id: php_fopen_wrapper.c,v 1.30 2002/11/21 10:29:11 hholzgra Exp $ */ #include stdio.h #include stdlib.h @@ -96,6 +96,7 @@ } } + SG(read_post_bytes) += read_bytes; return read_bytes; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php4 /ext/standard php_fopen_wrapper.c /main SAPI.c main.c php_content_types.c php_globals.h
hholzgraMon Oct 21 12:41:07 2002 EDT Modified files: /php4/main SAPI.c main.c php_content_types.c php_globals.h /php4/ext/standard php_fopen_wrapper.c Log: some changes to how request input data (Content-Lenght 0) is handled - webdav-specific stuff removed (should be handled using httpd.conf LIMIT or equivalents) - always_populate_raw_post_data now working on any method, not just POST (and webdav methods with allow_webdav_methods), when Content-Length is greater zero - raw input data is also available using php://input stream, this way one doesn't have to care about memory_limit - input data is now always consumed (although maybe ignored, this fixes we had withproblems with keep-alive connections @ raw POST data is now available as php://input stream (hartmut) Index: php4/main/SAPI.c diff -u php4/main/SAPI.c:1.150 php4/main/SAPI.c:1.151 --- php4/main/SAPI.c:1.150 Sat Sep 7 21:06:29 2002 +++ php4/main/SAPI.cMon Oct 21 12:41:06 2002 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: SAPI.c,v 1.150 2002/09/08 01:06:29 yohgaki Exp $ */ +/* $Id: SAPI.c,v 1.151 2002/10/21 16:41:06 hholzgra Exp $ */ #include ctype.h #include sys/stat.h @@ -128,7 +128,7 @@ char *content_type = estrndup(SG(request_info).content_type, content_type_length); char *p; char oldchar=0; - void (*post_reader_func)(TSRMLS_D); + void (*post_reader_func)(TSRMLS_D) = NULL; /* dedicated implementation for increased performance: @@ -159,7 +159,6 @@ return; } SG(request_info).post_entry = NULL; - post_reader_func = sapi_module.default_post_reader; } if (oldchar) { *(p-1) = oldchar; @@ -169,10 +168,10 @@ if(post_reader_func) { post_reader_func(TSRMLS_C); + } - if(PG(always_populate_raw_post_data) sapi_module.default_post_reader) { - sapi_module.default_post_reader(TSRMLS_C); - } + if(PG(always_populate_raw_post_data) sapi_module.default_post_reader) { + sapi_module.default_post_reader(TSRMLS_C); } } @@ -282,6 +281,7 @@ SAPI_API void sapi_activate(TSRMLS_D) { void (*post_reader_func)(TSRMLS_D); + zend_llist_init(SG(sapi_headers).headers, sizeof(sapi_header_struct), (void (*)(void *)) sapi_free_header, 0); SG(sapi_headers).send_default_content_type = 1; @@ -306,39 +306,34 @@ } SG(rfc1867_uploaded_files) = NULL; + /* handle request mehtod */ if (SG(server_context)) { - if ( SG(request_info).request_method - (!strcmp(SG(request_info).request_method, POST) - || (PG(allow_webdav_methods) -(!strcmp(SG(request_info).request_method, PROPFIND) - || !strcmp(SG(request_info).request_method, PROPPATCH) - || !strcmp(SG(request_info).request_method, MKCOL) - || !strcmp(SG(request_info).request_method, PUT) - || !strcmp(SG(request_info).request_method, MOVE) - || !strcmp(SG(request_info).request_method, COPY) - || !strcmp(SG(request_info).request_method, LOCK) { - if (!SG(request_info).content_type) { + if ( SG(request_info).request_method) { + if(!strcmp(SG(request_info).request_method, POST) + (SG(request_info).content_type)) { + /* HTTP POST - may contain form data to be read into +variables + depending on content type given + */ + sapi_read_post_data(TSRMLS_C); + } else { + /* any other method with content payload will fill + $HTTP_RAW_POST_DATA if enabled by +always_populate_raw_post_data + it is up to the webserver to decide whether to +allow a method or not + */ SG(request_info).content_type_dup = NULL; if(PG(always_populate_raw_post_data)) { - SG(request_info).post_entry = NULL; - post_reader_func = sapi_module.default_post_reader; - - if(post_reader_func) { - post_reader_func(TSRMLS_C); - -