sangoku Posted March 21, 2010 Share Posted March 21, 2010 Hy i am a tidiness freak, so naturally i don't want users to upload the same file over and over again XD... So how could i prevent them from doing it except to check the crc value of files and compare them,,, i was thinking like making a string which has crc of the file and file name in it and if any of those matches then i would trigger the error... any other ideas? i am thinking of making a md from the name for the easing of comparing. Is it possible to generate a integer from those values or some other trick would do it to, i am totally open to all suggestions.... Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/ Share on other sites More sharing options...
inversesoft123 Posted March 21, 2010 Share Posted March 21, 2010 $existname = "../files/folder/$userid/".$hashedfilename; //md5 hashed if(file_exists($existname)) { //// crossed show error message } Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029510 Share on other sites More sharing options...
JAY6390 Posted March 21, 2010 Share Posted March 21, 2010 Personally I'd keep a list of hashes for current files in a database, and then search the db for a matching hash. That, or prefix each file with their hash, and then search for files starting with that hash in your file folder Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029520 Share on other sites More sharing options...
sangoku Posted March 21, 2010 Author Share Posted March 21, 2010 if it were that simple.... the files are distributed across different folders... and the files can be pictures zip, exe, swf... But what most concerning is there are TONS of the same picture just in different format like twitty.png twitty.jpeg and all are virtually the same picture just saved under different name. BUT that was not the main point the main point i need a way to preprocess the controlling value inside the client browser, can jscript generate the control values i need like the a file and see its crc/md5 or a string or would i have to implement that on the server(which i would rather not do.... server load ) and i am planing to keep the values in a db normally.... disk seeks are slow in big folders Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029522 Share on other sites More sharing options...
JAY6390 Posted March 21, 2010 Share Posted March 21, 2010 Pretty sure you will need to do the processing server side unfortunately (although I'm no JS expert). With pictures in different formats you aren't going to be able to tell if they're the same since they're saved differently, and as such have different data entirely. You could "outsmart" this however by logging all image file widths and heights, and having a script search for pictures of duplicate sizes (or aspect ratio's if you want to get really clever with it and they've sometimes been resized) and display them for you to pick off the duplicates Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029524 Share on other sites More sharing options...
sangoku Posted March 21, 2010 Author Share Posted March 21, 2010 !.o GOOOd thinking congrats... that is a good idea... I will look over the www to see if there is a possibility to generate those values by j script... that wil be a loooooong string i am against there.... Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029527 Share on other sites More sharing options...
sangoku Posted March 21, 2010 Author Share Posted March 21, 2010 ~.~ Found it XD here is the script... i now only have to figure out how to apply it on the file.... /** * * MD5 (Message-Digest Algorithm) * http://www.webtoolkit.info/ * **/ var MD5 = function (string) { function RotateLeft(lValue, iShiftBits) { return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits)); } function AddUnsigned(lX,lY) { var lX4,lY4,lX8,lY8,lResult; lX8 = (lX & 0x80000000); lY8 = (lY & 0x80000000); lX4 = (lX & 0x40000000); lY4 = (lY & 0x40000000); lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF); if (lX4 & lY4) { return (lResult ^ 0x80000000 ^ lX8 ^ lY8); } if (lX4 | lY4) { if (lResult & 0x40000000) { return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); } else { return (lResult ^ 0x40000000 ^ lX8 ^ lY8); } } else { return (lResult ^ lX8 ^ lY8); } } function F(x,y,z) { return (x & y) | ((~x) & z); } function G(x,y,z) { return (x & z) | (y & (~z)); } function H(x,y,z) { return (x ^ y ^ z); } function I(x,y,z) { return (y ^ (x | (~z))); } function FF(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; function GG(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; function HH(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; function II(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; function ConvertToWordArray(string) { var lWordCount; var lMessageLength = string.length; var lNumberOfWords_temp1=lMessageLength + 8; var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64; var lNumberOfWords = (lNumberOfWords_temp2+1)*16; var lWordArray=Array(lNumberOfWords-1); var lBytePosition = 0; var lByteCount = 0; while ( lByteCount < lMessageLength ) { lWordCount = (lByteCount-(lByteCount % 4))/4; lBytePosition = (lByteCount % 4)*8; lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition)); lByteCount++; } lWordCount = (lByteCount-(lByteCount % 4))/4; lBytePosition = (lByteCount % 4)*8; lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition); lWordArray[lNumberOfWords-2] = lMessageLength<<3; lWordArray[lNumberOfWords-1] = lMessageLength>>>29; return lWordArray; }; function WordToHex(lValue) { var WordToHexValue="",WordToHexValue_temp="",lByte,lCount; for (lCount = 0;lCount<=3;lCount++) { lByte = (lValue>>>(lCount*) & 255; WordToHexValue_temp = "0" + lByte.toString(16); WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2); } return WordToHexValue; }; function Utf8Encode(string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; }; var x=Array(); var k,AA,BB,CC,DD,a,b,c,d; var S11=7, S12=12, S13=17, S14=22; var S21=5, S22=9 , S23=14, S24=20; var S31=4, S32=11, S33=16, S34=23; var S41=6, S42=10, S43=15, S44=21; string = Utf8Encode(string); x = ConvertToWordArray(string); a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476; for (k=0;k<x.length;k+=16) { AA=a; BB=b; CC=c; DD=d; a=FF(a,b,c,d,x[k+0], S11,0xD76AA478); d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756); c=FF(c,d,a,b,x[k+2], S13,0x242070DB); b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE); a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF); d=FF(d,a,b,c,x[k+5], S12,0x4787C62A); c=FF(c,d,a,b,x[k+6], S13,0xA8304613); b=FF(b,c,d,a,x[k+7], S14,0xFD469501); a=FF(a,b,c,d,x[k+8], S11,0x698098D8); d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF); c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1); b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE); a=FF(a,b,c,d,x[k+12],S11,0x6B901122); d=FF(d,a,b,c,x[k+13],S12,0xFD987193); c=FF(c,d,a,b,x[k+14],S13,0xA679438E); b=FF(b,c,d,a,x[k+15],S14,0x49B40821); a=GG(a,b,c,d,x[k+1], S21,0xF61E2562); d=GG(d,a,b,c,x[k+6], S22,0xC040B340); c=GG(c,d,a,b,x[k+11],S23,0x265E5A51); b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA); a=GG(a,b,c,d,x[k+5], S21,0xD62F105D); d=GG(d,a,b,c,x[k+10],S22,0x2441453); c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681); b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8); a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6); d=GG(d,a,b,c,x[k+14],S22,0xC33707D6); c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87); b=GG(b,c,d,a,x[k+8], S24,0x455A14ED); a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905); d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8); c=GG(c,d,a,b,x[k+7], S23,0x676F02D9); b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A); a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942); d=HH(d,a,b,c,x[k+8], S32,0x8771F681); c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122); b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C); a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44); d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9); c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60); b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70); a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6); d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA); c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085); b=HH(b,c,d,a,x[k+6], S34,0x4881D05); a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039); d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5); c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8); b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665); a=II(a,b,c,d,x[k+0], S41,0xF4292244); d=II(d,a,b,c,x[k+7], S42,0x432AFF97); c=II(c,d,a,b,x[k+14],S43,0xAB9423A7); b=II(b,c,d,a,x[k+5], S44,0xFC93A039); a=II(a,b,c,d,x[k+12],S41,0x655B59C3); d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92); c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D); b=II(b,c,d,a,x[k+1], S44,0x85845DD1); a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F); d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0); c=II(c,d,a,b,x[k+6], S43,0xA3014314); b=II(b,c,d,a,x[k+13],S44,0x4E0811A1); a=II(a,b,c,d,x[k+4], S41,0xF7537E82); d=II(d,a,b,c,x[k+11],S42,0xBD3AF235); c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB); b=II(b,c,d,a,x[k+9], S44,0xEB86D391); a=AddUnsigned(a,AA); b=AddUnsigned(b,BB); c=AddUnsigned(c,CC); d=AddUnsigned(d,DD); } var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d); return temp.toLowerCase(); } Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029531 Share on other sites More sharing options...
JAY6390 Posted March 21, 2010 Share Posted March 21, 2010 That is the problem. JavaScript spefically doesn't allow you to access the file system (for user security reasons) so you won't actually be able to check the md5 of the file. That function is used to hash passwords etc that are in text fields. The same does not apply to file upload fields. Your best bet would be to get this done with Java instead of JavaScript, but would require the user has Java installed and allows the applet Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029532 Share on other sites More sharing options...
sangoku Posted March 21, 2010 Author Share Posted March 21, 2010 That wont do at all :'( Q.Q Well i suppose this one is good for securing the users password while sending it XD (ye, ye i am a glass half full type) Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029534 Share on other sites More sharing options...
JAY6390 Posted March 21, 2010 Share Posted March 21, 2010 it MIGHT also be possible with flash action script too, although I'm not certain of it Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029536 Share on other sites More sharing options...
sangoku Posted March 21, 2010 Author Share Posted March 21, 2010 I read about it.. i don't like it... But is there a way to intercept the file information before the upload begins ? Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029538 Share on other sites More sharing options...
JAY6390 Posted March 21, 2010 Share Posted March 21, 2010 Flash and Java would do this, but other than that I'm not sure Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029539 Share on other sites More sharing options...
sangoku Posted March 21, 2010 Author Share Posted March 21, 2010 I will see if i can dig everything out untill now i only worked with the file already in the temp uload dir.... Quote Link to comment https://forums.phpfreaks.com/topic/195996-how-to-keep-duplicate-files-out/#findComment-1029544 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.