{"id":47419,"date":"2021-10-20T14:36:31","date_gmt":"2021-10-20T06:36:31","guid":{"rendered":"http:\/\/www.xyryd.com\/?p=47419"},"modified":"2021-10-20T14:38:28","modified_gmt":"2021-10-20T06:38:28","slug":"php-%e7%bc%a9%e5%9b%be%e5%88%a9%e5%99%a8%ef%bc%9atimthumb","status":"publish","type":"post","link":"http:\/\/www.xyryd.com\/47419.html","title":{"rendered":"PHP \u7f29\u56fe\u5229\u5668\uff1aTimThumb \u751f\u6210\u7f51\u9875\u622a\u56fe"},"content":{"rendered":"\n
TimThumb \u662f\u4e00\u4e2a\u975e\u5e38\u7b80\u6d01\u65b9\u4fbf\u7528\u4e8e\u88c1\u56fe\u7684 PHP \u7a0b\u5e8f\uff0c\u53ea\u8981\u7ed9\u4ed6\u8bbe\u7f6e\u4e00\u4e9b\u53c2\u6570\uff0c\u5b83\u5c31\u53ef\u4ee5\u751f\u6210\u7f29\u7565\u56fe\u3002\u73b0\u5728\u5f88\u591a WordPress \u4e3b\u9898\u4e2d\uff0c\u90fd\u4f7f\u7528 TimThumb \u8fd9\u4e2a PHP \u7c7b\u5e93\u8fdb\u884c\u7f29\u7565\u56fe\u7684\u5904\u7406\u3002<\/p>\n\n\n\n
TimThumb \u7684\u4f7f\u7528<\/p>\n\n\n\n
TimThumb \u662f\u5bf9\u670d\u52a1\u5668\u6709\u8981\u6c42\u7684\uff0c\u9700\u8981\u670d\u52a1\u5668\u652f\u6301 GD \u5e93\uff0c\u73b0\u5728\u4e00\u822c\u7684\u4e3b\u673a\u90fd\u652f\u6301\uff0c\u7136\u540e\u5230 TimThumb \u5b98\u7f51\u4e0b\u8f7d\u811a\u672c\u5e76\u4e0a\u4f20\u5230\u670d\u52a1\u5668\uff0c\u5728\u548c TimThumb \u540c\u4e00\u4e2a\u76ee\u5f55\u4e0b\uff0c\u65b0\u5efa\u4e00\u4e2a cache \u6587\u4ef6\u5939\uff0c\u5e76\u4e14\u8bbe\u7f6e cache \u6587\u4ef6\u5939\u4e3a\u53ef\u5199\u3002<\/p>\n\n\n\n
TimThumb \u8fd9\u4e2a \u8fd9\u4e2a PHP \u88c1\u56fe\u811a\u672c\u4f7f\u7528\u8d77\u6765\u975e\u5e38\u7b80\u5355\uff0c\u4e0b\u9762\u5c31\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u56fe\u7247\u88c1\u526a\u6848\u4f8b\uff1a<\/p>\n\n\n\n
timthumb.php?src=my_image.jpg&h=150&w=150&zc=1\n\u5b83\u5c06\u56fe\u7247\u88c1\u526a\u6210\u5bbd\u4e3a150\uff0c\u9ad8\u4e3a150\u3002\u5982\u679c\u4f60\u4e0d\u60f3\u88c1\u526a\uff0c\u53ea\u662f\u538b\u7f29\u4e3a\uff0c\u5c06 zc \u53c2\u6570\u8bbe\u7f6e\u4e3a 0\u3002<\/code><\/pre>\n\n\n\n\u9664\u4e86\u8fd9\u4e9b\u53c2\u6570\u4e4b\u5916\uff0cTimThumb \u8fd8\u6709\u5f88\u591a\u53c2\u6570\u53ef\u4ee5\u8ba9\u4f60\u8bbe\u7f6e\u3002<\/p>\n\n\n\n
\u53e6\u5916 TimThunb \u8fd8\u652f\u6301\u6ee4\u955c\uff0c\u4e4b\u5916\u5916\u90e8\u94fe\u63a5\u7b49\u3002\u603b\u4e4b\u662f\u4e00\u4e2a\u975e\u5e38\u5f3a\u5927\u56fe\u7247\u7f29\u7565\u56fe\u5904\u7406\u5e93\u3002<\/p>\n\n\n\n
TimThumb \u7684\u7f3a\u70b9<\/p>\n\n\n\n
\u7531\u4e8e TimThumb \u662f\u901a\u8fc7\u53c2\u6570\u7684\u65b9\u5f0f\u6765\u8bbe\u7f6e\u7f29\u7565\u56fe\u7684\u5927\u5c0f\u548c\u5176\u4ed6\u4e00\u4e9b\u5c5e\u6027\uff0c\u6240\u4ee5\u5b83\u7684\u56fe\u7247\u6ca1\u6cd5\u8fdb\u884c\u4f2a\u9759\u6001\u5904\u7406\uff0c\u6240\u4ee5\u751f\u6210\u7684\u56fe\u7247\u4e5f\u65e0\u6cd5\u8fdb\u884c CDN \u52a0\u901f\u3002\u5e76\u4e14 TimThumb \u88c1\u56fe\u65f6\u5019\u662f\u9700\u8981\u6d88\u8017\u4e00\u5b9a\u670d\u52a1\u5668\u8d44\u6e90\u7684\u3002<\/p>\n\n\n\n
\u800c\u4e03\u725b\u4e91\u5b58\u50a8\u670d\u52a1\u652f\u6301\u56fe\u7247\u7f29\u7565\u3001\u88c1\u526a\u3001\u65cb\u8f6c\u3001\u8f6c\u5316\u7b49\u529f\u80fd\uff0c\u6240\u4ee5\u5982\u679c\u80fd\u591f\u57fa\u4e8e\u4e03\u725b\u7684\u4e91\u5b58\u50a8\u670d\u52a1\u5f00\u53d1\u4e00\u6b3e WordPress \u7f29\u7565\u56fe\u529f\u80fd\uff0c\u5c06\u662f\u975e\u5e38\u65b9\u4fbf\u5e76\u9ad8\u6548\u7684\u65b9\u5f0f\u3002\u5c3d\u8bf7\u671f\u5f85\u3002 ?<\/p>\n\n\n\n
\u8bbf\u95ee\u5730\u5740\u4e3a\uff1ahttp:\/\/localhost\/timthumb.php?src=http:\/\/localhost\/200.jpg&w=200&h=300&q=100&f=3,9|4,2&s=1&ct=1<\/code><\/pre>\n\n\n\n\u53c2\u6570\u90fd\u662fget\u63d0\u4ea4\u7684\uff0c\u53ef\u9009\u53c2\u6570\u548c\u8bf4\u660e\u5982\u4e0b\uff1a<\/strong><\/p>\n\n\n\nsrc<\/strong> : \u9700\u8981\u8fdb\u884c\u56fe\u7247\u7f29\u653e\u7684\u6e90\u56fe\u7247\u5730\u5740\uff0c\u6216\u8005\u662f\u9700\u8981\u8fdb\u884c\u622a\u56fe\u64cd\u4f5c\u7684\u7f51\u9875\u5730\u5740<\/p>\n\n\n\nwebshot<\/strong>: \u5982\u679c\u6b64\u503c\u4e3a\u771f\u5219\u8fdb\u884c\u622a\u56fe\u64cd\u4f5c<\/p>\n\n\n\nw<\/strong> : \u751f\u6210\u56fe\u7247\u7684\u5bbd\u5ea6\uff0c\u5982\u679c\u5bbd\u5ea6\u6216\u9ad8\u5ea6\u53ea\u8bbe\u7f6e\u4e86\u4e00\u4e2a\u503c\uff0c\u5219\u6839\u636e\u5176\u4e2d\u4e00\u4e2a\u503c\u8fdb\u884c\u7b49\u6bd4\u7f29\u653e<\/p>\n\n\n\nh<\/strong> : \u751f\u6210\u56fe\u7247\u7684\u9ad8\u5ea6\uff0c\u5982\u679c\u9ad8\u5ea6\u548c\u5bbd\u5ea6\u90fd\u6ca1\u6709\u6307\u5b9a\uff0c\u5219\u9ed8\u8ba4\u4e3a100*100<\/p>\n\n\n\nzc<\/strong> : \u751f\u6210\u56fe\u7247\u7684\u7f29\u653e\u6a21\u5f0f\uff0c\u53ef\u9009\u503c0, 1, 2, 3, \u9ed8\u8ba4\u4e3a1\uff0c\u6bcf\u4e2a\u503c\u7684\u4e0d\u540c\u4e4b\u5904\u53ef\u770b\u4e0b\u9762\u6587\u4ef6\u7684\u7b2c100\u884c\u6ce8\u91ca<\/p>\n\n\n\nq<\/strong> : \u751f\u6210\u56fe\u7247\u7684\u8d28\u91cf\uff0c\u9ed8\u8ba490<\/p>\n\n\n\na<\/strong> : \u8d85\u51fa\u90e8\u5206\u7684\u88c1\u526a\u4f4d\u7f6e\uff0c\u548c\u7f29\u653e\u6a21\u5f0f\u6709\u5173\uff0c\u53ef\u9009\u503ct, b, l, r, \u9ed8\u8ba4\u4e3a\u4ece\u9876\u90e8\u88c1\u526a<\/p>\n\n\n\nf<\/strong> : \u9700\u8981\u5bf9\u751f\u6210\u540e\u7684\u56fe\u7247\u4f7f\u7528\u4e00\u4e9b\u8fc7\u6ee4\u5668\u7684\u8bdd\uff0c\u5219\u5728\u8fd9\u91cc\u4f20\u4e0d\u540c\u8fc7\u6ee4\u5668\u7684\u4ee3\u7801\u548c\u503c\uff0c\u5177\u4f53\u64cd\u4f5c\u65b9\u6cd5\u53ef\u89c1\u4e0b\u9762\u6587\u4ef6\u7684\u7b2c821\u884c\u6ce8\u89e3<\/p>\n\n\n\ns<\/strong> : \u662f\u5426\u5bf9\u751f\u4ea7\u7684\u56fe\u7247\u8fdb\u884c\u9510\u5316\u5904\u7406<\/p>\n\n\n\ncc<\/strong> : \u751f\u6210\u56fe\u7247\u7684\u80cc\u666f\u753b\u5e03\u989c\u8272<\/p>\n\n\n\nct<\/strong> : \u751f\u6210png\u56fe\u7247\u65f6\u80cc\u666f\u662f\u5426\u900f\u660e<\/p>\n\n\n\ntimthumb.php\u9010\u884c\u6ce8\u91ca\u529f\u80fd\u4f5c\u7528 \u4e2d\u6587\u7248<\/p>\n\n\n\n
<?php\n\/\/\u5b9a\u4e49\u7248\u672c\u4fe1\u606f\n<\/em><\/em>define ('VERSION', '2.8.10');\n\/\/\u5982\u679c\u6709\u914d\u7f6e\u6587\u4ef6\uff0c\u5219\u52a0\u8f7dtimthumb-config.php\uff0c\u6ca1\u6709\u7684\u8bdd\u4f7f\u7528\u4e0b\u9762\u7684\u503c\n<\/em><\/em>if( file_exists(dirname(__FILE__) . '\/timthumb-config.php')){\n require_once('timthumb-config.php');\n}\n\/\/\u8c03\u8bd5\u65e5\u5fd7\u8bb0\u5f55\u5230web\u670d\u52a1\u5668\u65e5\u5fd7\u4e2d\n<\/em><\/em>if(! defined('DEBUG_ON') ){\n define ('DEBUG_ON', false);\n}\n\/\/\u8c03\u8bd5\u7ea7\u522b\uff0c\u9ad8\u4e8e\u8fd9\u4e2a\u503c\u7684level\u90fd\u4e0d\u4f1a\u8bb0\u5f55\uff0c1\u6700\u4f4e\uff0c3\u6700\u9ad8\n<\/em><\/em>if(! defined('DEBUG_LEVEL') ){\n define ('DEBUG_LEVEL', 1);\n}\n\/\/\u6700\u5927\u5360\u7528\u5185\u5b58\u9650\u523630M\n<\/em><\/em>if(! defined('MEMORY_LIMIT') ){\n define ('MEMORY_LIMIT', '30M');\n}\n\/\/\u5173\u95ed\u4eff\u76d7\u94fe\n<\/em><\/em>if(! defined('BLOCK_EXTERNAL_LEECHERS') ){\n define ('BLOCK_EXTERNAL_LEECHERS', false);\n} \t\t\t\t\t\n\/\/ \u5141\u8bb8\u4ece\u5916\u90e8\u83b7\u53d6<strong><strong>\u56fe\u7247<\/strong><\/strong>\n<\/em><\/em>if(! defined('ALLOW_EXTERNAL') ){\n define ('ALLOW_EXTERNAL', TRUE);\n}\n\/\/\u5141\u8bb8\u83b7\u53d6\u6240\u6709\u5916\u90e8\u7ad9\u70b9url\n<\/em><\/em>if(! defined('ALLOW_ALL_EXTERNAL_SITES') ){\n define ('ALLOW_ALL_EXTERNAL_SITES', false);\n}\n\/\/\u542f\u7528\u6587\u4ef6\u7f13\u5b58\n<\/em><\/em>if(! defined('FILE_CACHE_ENABLED') ){\n define ('FILE_CACHE_ENABLED', TRUE);\n}\n\/\/\u6587\u4ef6\u7f13\u5b58\u66f4\u65b0\u65f6\u95f4\uff0cs\n<\/em><\/em>if(! defined('FILE_CACHE_TIME_BETWEEN_CLEANS')){\n define ('FILE_CACHE_TIME_BETWEEN_CLEANS', 86400);\n}\n\/\/\u6587\u4ef6\u7f13\u5b58\u751f\u5b58\u65f6\u95f4\uff0cs\uff0c\u8fc7\u4e86\u8fd9\u4e2a\u65f6\u95f4\u7684\u7f13\u5b58\u6587\u4ef6\u5c31\u4f1a\u88ab\u5220\u9664\n<\/em><\/em>if(! defined('FILE_CACHE_MAX_FILE_AGE') ){\n define ('FILE_CACHE_MAX_FILE_AGE', 86400);\n}\n\/\/\u7f13\u5b58\u6587\u4ef6\u540e\u7f00\n<\/em><\/em>if(! defined('FILE_CACHE_SUFFIX') ){\n define ('FILE_CACHE_SUFFIX', '.timthumb.txt');\n}\n\/\/\u7f13\u5b58\u6587\u4ef6\u524d\u7f00\n<\/em><\/em>if(! defined('FILE_CACHE_PREFIX') ){\n define ('FILE_CACHE_PREFIX', 'timthumb');\n}\n\/\/\u7f13\u5b58\u6587\u4ef6\u76ee\u5f55\uff0c\u7559\u7a7a\u5219\u4f7f\u7528\u7cfb\u7edf\u4e34\u65f6\u76ee\u5f55\uff08\u63a8\u8350\uff09\n<\/em><\/em>if(! defined('FILE_CACHE_DIRECTORY') ){\n define ('FILE_CACHE_DIRECTORY', '.\/cache');\n}\n\/\/<strong><strong>\u56fe\u7247<\/strong><\/strong>\u6700\u5927\u5c3a\u5bf8\uff0c\u6b64\u811a\u672c\u6700\u5927\u80fd<strong>\u5904\u7406<\/strong>10485760\u5b57\u8282\u7684<strong><strong>\u56fe\u7247<\/strong><\/strong>\uff0c\u4e5f\u5c31\u662f10M\n<\/em><\/em>if(! defined('MAX_FILE_SIZE') ){\n define ('MAX_FILE_SIZE', 10485760);\n} \n\/\/CURL\u7684\u8d85\u65f6\u65f6\u95f4\n<\/em><\/em>if(! defined('CURL_TIMEOUT') ){\n define ('CURL_TIMEOUT', 20);\n}\n\/\/\u6e05\u7406\u9519\u8bef\u7f13\u5b58\u7684\u65f6\u95f4\n<\/em><\/em>if(! defined('WAIT_BETWEEN_FETCH_ERRORS') ){\n define ('WAIT_BETWEEN_FETCH_ERRORS', 3600);\n}\n\/\/\u6d4f\u89c8\u5668\u7f13\u5b58\u65f6\u95f4\n<\/em><\/em>if(! defined('BROWSER_CACHE_MAX_AGE') ){\n define ('BROWSER_CACHE_MAX_AGE', 864000);\n}\n\/\/\u5173\u95ed\u6240\u6709\u6d4f\u89c8\u5668\u7f13\u5b58\n<\/em><\/em>if(! defined('BROWSER_CACHE_DISABLE') ){\n define ('BROWSER_CACHE_DISABLE', false);\n}\n\/\/\u6700\u5927\u56fe\u50cf\u5bbd\u5ea6\n<\/em><\/em>if(! defined('MAX_WIDTH') ){\n define ('MAX_WIDTH', 1500);\n}\n\/\/\u6700\u5927\u56fe\u50cf\u9ad8\u5ea6\n<\/em><\/em>if(! defined('MAX_HEIGHT') ){\n define ('MAX_HEIGHT', 1500);\n}\n\/\/404\u9519\u8bef\u65f6\u663e\u793a\u7684\u63d0\u793a<strong><strong>\u56fe\u7247<\/strong><\/strong>\u5730\u5740\uff0c\u8bbe\u7f6e\u6d4b\u503c\u5219\u4e0d\u4f1a\u663e\u793a\u5177\u4f53\u7684\u9519\u8bef\u4fe1\u606f\n<\/em><\/em>if(! defined('NOT_FOUND_IMAGE') ){\n define ('NOT_FOUND_IMAGE', '');\n}\n\/\/\u5176\u4ed6\u9519\u8bef\u65f6\u663e\u793a\u7684\u63d0\u793a<strong><strong>\u56fe\u7247<\/strong><\/strong>\u5730\u5740\uff0c\u8bbe\u7f6e\u6d4b\u503c\u5219\u4e0d\u4f1a\u663e\u793a\u5177\u4f53\u7684\u9519\u8bef\u4fe1\u606f\n<\/em><\/em>if(! defined('ERROR_IMAGE') ){\n define ('ERROR_IMAGE', '');\n}\n\/\/PNG<strong><strong>\u56fe\u7247<\/strong><\/strong>\u80cc\u666f\u989c\u8272\uff0c\u4f7f\u7528false\u4ee3\u8868\u900f\u660e\n<\/em><\/em>if(! defined('PNG_IS_TRANSPARENT') ){\n define ('PNG_IS_TRANSPARENT', FALSE);\n}\n\/\/\u9ed8\u8ba4<strong><strong>\u56fe\u7247<\/strong><\/strong>\u8d28\u91cf\n<\/em><\/em>if(! defined('DEFAULT_Q') ){\n define ('DEFAULT_Q', 90);\n}\n\/\/\u9ed8\u8ba4 \u7f29\u653e\/\u88c1\u526a \u6a21\u5f0f\uff0c0\uff1a\u6839\u636e\u4f20\u5165\u7684\u503c\u8fdb\u884c\u7f29\u653e\uff08\u4e0d\u88c1\u526a\uff09\uff0c 1\uff1a\u4ee5\u6700\u5408\u9002\u7684\u6bd4\u4f8b\u88c1\u526a\u548c\u8c03\u6574\u5927\u5c0f\uff08\u88c1\u526a\uff09\uff0c 2\uff1a\u6309\u6bd4\u4f8b\u8c03\u6574\u5927\u5c0f\uff0c\u5e76\u6dfb\u52a0\u8fb9\u6846\uff08\u88c1\u526a\uff09\uff0c2\uff1a\u6309\u6bd4\u4f8b\u8c03\u6574\u5927\u5c0f\uff0c\u4e0d\u6dfb\u52a0\u8fb9\u6846\uff08\u88c1\u526a\uff09\n<\/em><\/em>if(! defined('DEFAULT_ZC') ){\n define ('DEFAULT_ZC', 1);\n}\n\/\/\u9ed8\u8ba4\u9700\u8981\u5bf9<strong><strong>\u56fe\u7247<\/strong><\/strong>\u8fdb\u884c\u7684<strong>\u5904\u7406<\/strong>\u64cd\u4f5c\uff0c\u53ef\u9009\u503c\u548c\u53c2\u6570\u683c\u5f0f\u8bf7\u53c2\u770bprocessImageAndWriteToCache\u51fd\u6570\u4e2d\u7684$filters\u548c$imageFilters\u7684\u6ce8\u91ca\n<\/em><\/em>if(! defined('DEFAULT_F') ){\n define ('DEFAULT_F', '');\n}\n\/\/\u662f\u5426\u5bf9<strong><strong>\u56fe\u7247<\/strong><\/strong>\u8fdb\u884c\u9510\u5316\n<\/em><\/em>if(! defined('DEFAULT_S') ){\n define ('DEFAULT_S', 0);\n}\n\/\/\u9ed8\u8ba4\u753b\u5e03\u989c\u8272\n<\/em><\/em>if(! defined('DEFAULT_CC') ){\n define ('DEFAULT_CC', 'ffffff');\n}\n\/\/\u4ee5\u4e0b\u662f<strong><strong>\u56fe\u7247<\/strong><\/strong>\u538b\u7f29\u8bbe\u7f6e\uff0c\u524d\u63d0\u662f\u4f60\u7684\u4e3b\u673a\u4e2d\u6709optipng\u6216\u8005pngcrush\u8fd9\u4e24\u4e2a\u5de5\u5177\uff0c\u5426\u5219\u7684\u8bdd\u4e0d\u4f1a\u542f\u7528\u6b64\u529f\u80fd\n<\/em>\/\/\u6b64\u529f\u80fd\u53ea\u5bf9png<strong><strong>\u56fe\u7247<\/strong><\/strong>\u6709\u6548\n<\/em><\/em>if(! defined('OPTIPNG_ENABLED') ){\n define ('OPTIPNG_ENABLED', false);\n} \nif(! defined('OPTIPNG_PATH') ){\n define ('OPTIPNG_PATH', '\/usr\/bin\/optipng');\n} \/\/\u4f18\u5148\u4f7f\u7528optipng,\u56e0\u4e3a\u6709\u66f4\u597d\u7684\u538b\u7f29\u6bd4 \n<\/em><\/em>if(! defined('PNGCRUSH_ENABLED') ){\n define ('PNGCRUSH_ENABLED', false);\n} \nif(! defined('PNGCRUSH_PATH') ){\n define ('PNGCRUSH_PATH', '\/usr\/bin\/pngcrush');\n} \/\/optipng\u4e0d\u5b58\u5728\u7684\u8bdd\uff0c\u4f7f\u7528pngcrush\n<\/em>\/\/<strong><strong>\u56fe\u7247<\/strong><\/strong>\u538b\u7f29\u8bbe\u7f6e\u7ed3\u675f\n<\/em><\/em>\n\n\/* \n<\/em> * * \u4ee5\u4e0b\u662f\u7f51\u7ad9\u622a\u56fe\u914d\u7f6e\n<\/em> * \u9996\u5148\uff0c\u7f51\u7ad9\u622a\u56fe\u9700\u8981root\u6743\u9650\n<\/em> * Ubuntu \u4e0a\u4f7f\u7528\u7f51\u7ad9\u622a\u56fe\u7684\u6b65\u9aa4\uff1a\n<\/em> * 1.\u7528\u8fd9\u4e2a\u547d\u4ee4\u5b89\u88c5Xvfb sudo apt-get install subversion libqt4-webkit libqt4-dev g++ xvfb\n<\/em> * 2.\u65b0\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u5e76\u4e0b\u8f7d\u4e0b\u9762\u7684\u6e90\u7801\n<\/em> * 3.\u7528\u8fd9\u4e2a\u547d\u4ee4\u4e0b\u8f7d\u6700\u65b0\u7684CutyCapt svn co http:\/\/cutycapt.svn.sourceforge.net\/svnroot\/cutycapt\n<\/em> * 4.\u8fdb\u5165CutyCapt\u6587\u4ef6\u5939\n<\/em> * 5.\u7f16\u8bd1\u5e76\u5b89\u88c5CutyCapt\n<\/em> * 6.\u5c1d\u8bd5\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a xvfb-run --server-args=\"-screen 0, 1024x768x24\" CutyCapt --url=\"http:\/\/markmaunder.com\/\" --out=test.png\n<\/em> * 7.\u5982\u679c\u751f\u6210\u4e86\u4e00\u4e2a test.php\u7684<strong><strong>\u56fe\u7247<\/strong><\/strong>\uff0c\u8bc1\u660e\u4e00\u5207\u6b63\u5e38\uff0c\u73b0\u5728\u901a\u8fc7\u6d4f\u89c8\u5668\u8bd5\u8bd5\uff0c\u8bbf\u95ee\u4e0b\u9762\u7684\u5730\u5740\uff1ahttp:\/\/yoursite.com\/path\/to\/timthumb.php?src=http:\/\/markmaunder.com\/&webshot=1\n<\/em> *\n<\/em> * \u9700\u8981\u6ce8\u610f\u7684\u5730\u65b9\uff1a\n<\/em> * 1.\u7b2c\u4e00\u6b21webshot\u52a0\u8f7d\u65f6\uff0c\u9700\u8981\u6570\u79d2\u949f\uff0c\u4e4b\u540e\u52a0\u8f7d\u5c31\u5f88\u5feb\u4e86\n<\/em> *\n<\/em> * \u9ad8\u7ea7\u7528\u6237\uff1a\n<\/em> * 1.\u5982\u679c\u60f3\u63d0\u901f\u5927\u7ea625%\uff0c\u5e76\u4e14\u4f60\u4e86\u89e3linux\uff0c\u53ef\u4ee5\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a\n<\/em> * nohup Xvfb :100 -ac -nolisten tcp -screen 0, 1024x768x24 > \/dev\/null 2>&1 &\n<\/em> * \u5e76\u8bbe\u7f6e WEBSHOT_XVFB_RUNNING \u7684\u503c\u4e3atrue\n<\/em> *\n<\/em> * *\/<\/em>\n\/\/\u6d4b\u8bd5\u7684\u529f\u80fd\uff0c\u5982\u679c\u8bbe\u7f6e\u6b64\u503c\u4e3atrue, \u5e76\u5728\u67e5\u8be2\u5b57\u7b26\u4e32\u4e2d\u52a0\u4e0awebshot=1,\u4f1a\u8ba9\u811a\u672c\u8fd4\u56de\u6d4f\u89c8\u5668\u7684\u622a\u56fe\uff0c\u800c\u4e0d\u662f\u83b7\u53d6\u56fe\u50cf\n<\/em><\/em>if(! defined('WEBSHOT_ENABLED') ){\n define ('WEBSHOT_ENABLED', false);\n}\n\/\/\u5b9a\u4e49CutyCapt\u5730\u5740\n<\/em><\/em>if(! defined('WEBSHOT_CUTYCAPT') ){\n define ('WEBSHOT_CUTYCAPT', '\/usr\/local\/bin\/CutyCapt');\n}\n\/\/Xvfb\u5730\u5740\n<\/em><\/em>if(! defined('WEBSHOT_XVFB') ){\n define ('WEBSHOT_XVFB', '\/usr\/bin\/xvfb-run');\n}\n\/\/\u622a\u56fe\u5c4f\u5e55\u5bbd\u5ea61024\n<\/em><\/em>if(! defined('WEBSHOT_SCREEN_X') ){\n define ('WEBSHOT_SCREEN_X', '1024');\n}\n\/\/\u622a\u56fe\u5c4f\u5e55\u9ad8\u5ea6768\n<\/em><\/em>if(! defined('WEBSHOT_SCREEN_Y') ){\n define ('WEBSHOT_SCREEN_Y', '768');\n}\n\/\/\u8272\u6df1\uff0c\u4f5c\u8005\u8bf4\u4ed6\u53ea\u6d4b\u8bd5\u8fc724\n<\/em><\/em>if(! defined('WEBSHOT_COLOR_DEPTH') ){\n define ('WEBSHOT_COLOR_DEPTH', '24');\t\n}\n\/\/\u622a\u56fe\u683c\u5f0f\n<\/em><\/em>if(! defined('WEBSHOT_IMAGE_FORMAT') ){\n define ('WEBSHOT_IMAGE_FORMAT', 'png');\n}\n\/\/\u622a\u56fe\u8d85\u65f6\u65f6\u95f4\uff0c\u5355\u4f4ds\n<\/em><\/em>if(! defined('WEBSHOT_TIMEOUT') ){\n define ('WEBSHOT_TIMEOUT', '20');\n}\n\/\/user_agent\u5934\n<\/em><\/em>if(! defined('WEBSHOT_USER_AGENT') ){\n define ('WEBSHOT_USER_AGENT', \"Mozilla\/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.2.18) Gecko\/20110614 Firefox\/3.6.18\");\n}\n\/\/\u662f\u5426\u542f\u7528JS\n<\/em><\/em>if(! defined('WEBSHOT_JAVASCRIPT_ON') ){\n define ('WEBSHOT_JAVASCRIPT_ON', true);\n}\n\/\/\u662f\u5426\u542f\u7528java\n<\/em><\/em>if(! defined('WEBSHOT_JAVA_ON') ){\n define ('WEBSHOT_JAVA_ON', false);\n}\n\/\/\u5f00\u542fflash\u548c\u5176\u4ed6\u63d2\u4ef6\n<\/em><\/em>if(! defined('WEBSHOT_PLUGINS_ON') ){\n define ('WEBSHOT_PLUGINS_ON', true);\n}\n\/\/\u4ee3\u7406\u670d\u52a1\u5668\n<\/em><\/em>if(! defined('WEBSHOT_PROXY') ){\n define ('WEBSHOT_PROXY', '');\t\n}\n\/\/\u5982\u679c\u8fd0\u884c\u4e86XVFB,\u6b64\u9879\u8bbe\u4e3atrue\n<\/em><\/em>if(! defined('WEBSHOT_XVFB_RUNNING') ){\n define ('WEBSHOT_XVFB_RUNNING', false);\n}\n\/\/ \u5982\u679c ALLOW_EXTERNAL \u7684\u503c\u4e3a\u771f \u5e76\u4e14 ALLOW_ALL_EXTERNAL_SITES \u7684\u503c\u4e3a\u5047\uff0c\u90a3\u4e48\u622a\u56fe\u7684<strong><strong>\u56fe\u7247<\/strong><\/strong>\u53ea\u80fd\u4ece\u4e0b\u9762\u8fd9\u4e9b\u6570\u7ec4\u4e2d\u7684\u57df\u548c\u5b50\u57df\u8fdb\u884c\n<\/em><\/em>if(! isset($ALLOWED_SITES)){\n $ALLOWED_SITES = array (\n 'flickr.com',\n 'staticflickr.com',\n 'picasa.com',\n 'img.youtube.com',\n 'upload.wikimedia.org',\n 'photobucket.com',\n 'imgur.com',\n 'imageshack.us',\n 'tinypic.com',\n );\n}\n\/*\u622a\u56fe\u914d\u7f6e\u7ed3\u675f*\/<\/em>\n\n\/\/ -------------------------------------------------------------\n<\/em>\/\/ -------------------------- \u914d\u7f6e\u7ed3\u675f ------------------------\n<\/em>\/\/ -------------------------------------------------------------\n<\/em><\/em>\ntimthumb::start();\n\nclass timthumb {\n\tprotected $src = \"\"; \/\/\u9700\u8981\u83b7\u53d6\u7684<strong><strong>\u56fe\u7247<\/strong><\/strong>url\n<\/em><\/em>\tprotected $is404 = false; \/\/404\u9519\u8bef\u7801\n<\/em><\/em>\tprotected $docRoot = \"\"; \/\/\u670d\u52a1\u5668\u6587\u6863\u6839\u76ee\u5f55\n<\/em><\/em>\tprotected $lastURLError = false; \/\/\u4e0a\u4e00\u6b21\u8bf7\u6c42\u5916\u90e8url\u7684\u9519\u8bef\u4fe1\u606f\n<\/em><\/em>\tprotected $localImage = \"\"; \/\/\u5982\u679c\u8bf7\u6c42\u7684url\u662f\u672c\u5730<strong><strong>\u56fe\u7247<\/strong><\/strong>\uff0c\u5219\u4e3a\u672c\u5730<strong><strong>\u56fe\u7247<\/strong><\/strong>\u7684\u5730\u5740\n<\/em><\/em>\tprotected $localImageMTime = 0; \/\/\u672c\u5730<strong><strong>\u56fe\u7247<\/strong><\/strong>\u7684\u4fee\u6539\u65f6\u95f4\n<\/em><\/em>\tprotected $url = false; \/\/\u7528parse_url\u89e3\u6790src\u540e\u7684\u6570\u7ec4\n<\/em><\/em> protected $myHost = \"\"; \/\/\u672c\u673a\u57df\u540d\n<\/em><\/em>\tprotected $isURL = false; \/\/\u662f\u5426\u4e3a\u5916\u90e8<strong><strong>\u56fe\u7247<\/strong><\/strong>\u5730\u5740\n<\/em><\/em>\tprotected $cachefile = ''; \/\/\u7f13\u5b58\u6587\u4ef6\u5730\u5740\n<\/em><\/em>\tprotected $errors = array(); \/\/\u9519\u8bef\u4fe1\u606f\u5217\u8868\n<\/em><\/em>\tprotected $toDeletes = array(); \/\/\u6790\u6784\u51fd\u6570\u4e2d\u9700\u8981\u5220\u9664\u7684\u8d44\u6e90\u5217\u8868\n<\/em><\/em>\tprotected $cacheDirectory = ''; \/\/\u7f13\u5b58\u5730\u5740\n<\/em><\/em>\tprotected $startTime = 0; \/\/\u5f00\u59cb\u65f6\u95f4\n<\/em><\/em>\tprotected $lastBenchTime = 0; \/\/\u4e0a\u4e00\u6b21debug\u5b8c\u6210\u7684\u65f6\u95f4\n<\/em><\/em>\tprotected $cropTop = false; \/\/\u662f\u5426\u542f\u7528\u88c1\u526a\n<\/em><\/em>\tprotected $salt = \"\"; \/\/\u6587\u4ef6\u4fee\u6539\u65f6\u95f4\u548cinode\u8fde\u63a5\u7684\u5b57\u7b26\u4e32\u7684\u76d0\u503c\n<\/em><\/em>\tprotected $fileCacheVersion = 1; \/\/\u6587\u4ef6\u7f13\u5b58\u7248\u672c\uff0c\u5f53\u8fd9\u4e2a\u7c7b\u5347\u7ea7\u6216\u8005\u88ab\u66f4\u6539\u65f6\uff0c\u8fd9\u4e2a\u503c\u5e94\u8be5\u6539\u53d8\uff0c\u4ece\u800c\u91cd\u65b0\u751f\u6210\u7f13\u5b58\n<\/em><\/em>\tprotected $filePrependSecurityBlock = \"<?php die('Execution denied!'); \/\/\"; \/\/\u7f13\u5b58\u6587\u4ef6\u5b89\u5168\u5934\uff0c\u9632\u6b62\u76f4\u63a5\u8bbf\u95ee\n<\/em><\/em>\tprotected static $curlDataWritten = 0; \/\/\u5c06curl\u83b7\u53d6\u5230\u7684\u6570\u636e\u5199\u5165\u7f13\u5b58\u6587\u4ef6\u7684\u957f\u5ea6\n<\/em><\/em>\tprotected static $curlFH = false; \/\/curl\u8bf7\u6c42\u6210\u529f\u540e\u8981\u5c06\u83b7\u53d6\u5230\u7684\u6570\u636e\u5199\u5230\u6b64\u6587\u4ef6\u5185\n<\/em><\/em>\t\/*\u5916\u90e8\u8c03\u7528\u63a5\u53e3*\/<\/em>\n\tpublic static function start(){\n\t \t\/\/\u5b9e\u4f8b\u5316\u6a21\u578b\n<\/em><\/em>\t \t$tim = new timthumb();\n\t\t\/\/\u68c0\u67e5\u5b9e\u4f8b\u5316\u6a21\u578b\u65f6\u662f\u5426\u6709\u9519\u8bef\n<\/em><\/em>\t\t$tim->handleErrors();\n\t\t\/\/\u6b64\u51fd\u6570\u4e3a\u7a7a\uff0c\u7528\u505a\u81ea\u5b9a\u4e49\u7684\u6570\u636e\u9a8c\u8bc1\n<\/em><\/em>\t\t$tim->securityChecks();\n\t\t\/\/\u5c1d\u8bd5\u8bfb\u53d6\u6d4f\u89c8\u5668\u7f13\u5b58\n<\/em><\/em>\t\tif($tim->tryBrowserCache()){\n\t\t \t\/\/\u6210\u529f\u7684\u8bdd\u5c31\u8f93\u51fa\u7f13\u5b58\n<\/em><\/em>\t\t\texit(0);\n\t\t}\n\t\t\/\/\u68c0\u6d4b\u9519\u8bef\n<\/em><\/em>\t\t$tim->handleErrors();\n\t\t\/\/\u5982\u679c\u542f\u7528\u4e86\u6587\u4ef6\u7f13\u5b58\uff0c\u5e76\u4e14\u8bfb\u53d6\u670d\u52a1\u7aef\u7f13\u5b58\n<\/em><\/em>\t\tif(FILE_CACHE_ENABLED && $tim->tryServerCache()){\n\t\t \t\/\/\u6210\u529f\u7684\u8bdd\u8f93\u51fa\u7f13\u5b58\n<\/em><\/em>\t\t\texit(0);\n\t\t}\n\t\t\/\/\u68c0\u6d4b\u8bfb\u53d6\u670d\u52a1\u7aef\u7f13\u5b58\u65f6\u7684\u9519\u8bef\n<\/em><\/em>\t\t$tim->handleErrors();\n\t\t\/\/\u751f\u6210\u548c<strong>\u5904\u7406<\/strong><strong><strong>\u56fe\u7247<\/strong><\/strong>\u4e3b\u51fd\u6570\n<\/em><\/em>\t\t$tim->run();\n\t\t\/\/\u68c0\u6d4b<strong><strong>\u56fe\u7247<\/strong><\/strong>\u751f\u6210\u548c<strong>\u5904\u7406<\/strong>\u65f6\u7684\u9519\u8bef\n<\/em><\/em>\t\t$tim->handleErrors();\n\t\t\/\/\u7a0b\u5e8f\u6267\u884c\u5b8c\u6bd5\u8fd0\u884c\u6790\u6784\u65b9\u6cd5\u5e76\u9000\u51fa\n<\/em><\/em>\t\texit(0);\n\t}\n\t\/*\u6784\u9020\u65b9\u6cd5\uff0c\u7528\u6765\u83b7\u53d6\u548c\u8bbe\u7f6e\u4e00\u4e9b\u57fa\u672c\u5c5e\u6027*\/<\/em>\n\tpublic function __construct(){\n\t \t\/\/\u5c06\u5141\u8bb8\u7684\u57df\u8bbe\u4e3a\u5168\u5c40\u53d8\u91cf\n<\/em><\/em>\t \tglobal $ALLOWED_SITES;\n\t\t\/\/\u8bb0\u5f55\u5f00\u59cb\u65f6\u95f4\n<\/em><\/em>\t\t$this->startTime = microtime(true);\n\t\t\/\/\u8bbe\u7f6e\u65f6\u533a\n<\/em><\/em>\t\tdate_default_timezone_set('UTC');\n\t\t\/\/\u5199\u65e5\u5fd7\uff0c\u8bb0\u5f55\u8bf7\u6c42IP\u548c\u8bf7\u6c42URL\n<\/em><\/em>\t\t$this->debug(1, \"Starting new request from \" . $this->getIP() . \" to \" . $_SERVER['REQUEST_URI']);\n\t\t\/\/\u83b7\u53d6\u670d\u52a1\u5668\u6587\u6863\u6839\u76ee\u5f55\n<\/em><\/em>\t\t$this->calcDocRoot();\n\t\t\/\/\u83b7\u53d6\u6587\u4ef6\u7684\u4fee\u6539\u65f6\u95f4\u548cinode,inode\u53ea\u5728linux\u7cfb\u7edf\u4e0b\u6709\u6548\n<\/em><\/em>\t\t$this->salt = @filemtime(__FILE__) . '-' . @fileinode(__FILE__);\n\t\t\/\/\u8bb0\u5f55salt\u4fe1\u606f\uff0c\u7ea7\u522b3\n<\/em><\/em>\t\t$this->debug(3, \"Salt is: \" . $this->salt);\n\t\t\/\/\u5982\u679c\u5b9a\u4e49\u4e86\u7f13\u5b58\u6587\u4ef6\u5730\u5740\n<\/em><\/em>\t\tif(FILE_CACHE_DIRECTORY){\n\t\t \t\/\/\u5982\u679c\u8fd9\u4e2a\u5730\u5740\u4e0d\u5b58\u5728\uff0c\u6216\u4e3a\u975e\u76ee\u5f55\n<\/em><\/em>\t\t \tif(! is_dir(FILE_CACHE_DIRECTORY)){\n\t\t \t\t\/\/\u5efa\u7acb\u8fd9\u4e2a\u76ee\u5f55\n<\/em><\/em>\t\t\t \t@mkdir(FILE_CACHE_DIRECTORY);\n\t\t\t\t\/\/\u5982\u679c\u5efa\u7acb\u5931\u8d25\n<\/em><\/em>\t\t\t\tif(! is_dir(FILE_CACHE_DIRECTORY)){\n\t\t\t\t \t\/\/\u8bb0\u5f55\u9519\u8bef\u4fe1\u606f\uff0c\u505c\u6b62\u6267\u884c\n<\/em><\/em>\t\t\t\t\t$this->error(\"Could not create the file cache directory.\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\/\/\u5c06\u7f13\u5b58\u5730\u5740\u5199\u5165\u6210\u5458\u5c5e\u6027\n<\/em><\/em>\t\t\t$this->cacheDirectory = FILE_CACHE_DIRECTORY;\n\t\t\t\/\/\u5728\u7f13\u5b58\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2aindex.html\u6587\u4ef6\uff0c\u9632\u6b62\u5217\u76ee\u5f55\n<\/em><\/em>\t\t\tif (!touch($this->cacheDirectory . '\/index.html')) {\n\t\t\t \t\/\/\u5982\u679c\u51fa\u9519\uff0c\u8bb0\u5f55\u9519\u8bef\u4fe1\u606f\n<\/em><\/em>\t\t\t\t$this->error(\"Could not create the index.html file - to fix this create an empty file named index.html file in the cache directory.\");\n\t\t\t}\n\t\t\/\/\u5982\u679c\u6ca1\u5b9a\u4e49\u7f13\u5b58\u6587\u4ef6\u5730\u5740\uff0c\u5219\u7528\u7cfb\u7edf\u7684\u4e34\u65f6\u6587\u4ef6\u76ee\u5f55\u505a\u4e3a\u7f13\u5b58\u6587\u4ef6\u76ee\u5f55\n<\/em><\/em>\t\t} else {\n\t\t\t$this->cacheDirectory = sys_get_temp_dir();\n\t\t}\n\t\t\/\/\u8fdb\u884c\u7f13\u5b58\u68c0\u67e5\uff0c\u6e05\u9664\u8fc7\u671f\u7f13\u5b58\n<\/em><\/em>\t\t$this->cleanCache();\n\t\t\/\/\u8bb0\u5f55\u672c\u673a\u57df\u540d\n<\/em>