I have added md5sum() function to the standard extension. It returns the md5 hash of given filename.
I think this is useful. Can you merge it in the main distribution? -- Alessandro 'Asterix75' Astarita <[EMAIL PROTECTED]> Web site: http://asterix75.capri.it E-commerce software: http://www.alfacomm.it/
diff -urN php4-200111121500.orig/ext/standard/basic_functions.c php4-200111121500/ext/standard/basic_functions.c --- php4-200111121500.orig/ext/standard/basic_functions.c Thu Nov 15 15:59:16 2001 +++ php4-200111121500/ext/standard/basic_functions.c Thu Nov 15 16:00:38 2001 @@ -282,6 +282,7 @@ PHP_FE(htmlentities, NULL) PHP_FE(get_html_translation_table, NULL) PHP_NAMED_FE(md5,php_if_md5, NULL) + PHP_NAMED_FE(md5sum,php_if_md5sum, NULL) PHP_NAMED_FE(crc32,php_if_crc32, NULL) PHP_FE(iptcparse, NULL) diff -urN php4-200111121500.orig/ext/standard/md5.c php4-200111121500/ext/standard/md5.c --- php4-200111121500.orig/ext/standard/md5.c Thu Nov 15 15:59:17 2001 +++ php4-200111121500/ext/standard/md5.c Thu Nov 15 16:00:39 2001 @@ -20,6 +20,7 @@ /* * md5.c - Copyright 1997 Lachlan Roche + * md5sum() added by Alessandro Astarita <[EMAIL PROTECTED]> */ #include <stdio.h> @@ -35,8 +36,6 @@ char md5str[33]; PHP_MD5_CTX context; unsigned char digest[16]; - int i; - char *r; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) { WRONG_PARAM_COUNT; @@ -47,13 +46,74 @@ PHP_MD5Init(&context); PHP_MD5Update(&context, Z_STRVAL_PP(arg), Z_STRLEN_PP(arg)); PHP_MD5Final(digest, &context); + make_digest(md5str, digest); + RETVAL_STRING(md5str, 1); +} +/* }}} */ + +/* {{{ proto string md5sum(string filename) + Calculate the md5 hash of given filename */ +PHP_NAMED_FUNCTION(php_if_md5sum) +{ + zval **arg; + char md5str[33]; + unsigned char buf[1024]; + unsigned char digest[16]; + PHP_MD5_CTX context; + int n; + FILE *fp; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_string_ex(arg); + + if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(arg), NULL, CHECKUID_CHECK_FILE_AND_DIR))) { + RETURN_FALSE; + } + + if (php_check_open_basedir(Z_STRVAL_PP(arg) TSRMLS_CC)) { + RETURN_FALSE; + } + + if ((fp = VCWD_FOPEN(Z_STRVAL_PP(arg), "rb")) == NULL) { + php_error(E_WARNING, "md5sum(): Unable to open file"); + RETURN_FALSE; + } + + PHP_MD5Init(&context); + + while ((n = fread(buf, 1, sizeof(buf), fp)) > 0) { + PHP_MD5Update(&context, buf, n); + } + + PHP_MD5Final(digest, &context); + + if (ferror(fp)) { + fclose(fp); + RETURN_FALSE; + } + + fclose(fp); + + make_digest(md5str, digest); + + RETVAL_STRING(md5str, 1); +} +/* }}} */ + +static void make_digest(char *md5str, unsigned char *digest) +{ + int i; + char *r; + for (i = 0, r = md5str; i < 16; i++, r += 2) { sprintf(r, "%02x", digest[i]); } + *r = '\0'; - RETVAL_STRING(md5str, 1); } -/* }}} */ /* * The remaining code is the reference MD5 code (md5c.c) from rfc1321 diff -urN php4-200111121500.orig/ext/standard/md5.h php4-200111121500/ext/standard/md5.h --- php4-200111121500.orig/ext/standard/md5.h Thu Nov 15 15:59:17 2001 +++ php4-200111121500/ext/standard/md5.h Thu Nov 15 16:00:41 2001 @@ -57,7 +57,9 @@ void PHP_MD5Init(PHP_MD5_CTX *); void PHP_MD5Update(PHP_MD5_CTX *, const unsigned char *, unsigned int); void PHP_MD5Final(unsigned char[16], PHP_MD5_CTX *); +static void make_digest(char *md5str, unsigned char *digest); PHP_NAMED_FUNCTION(php_if_md5); +PHP_NAMED_FUNCTION(php_if_md5sum); #endif
-- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]