{"id":450,"date":"2015-07-29T10:22:51","date_gmt":"2015-07-29T10:22:51","guid":{"rendered":"f5f8590cd58a54e94377e6ae2eded4d9"},"modified":"2015-07-29T10:22:51","modified_gmt":"2015-07-29T10:22:51","slug":"","status":"publish","type":"post","link":"https:\/\/www.xiaobo.li\/notes\/archives\/450","title":{"rendered":"FastDFS\u76ee\u5f55\u53ca\u6587\u4ef6\u540d\u7684\u4e00\u4e9b\u8d44\u6599"},"content":{"rendered":"<p><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u6839\u636e\u7f51\u4e0a\u7684\u8d44\u6599\uff0c\u4e00\u822c\u5355\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u4e2a\u6570\u4e00\u822c\u9650\u5236\u4e0d\u80fd\u591f\u8d85\u8fc73\u4e07\uff1b\u540c\u6837\u7684\uff0c\u4e00\u4e2a\u76ee\u5f55\u4e0b\u9762\u7684\u76ee\u5f55\u6570\u4e5f\u6700\u597d\u4e0d\u8981\u8d85\u8fc7\u8fd9\u4e2a\u6570\u3002<\/span><\/p>\n<p><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u4f46\u5b9e\u9645\u4e0a\uff0c\u4e3a\u4e86\u5b89\u5168\u8003\u8651\uff0c\u4e00\u822c\u90fd\u4e0d\u8981\u5b58\u50a8\u8fd9\u4e48\u591a\u7684\u5185\u5bb9\u3002<\/span><\/p>\n<p><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u5047\u5b9a\uff0c\u4e00\u4e2a\u76ee\u5f55\u4e0b\u9762\uff0c\u5b58\u50a81000\u4e2a\u6587\u4ef6\uff0c\u6bcf\u4e2a\u6587\u4ef6\u7684\u5e73\u5747\u5927\u5c0f\u4e3a10KB\uff0c\u5219\u5355\u76ee\u5f55\u4e0b\u9762\u53ef\u5b58\u50a8\u7684\u5bb9\u91cf\u662f10MB\u3002\u8fd9\u4e2a\u5bb9\u91cf\u592a\u5c0f\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u591a\u4e2a\u76ee\u5f55\uff0c\u5047\u5b9a\u67091000\u4e2a\u76ee\u5f55\uff0c\u6bcf\u4e2a\u76ee\u5f55\u5b58\u50a810MB\uff0c\u5219\u53ef\u4ee5\u5b58\u50a810GB\u7684\u5185\u5bb9\uff1b\u8fd9\u5bf9\u4e8e\u76ee\u524d\u78c1\u76d8\u7684\u5bb9\u91cf\u6765\u8bf4\uff0c\u5229\u7528\u7387\u8fd8\u662f\u4e0d\u591f\u7684\u3002\u518d\u60f3\u529e\u6cd5\uff0c\u8f6c\u6210\u4e24\u7ea7\u76ee\u5f55\uff0c\u8fd9\u6837\u7684\u8bdd\uff0c\u5c31\u662f\u7b2c\u4e00\u5c42\u76ee\u5f55\u67091000\u4e2a\u5b50\u76ee\u5f55\uff0c\u6bcf\u4e00\u7ea7\u5b50\u76ee\u5f55\u4e0b\u9762\u53c8\u67091000\u7ea7\u7684\u4e8c\u7ea7\u5b50\u76ee\u5f55\uff0c\u6bcf\u4e2a\u4e8c\u7ea7\u5b50\u76ee\u5f55\uff0c\u53ef\u4ee5\u5b58\u50a810MB\u7684\u5185\u5bb9\uff0c\u6b64\u65f6\u5c31\u53ef\u4ee5\u5b58\u50a810T\u7684\u5185\u5bb9\uff0c\u8fd9\u57fa\u672c\u4e0a\u8d85\u8fc7\u4e86\u76ee\u524d\u5355\u673a\u78c1\u76d8\u7684\u5bb9\u91cf\u5927\u5c0f\u4e86\u3002<\/span><\/p>\n<p><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u6240\u4ee5\uff0c\u4f7f\u7528\u4e8c\u7ea7\u5b50\u76ee\u5f55\u7684\u529e\u6cd5\uff0c\u662f\u5e73\u8861\u5b58\u50a8\u6027\u80fd\u548c\u5229\u7528\u5b58\u50a8\u5bb9\u91cf\u7684\u529e\u6cd5\u3002<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\"><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u670d\u52a1\u5668\u6536\u5230\u4e86\u6587\u4ef6\u5185\u5bb9\u540e\uff0c\u5982\u4f55\u9009\u62e9\u8981\u5b58\u50a8\u5728\u54ea\u4e2a\u76ee\u5f55\u4e0b\u5462\uff1f\u8fd9\u4e2a\u9009\u62e9\u8981\u4fdd\u8bc1\u5747\u8861\u6027\uff0c\u5373\u5c3d\u91cf\u4fdd\u8bc1\u6587\u4ef6\u80fd\u591f\u5747\u5300\u5730\u5206\u6563\u5728\u6240\u6709\u7684\u76ee\u5f55\u4e0b\u3002<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u8d1f\u8f7d\u5747\u8861\u6027\u5f88\u91cd\u8981\u7684\u5c31\u662f\u54c8\u5e0c\uff0c\u4f8b\u5982\uff0c\u5728PHP\u4e2d\u5e38\u7528\u7684md5\uff0c\u5176\u8fd4\u56de\u4e00\u4e2a32\u4e2a\u5b57\u7b26\uff0c\u537316\u5b57\u8282\u7684\u8f93\u51fa\uff0c\u5373128\u4f4d\u3002\u54c8\u5e0c\u540e\u8981\u53d8\u6210\u6876\uff0c\u624d\u80fd\u591f\u5206\u5e03\uff0c\u81ea\u7136\u5c31\u6709\u4e86\u5982\u4e0b\u7684\u95ee\u9898\uff1a<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">1- \u5982\u4f55\u5f97\u5230\u54c8\u5e0c\u503c\uff1fmd5\u8fd8\u662fSHA1<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">2- \u54c8\u5e0c\u503c\u5f97\u5230\u540e\uff0c\u5982\u4f55\u6784\u9020\u54c8\u5e0c\u6876<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">3- \u6839\u636e\u6587\u4ef6\u540d\u79f0\u5982\u4f55\u5b9a\u4f4d\u54c8\u5e0c\u6876<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u9996\u5148\u6765\u56de\u7b54\u7b2c3\u4e2a\u95ee\u9898\uff0c\u6839\u636e\u6587\u4ef6\u540d\u79f0\u5982\u4f55\u5b9a\u4f4d\u54c8\u5e0c\u6876\u3002\u5f88\u7b80\u5355\uff0c\u6b64\u65f6\u6211\u4eec\u53ea\u6709\u4e00\u4e2a\u6587\u4ef6\u540d\u79f0\u4f5c\u4e3a\u8f93\u5165\uff0c\u9996\u5148\u8981\u8ba1\u7b97\u54c8\u5e0c\u503c\uff0c\u53ea\u6709\u4e00\u4e2a\u529e\u6cd5\u4e86\uff0c\u5c31\u662f\u6839\u636e\u6587\u4ef6\u540d\u79f0\u6765\u5f97\u5230\u54c8\u5e0c\u503c\u3002\u8fd9\u4e2a\u51fd\u6570\u53ef\u4ee5\u7528\u6574\u4e2a\u6587\u4ef6\u540d\u79f0\u4f5c\u4e3a\u54c8\u5e0c\u7684\u8f93\u5165\uff0c\u4e5f\u53ef\u4ee5\u6839\u636e\u6587\u4ef6\u540d\u79f0\u7684\u4e00\u90e8\u5206\u6765\u5b8c\u6210\u3002\u7ed3\u5408\u4e0a\u9762\u8bf4\u7684\u4e24\u7ea7\u76ee\u5f55\uff0c\u800c\u4e14\u6bcf\u7ea7\u76ee\u5f55\u4e0d\u8981\u8d85\u8fc71000.\u5f88\u7b80\u5355\uff0c\u5982\u679c\u752832\u4f4d\u7684\u5b57\u7b26\u8f93\u51fa\u540e\uff0c\u53ef\u4ee5\u53d6\u51fa\u5b9e\u73b0\u4e0a\u6765\u8bf4\uff0c\u7531\u4e8e\u6587\u4ef6\u4e0a\u4f20\u662f\u9632\u6b62\u552f\u4e00\u6027\uff0c\u6240\u4ee5\u5982\u679c\u6839\u636e\u6587\u4ef6\u5185\u5bb9\u6765\u4ea7\u751f\u54c8\u5e0c\uff0c\u5219\u6bd4\u8f83\u597d\u7684\u529e\u6cd5\u5c31\u662f\u622a\u53d6\u5176\u4e2d\u76844\u4f4d\uff0c\u4f8b\u5982\uff1a<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">md5sum fdfs_storaged.pid<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">52edc4a5890adc59cec82cb60f8af691 fdfs_storaged.pid<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u4e0a\u9762\uff0c\u8fd9\u4e2afdfs_storage.pid\u4e2d\uff0c\u53d6\u51fa\u6700\u524d\u9762\u76844\u4e2a\u5b57\u7b26\uff0c\u537352\u548ced\u3002\u8fd9\u6837\u7684\u8bdd\uff0c\u5047\u598252\u662f\u4e00\u7ea7\u76ee\u5f55\u7684\u540d\u79f0\uff0ced\u662f\u4e8c\u7ea7\u76ee\u5f55\u7684\u540d\u79f0\u3002\u56e0\u4e3a\u6bcf\u4e00\u4e2a\u5b57\u7b26\u670916\u4e2a\u53d6\u503c\uff0c\u6240\u4ee5\u7b2c\u4e00\u7ea7\u76ee\u5f55\u5c31\u670916 * 16 = 256\u4e2a\u3002\u603b\u5171\u5c31\u6709256 * 256 = 65526\u4e2a\u76ee\u5f55\u3002\u5982\u679c\u6bcf\u4e2a\u76ee\u5f55\u4e0b\u9762\u5b58\u653e1000\u4e2a\u6587\u4ef6\uff0c\u6bcf\u4e2a\u6587\u4ef630KB\uff0c\u90fd\u53ef\u4ee5\u67091966G\uff0c\u53732TB\u5de6\u53f3\u3002\u8fd9\u6837\u7684\u8bdd\uff0c\u8db3\u591f\u6211\u4eec\u7528\u597d\u3002\u5982\u679c\u7528\u4e09\u4e2a\u5b57\u7b26\uff0c\u537352e\u4f5c\u4e3a\u4e00\u7ea7\u76ee\u5f55\uff0cdc4\u4f5c\u4e3a\u4e8c\u7ea7\u76ee\u5f55\uff0c\u8fd9\u6837\u5b50\u7684\u76ee\u5f55\u6570\u67094096\uff0c\u592a\u591a\u4e86\u3002\u6240\u4ee5\uff0c\u53d6\u4e8c\u4e2a\u5b57\u7b26\u6bd4\u8f83\u597d\u3002<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u8fd9\u6837\u7684\u8bdd\uff0c\u4e0a\u9762\u7684\u7b2c2\u548c\u7b2c3\u4e2a\u95ee\u9898\u5c31\u89e3\u51b3\u4e86\uff0c\u6839\u636e\u6587\u4ef6\u540d\u79f0\u6765\u5f97\u5230md5\uff0c\u7136\u540e\u53d64\u4e2a\u5b57\u7b26\uff0c\u524d\u9762\u76842\u4e2a\u5b57\u7b26\u4f5c\u4e3a\u4e00\u7ea7\u76ee\u5f55\u540d\u79f0\uff0c\u540e\u9762\u76842\u4e2a\u5b57\u7b26\u4f5c\u4e3a\u4e8c\u7ea7\u76ee\u5f55\u7684\u540d\u79f0\u3002\u670d\u52a1\u5668\u4e0a\uff0c\u4f7f\u7528\u4e00\u4e2a\u4e13\u95e8\u7684\u76ee\u5f55\u6765\u4f5c\u4e3a\u6211\u4eec\u7684\u5b58\u50a8\u6839\u76ee\u5f55\uff0c\u7136\u540e\u4e0b\u9762\u5efa\u7acb\u8fd9\u4e48\u591a\u5b50\u76ee\u5f55\uff0c\u81ea\u7136\u5c31\u5f88\u7b80\u5355\u4e86\u3002<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u8fd9\u4e9b\u76ee\u5f55\u53ef\u4ee5\u5728\u521d\u59cb\u5316\u7684\u65f6\u5019\u521b\u5efa\u51fa\u6765\uff0c\u800c\u4e0d\u7528\u5728\u5b58\u50a8\u6587\u4ef6\u7684\u65f6\u5019\u624d\u5efa\u7acb\u3002<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u4e5f\u8bb8\u4f60\u4f1a\u95ee\uff0c\u4e00\u4e2a\u76ee\u5f55\u5e94\u8be5\u4e0d\u591f\u5427\uff0c\u5b9e\u9645\u4e0a\u5f88\u591a\u7684\u5ec9\u4ef7\u673a\u5668\u4e00\u822c\u90fd\u914d\u7f6e2\u5757\u786c\u76d8\uff0c\u4e00\u5757\u662f\u64cd\u4f5c\u7cfb\u7edf\u76d8\uff0c\u4e00\u5757\u662f\u6570\u636e\u76d8\u3002\u7136\u540e\u8fd9\u4e2a\u6570\u636e\u76d8\u6302\u5728\u4e00\u4e2a\u76ee\u5f55\u4e0b\u9762\uff0c\u4ee5\u8fd9\u4e2a\u76ee\u5f55\u4f5c\u4e3a\u6211\u4eec\u7684\u5b58\u50a8\u6839\u76ee\u5f55\u5c31\u597d\u4e86\u3002\u8fd9\u6837\u4e5f\u53ef\u4ee5\u5f88\u5927\u7a0b\u5ea6\u4e0a\u51cf\u5c11\u8fd0\u7ef4\u7684\u96be\u5ea6\u3002<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u73b0\u5728\u5c31\u5269\u4e0b\u6700\u540e\u4e00\u4e2a\u95ee\u9898\u4e86\uff0c\u5c31\u662f\u4e0a\u4f20\u6587\u4ef6\u65f6\u5019\uff0c\u5982\u4f55\u5206\u914d\u4e00\u4e2a\u552f\u4e00\u7684\u6587\u4ef6\u540d\u79f0\uff0c\u907f\u514d\u540c\u4ee5\u524d\u7684\u6587\u4ef6\u4ea7\u751f\u8986\u76d6\u3002<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u5982\u679c\u6ca1\u6709\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u5f88\u663e\u7136\uff0c\u53ea\u80fd\u591f\u91c7\u7528\u7c7b\u4f3c\u4e8e\u8ba1\u6570\u5668\u7684\u65b9\u5f0f\uff0c\u5373\u4e00\u4e2acounter\uff0c\u6bcf\u6b21\u52a0\u4e00\u4e2a\u6587\u4ef6\u5c31\u589e\u91cf\u3002\u4f46\u8fd9\u6837\u7684\u65b9\u5f0f\u4f1a\u8981\u6c42\u7ef4\u62a4\u4e00\u4e2a\u6301\u4e45\u5316\u7684counter\uff0c\u8fd9\u6837\u6bd4\u8f83\u9ebb\u70e6\u3002\u6700\u597d\u4e0d\u8981\u6709\u5386\u53f2\u72b6\u6001\u7684\u7eaa\u5f55\u3002<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">string md5 ( string $str [, bool $raw_output = false ] )<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">Calculates the MD5 hash of str using the \u00bb RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash.<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">raw_output<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">If the optional raw_output is set to TRUE, then the md5 digest is instead returned in raw binary format with a length of 16.<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">Return Values \u00b6<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">Returns the hash as a 32-character hexadecimal number.<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u4e3a\u4e86\u5c3d\u53ef\u80fd\u5730\u751f\u6210\u552f\u4e00\u7684\u6587\u4ef6\u540d\u79f0\uff0c\u53ef\u4ee5\u4f7f\u7528\u6587\u4ef6\u957f\u5ea6(\u5047\u5982\u662f100MB\u7684\u8bdd\uff0c\u76f8\u5e94\u7684\u6574\u578b\u53ef\u80fd\u4f1a\u662f4\u4e2a\u5b57\u8282\uff0c\u5373\u4e0d\u8d85\u8fc72^32, \u5373uint32_t\uff0c\u53ea\u8981\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u68c0\u67e5\u4e00\u4e0b\u5373\u53ef\uff09\u3002\u4f46\u662f\u957f\u5ea6\u5e76\u4e0d\u80fd\u591f\u4fdd\u8bc1\u552f\u4e00\uff0c\u4e3a\u4e86\u586b\u5145\u5c3d\u53ef\u80fd\u6709\u7528\u7684\u4fe1\u606f\uff0cCRC32\u4e5f\u662f\u5f88\u91cd\u8981\u7684\uff0c\u8fd9\u6837\u4e0b\u8f7d\u7a0b\u5e8f\u540e\uff0c\u4e0d\u7528\u505a\u989d\u5916\u7684\u4ea4\u4e92\u5c31\u53ef\u4ee5\u77e5\u9053\u6587\u4ef6\u7684\u5185\u5bb9\u662f\u5426\u6b63\u786e\u3002\u4e00\u65e6\u53d1\u73b0\u6709\u95ee\u9898\uff0c\u7acb\u9a6c\u8981\u62a5\u8b66\uff0c\u5e76\u4e14\u60f3\u529e\u6cd5\u4fee\u590d\u3002\u8fd9\u6837\u7684\u8bdd\uff0c\u4e0a\u4f20\u7684\u65f6\u5019\u4e5f\u8981\u6ce8\u610f\u5e26\u4e0aCRC32\uff0c\u4ee5\u9632\u6b62\u5728\u7f51\u7edc\u4f20\u8f93\u548c\u5b9e\u9645\u7684\u786c\u76d8\u5b58\u50a8\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u95ee\u9898\uff08\u6587\u4ef6\u7684\u5b8c\u6574\u6027\u81f3\u5173\u91cd\u8981\uff09\u3002\u518d\u52a0\u4e0a\u65f6\u95f4\u6233\uff0c\u5373long\u578b\u768464\u4f4d\uff0c8\u4e2a\u5b57\u8282\u3002\u6700\u540e\u518d\u52a0\u4e0a\u8ba1\u6570\u5668\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u8ba1\u6570\u5668\u7531storage\u63d0\u4f9b\uff0c\u8fd9\u6837\u7684\u8bdd\uff0c\u6574\u4e2a\u7ed3\u6784\u5c31\u662f\uff1alen + crc32 + timestamp + uint32_t = 4 + 4 + 8 + 4 = 20\u4e2a\u5b57\u8282\uff0c\u8fd9\u6837\u751f\u6210\u7684\u6587\u4ef6\u540d\u5c31\u7b97\u505abase64\u8ba1\u7b97\u51fa\u6765\uff0c\u4e5f\u5c31\u4e0d\u662f\u4ec0\u4e48\u5927\u95ee\u9898\u4e86\u3002\u800c\u4e14\uff0c\u52a0\u4e0a\u8ba1\u6570\u5668\uff0c\u6bcf\u79d2\u5185\u53ea\u8981\u5355\u673a\u4e0d\u4e0a\u4f20\u8d85\u8fc71\u4e07\u7684\u6587\u4ef6 \uff0c\u5c31\u90fd\u4e0d\u662f\u95ee\u9898\u4e86\u3002\u8fd9\u4e2a\u8fd8\u662f\u975e\u5e38\u597d\u89e3\u51b3\u7684<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\"><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\"><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\/\/ TODO \u5982\u4f55\u907f\u514d\u6587\u4ef6\u91cd\u590d\u4e0a\u4f20\uff1f md5\u5417\uff1f \u8fd8\u662f\u6587\u4ef6\u7684\u8ba1\u7b97\u53ef\u4ee5\u907f\u514d\u6b64\u95ee\u9898\uff1f\u8fd9\u4e2a\u4fe1\u606f\u5b58\u50a8\u5728tracker\u670d\u52a1\u5668\u4e2d\u5417\uff1f<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/>\n<\/p>\n<p style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">FastDFS\u4e2d\u7ed9\u6211\u4eec\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u4f8b\u5b50\uff0c\u8bf7\u53c2\u8003\u4e0b\u9762\u7684\u4ee3\u7801\uff1a<\/p>\n<p style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\/\/ \u53c2\u8003FastDFS\u7684\u6587\u4ef6\u540d\u79f0\u751f\u6210\u7b97\u6cd5\n<\/p>\n<pre class=\"brush:cpp; toolbar: true; auto-links: true;\">\/**\r\n1 byte: store path index\r\n8 bytes: file size\r\nFDFS_FILE_EXT_NAME_MAX_LEN bytes: file ext name, do not include dot (.)\r\nfile size bytes: file content\r\n**\/\r\nstatic int storage_upload_file(struct fast_task_info *pTask, bool bAppenderFile)\r\n{\r\n StorageClientInfo *pClientInfo;\r\n StorageFileContext *pFileContext;\r\n DisconnectCleanFunc clean_func;\r\n char *p;\r\n char filename[128];\r\n char file_ext_name[FDFS_FILE_PREFIX_MAX_LEN + 1];\r\n int64_t nInPackLen;\r\n int64_t file_offset;\r\n int64_t file_bytes;\r\n int crc32;\r\n int store_path_index;\r\n int result;\r\n int filename_len;\r\n pClientInfo = (StorageClientInfo *)pTask-&gt;arg;\r\n pFileContext = &amp;(pClientInfo-&gt;file_context);\r\n nInPackLen = pClientInfo-&gt;total_length - sizeof(TrackerHeader);\r\n if (nInPackLen &lt; 1 + FDFS_PROTO_PKG_LEN_SIZE +\r\n   FDFS_FILE_EXT_NAME_MAX_LEN)\r\n {\r\n  logError(\"file: \"__FILE__\", line: %d, \" \\\r\n   \"cmd=%d, client ip: %s, package size \" \\\r\n   \"%\"PRId64\" is not correct, \" \\\r\n   \"expect length &gt;= %d\", __LINE__, \\\r\n   STORAGE_PROTO_CMD_UPLOAD_FILE, \\\r\n   pTask-&gt;client_ip, nInPackLen, \\\r\n   1 + FDFS_PROTO_PKG_LEN_SIZE + \\\r\n   FDFS_FILE_EXT_NAME_MAX_LEN);\r\n  return EINVAL;\r\n }\r\n p = pTask-&gt;data + sizeof(TrackerHeader);\r\n store_path_index = *p++;\r\n if (store_path_index == -1)\r\n {\r\n  if ((result=storage_get_storage_path_index( \\\r\n   &amp;store_path_index)) != 0)\r\n  {\r\n   logError(\"file: \"__FILE__\", line: %d, \" \\\r\n    \"get_storage_path_index fail, \" \\\r\n    \"errno: %d, error info: %s\", __LINE__, \\\r\n    result, STRERROR(result));\r\n   return result;\r\n  }\r\n }\r\n else if (store_path_index &lt; 0 || store_path_index &gt;= \\\r\n  g_fdfs_store_paths.count)\r\n {\r\n  logError(\"file: \"__FILE__\", line: %d, \" \\\r\n   \"client ip: %s, store_path_index: %d \" \\\r\n   \"is invalid\", __LINE__, \\\r\n   pTask-&gt;client_ip, store_path_index);\r\n  return EINVAL;\r\n }\r\n file_bytes = buff2long(p);\r\n p += FDFS_PROTO_PKG_LEN_SIZE;\r\n if (file_bytes &lt; 0 || file_bytes != nInPackLen - \\\r\n   (1 + FDFS_PROTO_PKG_LEN_SIZE + \\\r\n    FDFS_FILE_EXT_NAME_MAX_LEN))\r\n {\r\n  logError(\"file: \"__FILE__\", line: %d, \" \\\r\n   \"client ip: %s, pkg length is not correct, \" \\\r\n   \"invalid file bytes: %\"PRId64 \\\r\n   \", total body length: %\"PRId64, \\\r\n   __LINE__, pTask-&gt;client_ip, file_bytes, nInPackLen);\r\n  return EINVAL;\r\n }\r\n memcpy(file_ext_name, p, FDFS_FILE_EXT_NAME_MAX_LEN);\r\n *(file_ext_name + FDFS_FILE_EXT_NAME_MAX_LEN) = '\\0';\r\n p += FDFS_FILE_EXT_NAME_MAX_LEN;\r\n if ((result=fdfs_validate_filename(file_ext_name)) != 0)\r\n {\r\n  logError(\"file: \"__FILE__\", line: %d, \" \\\r\n   \"client ip: %s, file_ext_name: %s \" \\\r\n   \"is invalid!\", __LINE__, \\\r\n   pTask-&gt;client_ip, file_ext_name);\r\n  return result;\r\n }\r\n pFileContext-&gt;calc_crc32 = true;\r\n pFileContext-&gt;calc_file_hash = g_check_file_duplicate;\r\n pFileContext-&gt;extra_info.upload.start_time = g_current_time;\r\n strcpy(pFileContext-&gt;extra_info.upload.file_ext_name, file_ext_name);\r\n storage_format_ext_name(file_ext_name, \\\r\n   pFileContext-&gt;extra_info.upload.formatted_ext_name);\r\n pFileContext-&gt;extra_info.upload.trunk_info.path. \\\r\n    store_path_index = store_path_index;\r\n pFileContext-&gt;extra_info.upload.file_type = _FILE_TYPE_REGULAR;\r\n pFileContext-&gt;sync_flag = STORAGE_OP_TYPE_SOURCE_CREATE_FILE;\r\n pFileContext-&gt;timestamp2log = pFileContext-&gt;extra_info.upload.start_time;\r\n pFileContext-&gt;op = FDFS_STORAGE_FILE_OP_WRITE;\r\n if (bAppenderFile)\r\n {\r\n  pFileContext-&gt;extra_info.upload.file_type |= \\\r\n     _FILE_TYPE_APPENDER;\r\n }\r\n else\r\n {\r\n  if (g_if_use_trunk_file &amp;&amp; trunk_check_size( \\\r\n   TRUNK_CALC_SIZE(file_bytes)))\r\n  {\r\n   pFileContext-&gt;extra_info.upload.file_type |= \\\r\n      _FILE_TYPE_TRUNK;\r\n  }\r\n }\r\n if (pFileContext-&gt;extra_info.upload.file_type &amp; _FILE_TYPE_TRUNK)\r\n {\r\n  FDFSTrunkFullInfo *pTrunkInfo;\r\n  pFileContext-&gt;extra_info.upload.if_sub_path_alloced = true;\r\n  pTrunkInfo = &amp;(pFileContext-&gt;extra_info.upload.trunk_info);\r\n  if ((result=trunk_client_trunk_alloc_space( \\\r\n   TRUNK_CALC_SIZE(file_bytes), pTrunkInfo)) != 0)\r\n  {\r\n   return result;\r\n  }\r\n  clean_func = dio_trunk_write_finish_clean_up;\r\n  file_offset = TRUNK_FILE_START_OFFSET((*pTrunkInfo));\r\n    pFileContext-&gt;extra_info.upload.if_gen_filename = true;\r\n  trunk_get_full_filename(pTrunkInfo, pFileContext-&gt;filename, \\\r\n    sizeof(pFileContext-&gt;filename));\r\n  pFileContext-&gt;extra_info.upload.before_open_callback = \\\r\n     dio_check_trunk_file_when_upload;\r\n  pFileContext-&gt;extra_info.upload.before_close_callback = \\\r\n     dio_write_chunk_header;\r\n  pFileContext-&gt;open_flags = O_RDWR | g_extra_open_file_flags;\r\n }\r\n else\r\n {\r\n  char reserved_space_str[32];\r\n  if (!storage_check_reserved_space_path(g_path_space_list \\\r\n   [store_path_index].total_mb, g_path_space_list \\\r\n   [store_path_index].free_mb - (file_bytes\/FDFS_ONE_MB), \\\r\n   g_avg_storage_reserved_mb))\r\n  {\r\n   logError(\"file: \"__FILE__\", line: %d, \" \\\r\n    \"no space to upload file, \"\r\n    \"free space: %d MB is too small, file bytes: \" \\\r\n    \"%\"PRId64\", reserved space: %s\", \\\r\n    __LINE__, g_path_space_list[store_path_index].\\\r\n    free_mb, file_bytes, \\\r\n    fdfs_storage_reserved_space_to_string_ex( \\\r\n      g_storage_reserved_space.flag, \\\r\n          g_avg_storage_reserved_mb, \\\r\n      g_path_space_list[store_path_index]. \\\r\n      total_mb, g_storage_reserved_space.rs.ratio,\\\r\n      reserved_space_str));\r\n   return ENOSPC;\r\n  }\r\n  crc32 = rand();\r\n  *filename = '\\0';\r\n  filename_len = 0;\r\n  pFileContext-&gt;extra_info.upload.if_sub_path_alloced = false;\r\n  if ((result=storage_get_filename(pClientInfo, \\\r\n   pFileContext-&gt;extra_info.upload.start_time, \\\r\n   file_bytes, crc32, pFileContext-&gt;extra_info.upload.\\\r\n   formatted_ext_name, filename, &amp;filename_len, \\\r\n   pFileContext-&gt;filename)) != 0)\r\n  {\r\n   return result;\r\n  }\r\n  clean_func = dio_write_finish_clean_up;\r\n  file_offset = 0;\r\n    pFileContext-&gt;extra_info.upload.if_gen_filename = true;\r\n  pFileContext-&gt;extra_info.upload.before_open_callback = NULL;\r\n  pFileContext-&gt;extra_info.upload.before_close_callback = NULL;\r\n  pFileContext-&gt;open_flags = O_WRONLY | O_CREAT | O_TRUNC \\\r\n      | g_extra_open_file_flags;\r\n }\r\n  return storage_write_to_file(pTask, file_offset, file_bytes, \\\r\n   p - pTask-&gt;data, dio_write_file, \\\r\n   storage_upload_file_done_callback, \\\r\n   clean_func, store_path_index);\r\n}\r\n \r\nstatic int storage_get_filename(StorageClientInfo *pClientInfo, \\\r\n const int start_time, const int64_t file_size, const int crc32, \\\r\n const char *szFormattedExt, char *filename, \\\r\n int *filename_len, char *full_filename)\r\n{\r\n int i;\r\n int result;\r\n int store_path_index;\r\n store_path_index = pClientInfo-&gt;file_context.extra_info.upload.\r\n    trunk_info.path.store_path_index;\r\n for (i=0; i&lt;10; i++)\r\n {\r\n  if ((result=storage_gen_filename(pClientInfo, file_size, \\\r\n   crc32, szFormattedExt, FDFS_FILE_EXT_NAME_MAX_LEN+1, \\\r\n   start_time, filename, filename_len)) != 0)\r\n  {\r\n   return result;\r\n  }\r\n  sprintf(full_filename, \"%s\/data\/%s\", \\\r\n   g_fdfs_store_paths.paths[store_path_index], filename);\r\n  if (!fileExists(full_filename))\r\n  {\r\n   break;\r\n  }\r\n  *full_filename = '\\0';\r\n }\r\n if (*full_filename == '\\0')\r\n {\r\n  logError(\"file: \"__FILE__\", line: %d, \" \\\r\n   \"Can't generate uniq filename\", __LINE__);\r\n  *filename = '\\0';\r\n  *filename_len = 0;\r\n  return ENOENT;\r\n }\r\n return 0;\r\n}\r\nstatic int storage_gen_filename(StorageClientInfo *pClientInfo, \\\r\n  const int64_t file_size, const int crc32, \\\r\n  const char *szFormattedExt, const int ext_name_len, \\\r\n  const time_t timestamp, char *filename, int *filename_len)\r\n{\r\n char buff[sizeof(int) * 5];\r\n char encoded[sizeof(int) * 8 + 1];\r\n int len;\r\n int64_t masked_file_size;\r\n FDFSTrunkFullInfo *pTrunkInfo;\r\n pTrunkInfo = &amp;(pClientInfo-&gt;file_context.extra_info.upload.trunk_info);\r\n int2buff(htonl(g_server_id_in_filename), buff);\r\n int2buff(timestamp, buff+sizeof(int));\r\n if ((file_size &gt;&gt; 32) != 0)\r\n {\r\n  masked_file_size = file_size;\r\n }\r\n else\r\n {\r\n  COMBINE_RAND_FILE_SIZE(file_size, masked_file_size);\r\n }\r\n long2buff(masked_file_size, buff+sizeof(int)*2);\r\n int2buff(crc32, buff+sizeof(int)*4);\r\n base64_encode_ex(&amp;g_fdfs_base64_context, buff, sizeof(int) * 5, encoded, \\\r\n   filename_len, false);\r\n if (!pClientInfo-&gt;file_context.extra_info.upload.if_sub_path_alloced)\r\n {\r\n  int sub_path_high;\r\n  int sub_path_low;\r\n  storage_get_store_path(encoded, *filename_len, \\\r\n   &amp;sub_path_high, &amp;sub_path_low);\r\n  pTrunkInfo-&gt;path.sub_path_high = sub_path_high;\r\n  pTrunkInfo-&gt;path.sub_path_low = sub_path_low;\r\n  pClientInfo-&gt;file_context.extra_info.upload. \\\r\n    if_sub_path_alloced = true;\r\n }\r\n len = sprintf(filename, FDFS_STORAGE_DATA_DIR_FORMAT\"\/\" \\\r\n   FDFS_STORAGE_DATA_DIR_FORMAT\"\/\", \\\r\n   pTrunkInfo-&gt;path.sub_path_high,\r\n   pTrunkInfo-&gt;path.sub_path_low);\r\n memcpy(filename+len, encoded, *filename_len);\r\n memcpy(filename+len+(*filename_len), szFormattedExt, ext_name_len);\r\n *filename_len += len + ext_name_len;\r\n *(filename + (*filename_len)) = '\\0';\r\n return 0;\r\n}<\/pre>\n<p><br class=\"Apple-interchange-newline\" \/><br \/>\n<\/span><\/span>&nbsp;<\/p>\n<p><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u6839\u636e\u4e0a\u9762\u5206\u6790\u7684\u7ed3\u679c\uff0c\u6211\u4eec\u770b\u5230\uff0c\u5f53\u4e0a\u4f20\u4e00\u4e2a\u6587\u4ef6\u7684\u65f6\u5019\uff0c\u6211\u4eec\u4f1a\u83b7\u53d6\u5230\u5982\u4e0b\u7684\u4fe1\u606f<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">1- \u6587\u4ef6\u7684\u5927\u5c0f\uff08\u901a\u8fc7\u534f\u8bae\u4e2d\u5305\u7684\u957f\u5ea6\u5b57\u6bb5\u53ef\u4ee5\u77e5\u9053\uff0c\u8fd9\u6837\u7684\u597d\u5904\u5728\u4e8e\u670d\u52a1\u7aef\u5b9e\u73b0\u7684\u65f6\u5019\u7b80\u5355\uff0c\u4e0d\u7528\u8fc7\u4e8e\u62c5\u5fc3\u7f51\u7edc\u7f13\u51b2\u533a\u7684\u95ee\u9898\uff09<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">2- CRC32\uff08\u4e5f\u662f\u534f\u8bae\u5305\u4e2d\u4f20\u8f93\uff0c\u4ee5\u4fbf\u786e\u5b9a\u7f51\u7edc\u4f20\u8f93\u662f\u5426\u51fa\u9519\uff09<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">3- \u65f6\u95f4\u6233\uff08\u83b7\u53d6\u670d\u52a1\u5668\u7684\u5f53\u524d\u65f6\u95f4\uff09<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">4- \u8ba1\u6570\u5668\uff08\u670d\u52a1\u5668\u81ea\u5df1\u7ef4\u62a4\uff09<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><br \/>\n<span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u6839\u636e\u4e0a\u9762\u76844\u4e2a\u6570\u636e\uff0c\u7ec4\u7ec7\u6210base64\u7684\u7f16\u7801\uff0c\u7136\u540e\u751f\u6210\u6b64\u6587\u4ef6\u540d\u79f0\u3002\u6839\u636e\u6b64\u6587\u4ef6\u540d\u79f0\u7684\u552f\u4e00\u6027\uff0c\u5c31\u4e0d\u4f1a\u51fa\u73b0\u88ab\u8986\u76d6\u7684\u60c5\u51b5\u3002\u540c\u65f6\uff0c\u552f\u4e00\u6027\u4e5f\u4f7f\u5f97\u63a5\u4e0b\u6765\u505amd5\u8fd0\u7b97\u540e\uff0c\u5f97\u5230\u7684HASH\u503c\u79bb\u6563\u6027\u5f97\u4e48\u4fdd\u8bc1\u3002\u5f97\u5230\u4e86MD5\u7684\u54c8\u5e0c\u503c\u540e\uff0c\u53d6\u51fa\u6700\u524d\u9762\u76842\u90e8\u5206\uff0c\u5c31\u53ef\u4ee5\u77e5\u9053\u8981\u5b9a\u4f4d\u5230\u54ea\u4e2a\u76ee\u5f55\u4e0b\u9762\u53bb\u3002\u54c8\u5e0c\u6876\u7684\u6784\u9020\u662f\u56fa\u5b9a\u7684\uff0c\u5373\u4e8c\u7ea700-ff\u7684\u76ee\u5f55\u60c5\u51b5<\/span><br style=\"white-space:normal;word-spacing:0px;text-transform:none;color:#333333;text-align:left;font:14px\/26px Arial;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u6839\u636e\u7f51\u4e0a\u7684\u8d44\u6599\uff0c\u4e00\u822c\u5355\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u4e2a\u6570\u4e00\u822c\u9650\u5236\u4e0d\u80fd\u591f\u8d85\u8fc73\u4e07\uff1b\u540c\u6837\u7684\uff0c\u4e00\u4e2a\u76ee\u5f55\u4e0b\u9762\u7684\u76ee\u5f55\u6570\u4e5f\u6700\u597d\u4e0d\u8981\u8d85\u8fc7\u8fd9\u4e2a\u6570\u3002<\/span><\/p>\n<p><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u4f46\u5b9e\u9645\u4e0a\uff0c\u4e3a\u4e86\u5b89\u5168\u8003\u8651\uff0c\u4e00\u822c\u90fd\u4e0d\u8981\u5b58\u50a8\u8fd9\u4e48\u591a\u7684\u5185\u5bb9\u3002<\/span><\/p>\n<p><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\">\u5047\u5b9a\uff0c\u4e00\u4e2a\u76ee\u5f55\u4e0b\u9762\uff0c\u5b58\u50a81000\u4e2a\u6587\u4ef6\uff0c\u6bcf\u4e2a\u6587\u4ef6\u7684\u5e73\u5747\u5927\u5c0f\u4e3a10KB\uff0c\u5219\u5355\u76ee\u5f55\u4e0b\u9762\u53ef\u5b58\u50a8\u7684\u5bb9\u91cf\u662f10MB\u3002\u8fd9\u4e2a\u5bb9\u91cf\u592a\u5c0f\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u591a\u4e2a\u76ee\u5f55\uff0c\u5047\u5b9a\u67091000\u4e2a\u76ee\u5f55\uff0c\u6bcf\u4e2a\u76ee\u5f55\u5b58\u50a810MB\uff0c\u5219\u53ef\u4ee5\u5b58\u50a810GB\u7684\u5185\u5bb9\uff1b\u8fd9\u5bf9\u4e8e\u76ee\u524d\u78c1\u76d8\u7684\u5bb9\u91cf\u6765\u8bf4\uff0c\u5229\u7528\u7387\u8fd8\u662f\u4e0d\u591f\u7684\u3002\u518d\u60f3\u529e\u6cd5\uff0c\u8f6c\u6210\u4e24\u7ea7\u76ee\u5f55\uff0c\u8fd9\u6837\u7684\u8bdd\uff0c\u5c31\u662f\u7b2c\u4e00\u5c42\u76ee\u5f55\u67091000\u4e2a\u5b50\u76ee\u5f55\uff0c\u6bcf\u4e00\u7ea7\u5b50\u76ee\u5f55\u4e0b\u9762\u53c8\u67091000\u7ea7\u7684\u4e8c\u7ea7\u5b50\u76ee\u5f55\uff0c\u6bcf\u4e2a\u4e8c\u7ea7\u5b50\u76ee\u5f55\uff0c\u53ef\u4ee5\u5b58\u50a810MB\u7684\u5185\u5bb9\uff0c\u6b64\u65f6\u5c31\u53ef\u4ee5\u5b58\u50a810T\u7684\u5185\u5bb9\uff0c...<\/span><\/p>\n<p><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\"><span style=\"white-space:normal;word-spacing:0px;text-transform:none;float:none;color:#333333;text-align:left;font:14px\/26px Arial;display:inline !important;letter-spacing:normal;background-color:#ffffff;text-indent:0px;-webkit-text-stroke-width:0px;\"><\/p>\n<p><\/span><\/span><\/p>\n<p> <a href=\"https:\/\/www.xiaobo.li\/notes\/archives\/450\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[283],"tags":[],"class_list":["post-450","post","type-post","status-publish","format-standard","hentry","category-technologys"],"_links":{"self":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts\/450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/comments?post=450"}],"version-history":[{"count":0,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts\/450\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/media?parent=450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/categories?post=450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/tags?post=450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}