Here are the diffs Rasmus asked for on the three internal files that the
internals group would be concerned about (main/php.h, main/main.c,
main/rfc1867.c). These diffs were done on 4.3.2 code. If you all feel
this is worthy of inclusion, I can construct a CVS diff as directed by
README.SUBMITTING_PATCH as well as submit the five associated functions
as a PEAR module to the PEAR group.
There seems to be quite a bit of demand for this functionality. When I
first researched this functionality, there were numerous discussions in
PHP forums with many people wanting a file upload status bar. I have
also received several emails from people who saw my post and are dying
to a source patch, but I couldn't give them one because I didn't have it
working with 4.3.2 yet. So it seems to me that there is quite a bit of
demand to add this feature.
Here are some questions I have:
1. Will you want to use #ifdef with this additional code?
2. Is there a security risk since I am taking the value of the uploaded
hidden ID and appending it as part of a filename? If so, what do you
recommend I do to fix that problem?
3. Are there any other changes you would like me to make?
I can give a working URL that demonstrates this process to those who
email me and ask. I just don't want to broadcast it to the public list.
:-)
--David
On Tue, 20 May 2003, Rasmus Lerdorf wrote:
>
> We're not interested in the Javascript or HTML parts of this
> stuff, but if
> you could post a diff of the changes you made to the core
> file upload code
> to implement the status functions we can take a look. The
> Javascript and
> HTML that makes use of these hooks fit better as a PEAR module.
>
> -Rasmus
>
-----=+=-----
David Enderson
Programmer
Digital IMS
402.437.0137
[EMAIL PROTECTED]
--- php-4.3.2/main/php.h Sat Apr 19 13:35:51 2003
+++ php-4.3.2-status/main/php.h Wed Jul 16 12:37:43 2003
@@ -411,6 +411,16 @@
#endif
#endif /* !XtOffsetOf */
+/* file upload status global structure definition */
+typedef struct _fus_globals_struct {
+ char *temp_file_dir;
+ char *temp_file_prefix;
+ char *hidden_variable_name;
+} fus_globals_struct;
+fus_globals_struct fus_globals;
+/* FUSG stands for: File Upload Status Globals. */
+#define FUSG(v) (fus_globals.v)
+
#endif
/*
--- php-4.3.2/main/main.c Wed May 21 17:54:38 2003
+++ php-4.3.2-status/main/main.c Wed Jul 16 12:26:07 2003
@@ -368,6 +368,11 @@
STD_PHP_INI_BOOLEAN("allow_url_fopen", "1", PHP_INI_ALL,
OnUpdateBool, allow_url_fopen,
php_core_globals, core_globals)
STD_PHP_INI_BOOLEAN("always_populate_raw_post_data", "0",
PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool,
always_populate_raw_post_data, php_core_globals, core_globals)
+ /* file upload status settings */
+ STD_PHP_INI_ENTRY("file_upload_status.temp_file_dir", "/tmp", PHP_INI_ALL,
OnUpdateString, temp_file_dir, fus_globals_struct, fus_globals)
+ STD_PHP_INI_ENTRY("file_upload_status.temp_file_prefix", "file_upload_status_",
PHP_INI_ALL, OnUpdateString, temp_file_prefix, fus_globals_struct, fus_globals)
+ STD_PHP_INI_ENTRY("file_upload_status.hidden_variable_name",
"file_upload_status_uniqueid", PHP_INI_ALL, OnUpdateString, hidden_variable_name,
fus_globals_struct, fus_globals)
+
PHP_INI_END()
/* }}} */
--- php-4.3.2/main/rfc1867.c Fri May 23 16:37:16 2003
+++ php-4.3.2-status/main/rfc1867.c Wed Jul 16 11:44:31 2003
@@ -693,6 +693,10 @@
zval *array_ptr = (zval *) arg;
FILE *fp;
zend_llist header;
+ /* file upload status variables */
+ zend_bool file_upload_status = 0;
+ char *file_upload_status_filename = NULL;
+ FILE *file_upload_status_fp;
if (SG(request_info).content_length > SG(post_max_size)) {
sapi_module.sapi_error(E_WARNING, "POST Content-Length of %d bytes
exceeds the limit of %d bytes", SG(request_info).content_length, SG(post_max_size));
@@ -794,7 +798,6 @@
/* Normal form variable, safe to read all data into memory */
if (!filename && param) {
-
char *value = multipart_buffer_read_body(mbuff
TSRMLS_CC);
if (!value) {
@@ -805,6 +808,13 @@
if (!strcasecmp(param, "MAX_FILE_SIZE")) {
max_file_size = atol(value);
}
+
+ /* Check for upload status hidden variable */
+ if (strcasecmp(param, FUSG(hidden_variable_name)) ==
0) {
+ file_upload_status = 1;
+ file_upload_status_filename =
emalloc(strlen(FUSG(temp_file_dir)) + strlen(FUSG(temp_file_prefix)) + strlen(value) +
2);
+ sprintf(file_upload_status_filename,
"%s/%s%s", FUSG(temp_file_dir), FUSG(temp_file_prefix), value);
+ }
efree(param);
efree(value);
@@ -873,8 +883,22 @@
total_bytes += wlen;
}
}
+
+ /* Write file upload status to file */
+ if (file_upload_status) {
+ file_upload_status_fp =
fopen(file_upload_status_filename, "w");
+ fprintf(file_upload_status_fp, "%li %li",
SG(read_post_bytes), SG(request_info).content_length);
+ fclose(file_upload_status_fp);
+ }
}
fclose(fp);
+
+ /* Write file upload "complete" status to file */
+ if (file_upload_status) {
+ file_upload_status_fp =
fopen(file_upload_status_filename, "w");
+ fprintf(file_upload_status_fp, "-2 -2");
+ fclose(file_upload_status_fp);
+ }
#ifdef DEBUG_FILE_UPLOAD
if(strlen(filename) > 0 && total_bytes == 0) {
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php