From 88f758ba10a093b86da3a15285c885a47df0faa7 Mon Sep 17 00:00:00 2001 From: Knah Tsaeb Date: Tue, 19 Mar 2013 17:07:13 +0100 Subject: [PATCH] Second release --- .htaccess | 10 ++++++- bin/000.png | Bin 0 -> 2585 bytes bin/404.png | Bin 0 -> 2178 bytes bin/error.png | Bin 0 -> 4267 bytes bin/loadingGen.png | Bin 0 -> 4272 bytes bin/mon.sh | 12 ++++++++ bin/rasterize.js | 10 ++++--- bin/thumb_server.sh | 59 ++++++++++++++++++++++++++++++------- favicon.ico | Bin 0 -> 101758 bytes index.php | 69 ++++++++++++++++++++++++++++++++++---------- readme.txt | 6 ++++ 11 files changed, 134 insertions(+), 32 deletions(-) create mode 100644 bin/000.png create mode 100644 bin/404.png create mode 100644 bin/error.png create mode 100644 bin/loadingGen.png create mode 100644 bin/mon.sh create mode 100644 favicon.ico diff --git a/.htaccess b/.htaccess index 8c115f6..4a81062 100644 --- a/.htaccess +++ b/.htaccess @@ -1,5 +1,13 @@ AddDefaultCharset UTF-8 Options -Indexes DirectoryIndex index.php index.html +Header set cache-control: public + + ExpiresActive On + ExpiresDefault "access plus 1 month" + ExpiresByType image/png "access plus 1 days" + ExpiresByType image/vnd.microsoft.icon "access plus 10 years" + ExpiresByType image/x-icon "access plus 10 years" + FileETag none -SetOutputFilter DEFLATE +SetOutputFilter DEFLATE \ No newline at end of file diff --git a/bin/000.png b/bin/000.png new file mode 100644 index 0000000000000000000000000000000000000000..f9bbe43045e6b31d614030baee37c70a8473e327 GIT binary patch literal 2585 zcmY*b2Q=K-8vjd1Cq#nTB?uF%j9E6?ixCNiZ{j*{6E5M_vYUgsoiYRb{AHd{KOibvff0~>71)ZIl84wg?sr~B*gF1_e z&!3%+qOR9BHl77^3o!>1Hlq({1wKALkeBIh4;uzw4o;Ep7Pnv`pTP&h7>oMeg*mdW z77zZW5*zQ%mti5Hp=SB- z*O+$c^!%xD-KJf9T212DuMsHe^P9KG>~cY}Koo2DO2PGLV<5T54c14cs*g42s8s6T z6cIKJ|8>@1W3+E|XO6ZId~NJSqiLxVi#*|=d>66jh8=r!glZExjt_IQMKc8-UkUsY96L({yxyhiwWtgWq+4T|JD8ygxt z?I=px)7X*SUCKr?Mh=z!{a|aRSwO@>iQG7Kt}&oXimSbX{XAd<6H0?|Gnve%ZR|7bx(uMPc?=|g+)qu)jOl`VmX=V)zM(xfacBr%Ksp7f}& zu<+}83J*Jwk&$tYaVs z)Mig-Cvm-4zvK!RbwsP=>fXnMFJHVJS(}@itXY%lii#Qh+XzVNQ;WPdR$wZc4k(VYgibz?arM$9L2@OT#z$Qd)x>En1I7= z#|gV$-^&NOT}6&(-WEM4Qt<(PQC@)AERq#rOPv1{N7d z%_OY7{g~s@;kVkB7GB_aUS7YPqYbB+3Y?o*{Zp(FFOj{2=yLO)tY0+8c2j5jyVlp` z5|fewPmZI-#l@$qTCsUJZ$reA>d?^bN-~)Pk;6MPGxOA-NKR2v4=E8putKTU-?EZ; zfeimsfkQw7IU>)E$K$W{+zj*@wmP8G;gUKJNP&HFe@Le@)sz4S9PT%>jODI)0TyHF zZ89!ZW#{PVIXgQ$)!T$BL@L#N^5ltKdAz|n#bcB$aeiZike!ngXi7svR&;cIs)@pMd1`8VV&HG$sy(Dl6#- zC5)`xV|;Fl{PGrSEIGd)@nLMNNbxEd$?33KQ$<+`@C|CDrn8&rS+){%`m*rD+bcDT z8hL&(_R?6^C(JkYe8vo*1s5p9a2XmJdb1EYn+^kdlc<@0F~AUafs2@+GnTu%A?0Od zO?7o$UaH;%?`AOCTUHi&b8)^~#aDB2x`l$EGnP&QGK-9+ylpz&N=Imy6*c|o)4N}z zrxQ2zWX~zS2Qs^M4$IfbWU}ebppB$R5COaxRuInBPK7wD^(<6pakd!NleDt$lp~?S z+)J_Tjg7YZaXZ`Fal>n4YQ~X~S|oG4v9IVnZAU*TF>##odupm6&lA&xx}WD3s`0p{ z#TWHW0zgq62B!ht7H0y6=W%bGxet2*I0#gcw@*9Zpd;$XbJbmxp@qL_`xsAi|l#C_Z zkb2b7ansUSUZ%IV7jzh7W%U=ca5N9)fDi@QpnsBc<9W7_`doLgn^s+}`#fpit&VBz zq^Eb**2V^!)H6LdcMAw^nI*Fl`)2VD8cX?XR zIo3~5-t7*WW@^6mAgrEvsk(R03zVw)keMm5z2k(as!4ioQlnjkKCc@3hBEelGT&dR zzt&O<(vfR$@WuW8eK`ceCT1BV50l6D5Rpn>NB8HW^pO&HWhe}ooSI_JwuBU330%LMR#Me-H(K)eQm{Gb&O{OESlGlcVpU-Y;aAvZ+-Mz@5OE(6c&hm>3;y_bwe=nJODJ_-Xf`0n=(HNj_ zZo0!omcD!`i)gDocB;++G<9?etbrP_K^H$4N>vrY#>QrJA)uzFCJiKi5HUu!Li4!4 zefyS-lCCH(FB({}h{; oxNth^oR->iVe9xmdCYetNf>zTON?!FJR literal 0 HcmV?d00001 diff --git a/bin/404.png b/bin/404.png new file mode 100644 index 0000000000000000000000000000000000000000..c43c47058fcdf45ef14d7c9a852e354b7cbf4b1d GIT binary patch literal 2178 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 B8C?JX literal 0 HcmV?d00001 diff --git a/bin/error.png b/bin/error.png new file mode 100644 index 0000000000000000000000000000000000000000..f069dbd80b03a26334a35affe37e03e69641020e GIT binary patch literal 4267 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 HP3Zpti|z=b literal 0 HcmV?d00001 diff --git a/bin/loadingGen.png b/bin/loadingGen.png new file mode 100644 index 0000000000000000000000000000000000000000..eb93c51f4fca134650aec03891d736d12ed10093 GIT binary patch literal 4272 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 literal 0 HcmV?d00001 diff --git a/bin/mon.sh b/bin/mon.sh new file mode 100644 index 0000000..9e83baa --- /dev/null +++ b/bin/mon.sh @@ -0,0 +1,12 @@ +#!/bin/bash +echo "PRESS CTRL+C FOR STOP MONITOR" +sleep 5 +while [ 1 ] +do + clear + echo "################################" + echo "Total request thumbshot : " $(ps -e | grep -v grep | grep thumb_ | wc -l) && # count thumb_server.sh process + echo "Number of thumbshot are made now : " $(ps -e | grep -v grep | grep phantomjs | wc -l) && # count phantomjs process + echo "Number of test error now : " $(ps -e | grep -v grep | grep curl | wc -l) # count thumb_server.sh => curl process + sleep 3 # 3 second between two refresh +done diff --git a/bin/rasterize.js b/bin/rasterize.js index db312af..9aef4b0 100644 --- a/bin/rasterize.js +++ b/bin/rasterize.js @@ -2,7 +2,7 @@ var page = new WebPage(), address, output, size; if (phantom.args.length < 2) { - console.log('Usage: rasterize.js URL filename'); + //console.log('Usage: rasterize.js URL filename'); phantom.exit(); } else { address = phantom.args[0]; @@ -12,13 +12,15 @@ if (phantom.args.length < 2) { page.open(address, function (status) { if (status !== 'success') { - console.log('Unable to load the address!'); + //console.log('Unable to load the address!'); + page.close(); + phantom.exit(); } else { window.setTimeout(function () { page.render(output); + page.close(); phantom.exit(); - }, 500); + }, 200); } }); } - diff --git a/bin/thumb_server.sh b/bin/thumb_server.sh index a66707e..b11bf7e 100755 --- a/bin/thumb_server.sh +++ b/bin/thumb_server.sh @@ -1,23 +1,54 @@ #!/bin/bash -# inspirated source http://www.cambus.net/blog/page/3/ +# inspirated source http://www.cambus.net/blog/page/3/ for global idea +# https://gist.github.com/rsvp/1171304 for httpstatus code +# All info at http://forge.leslibres.org/projects/soshot -site=$1 -md5Site=$2 -thumbWidth=$3 -onlyThumb=$4 +site=$1 # url must be encode by url_encode() or equivalent ex : http://google.com +md5Site=$2 # md5(url) is the name of final image +thumbSize=$3 # size of thumb widthxheight ex : 190x90 +onlyThumb=$4 # make only thumbshot no full size image +waitForResult=$5 # if true we try to make soon as possible or add to queue +maxThread=2 # max parralle work for me the best is processor core - 1 +timeOut=60 # default time out after this time the site are declared in error +log=false # log all generation success and error +randomSleep=`echo $((RANDOM%20))` +if [ ! $waitForResult ] +then + sleep `echo $((RANDOM%20))` + while [[ `ps -e | grep -v grep | grep phantomjs | wc -l` -ge $maxThread ]] + do + sleep `echo $((RANDOM%20))` + done +fi +start_time=`date +%s` #firstLevel=${md5Site:0:2} #secondLevel=${md5Site:2:2} -#mkdir -p "cache/img/$firstLevel/$secondLevel/" -./bin/phantomjs --ignore-ssl-errors=true /bin/rasterize.js "$site" "cache/tmp/$md5Site.png" -#convert "cache/tmp/$md5Site.png" -crop 1280x1024+0+0 "cache/img/$firstLevel/$secondLevel/$md5Site.png" -#convert "cache/img/$firstLevel/$secondLevel/$md5Site.png" -filter Lanczos -thumbnail "$thumbWidth" "cache/img/$firstLevel/$secondLevel/$md5Site""_thumb.png" +#mkdir -p "bin/img/$firstLevel/$secondLevel/" +timeout $timeOut ./bin/phantomjs --disk-cache=false --local-storage-path=/bin/ --ignore-ssl-errors=true /bin/rasterize.js "$site" "cache/tmp/$md5Site.png" +if [ ! -f "cache/tmp/$md5Site.png" ] +then + echo 0 + errorCode=`echo $(curl -k --write-out %{http_code} --silent -S --connect-timeout $timeOut \--no-keepalive --output /dev/null $site)` + case $errorCode in + 000) cp "bin/000.png" "cache/img/$md5Site""_thumb.png" && cp "bin/000.png" "cache/img/$md5Site.png" ;; + 404) cp "bin/404.png" "cache/img/$md5Site""_thumb.png" && cp "bin/404.png" "cache/img/$md5Site.png" ;; + *) cp "bin/error.png" "cache/img/$md5Site""_thumb.png" && cp "bin/error.png" "cache/img/$md5Site.png" ;; + esac + if $log + then + end_time=`date +%s` + logDate=`date +'[%a %d %b %Y] [%H:%M:%S]'` + echo $logDate `expr $end_time - $start_time`s --- ERROR --- httpstatus $errorCode --- $site >> 'cache/logs/logs.txt' + fi + exit +fi if [ $onlyThumb ] then - convert "cache/tmp/$md5Site.png" -crop 1280x1024+0+0 -filter Lanczos -thumbnail "$thumbWidth" "cache/img/$md5Site""_thumb.png" + convert "cache/tmp/$md5Site.png" -crop 1280x1024+0+0 -filter Lanczos -thumbnail "$thumbSize" "cache/img/$md5Site""_thumb.png" else convert "cache/tmp/$md5Site.png" -crop 1280x1024+0+0 "cache/img/$md5Site.png" && - convert "cache/img/$md5Site.png" -filter Lanczos -thumbnail "$thumbWidth" "cache/img/$md5Site""_thumb.png" + convert "cache/img/$md5Site.png" -filter Lanczos -thumbnail "$thumbSize" "cache/img/$md5Site""_thumb.png" fi rm "cache/tmp/$md5Site.png" @@ -37,3 +68,9 @@ else echo 0 fi fi +if $log +then + end_time=`date +%s` + logDate=`date +'[%a %d %b %Y] [%H:%M:%S]'` + echo $logDate `expr $end_time - $start_time`s --- $site >> 'cache/logs/logs.txt' +fi diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..52b3be95557c61d5704dce73d64e4e34524127b3 GIT binary patch literal 101758 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 NTgtV1$B5~!@)vpp#6AE3 literal 0 HcmV?d00001 diff --git a/index.php b/index.php index c264e7b..9533463 100644 --- a/index.php +++ b/index.php @@ -3,14 +3,23 @@ if (empty($_SESSION)) { session_start(); } date_default_timezone_set('Europe/Paris'); +// change if you want no inpact $GLOBALS['config']['onlyLocalServer'] = false; -$GLOBALS['config']['private'] = true; +// soshot only accept request by 127.0.0.1 +$GLOBALS['config']['NoWebPage'] = false; +// No form for post url only acces by GET method $GLOBALS['config']['maxErrorBeforeBan'] = 3; +// After 3 criticla error ban user $GLOBALS['config']['banTime'] = 60; +// Ban for 60 minutes $GLOBALS['config']['defaultUrl'] = 'https://google.com'; +// default url for form $GLOBALS['config']['defaultThumbSize'] = '120x90'; +// default size for thumbnail $GLOBALS['config']['onlyThumb'] = true; +// generate only thumbnail or generate thumb nail + 1280x1024 image $GLOBALS['config']['thumbSize'] = array(1 => '100x80', '120x90', '200x160', '300x240', '400x320', '500x400'); +// list of available size for thumb if (!file_exists('cache/config/genConf.php')) { install(); @@ -26,6 +35,13 @@ if (($GLOBALS['config']['onlyLocalServer'] === true && $_SERVER['REMOTE_ADDR'] ! exit(); } +if ($GLOBALS['config']['NoWebPage'] === true && empty($_GET)) { + header("HTTP/1.0 404 Not Found"); + echo "

404 Not Found

"; + echo "The page that you have requested could not be found."; + exit(); +} + if (get_magic_quotes_gpc()) { function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); @@ -38,18 +54,30 @@ if (get_magic_quotes_gpc()) { } function testExistImg($file) { - if (file_exists($file . '_thumb.png') && file_exists($file . '.png')) { - return true; + if ($GLOBALS['config']['onlyThumb'] === true) { + if (file_exists($file . '_thumb.png')) { + return true; + } else { + return false; + } } else { - return false; + if (file_exists($file . '_thumb.png') && file_exists($file . '.png')) { + return true; + } else { + return false; + } } } -function launchScript($url, $md5Url, $width) { +function launchScript($url, $md5Url, $width, $waitForResult = false) { $md5Url = escapeshellarg($md5Url); $url = escapeshellarg($url); $width = escapeshellarg($width); - exec('bin/thumb_server.sh ' . $url . ' ' . $md5Url . ' ' . $width . ' ' . (bool)$GLOBALS['config']['onlyThumb'], $result); + if ($waitForResult === false) { + exec('bin/thumb_server.sh ' . $url . ' ' . $md5Url . ' ' . $width . ' ' . (bool)$GLOBALS['config']['onlyThumb'] . ' > /dev/null &', $result); + } else { + exec('bin/thumb_server.sh ' . $url . ' ' . $md5Url . ' ' . $width . ' ' . (bool)$GLOBALS['config']['onlyThumb'] . ' 1', $result); + } return $result; } @@ -137,6 +165,9 @@ function install() { if (!is_file('cache/logs/banUser.php')) { file_put_contents('cache/logs/banUser.php', ""); } + if (!is_file('cache/logs/log.php')) { + touch('cache/logs/log.php'); + } echo '
This is the key for generate thumbnail whith GET method. Save it, this key is secret, don\'t share it.

', $serverKey, '

'; checkInstall(); } @@ -186,13 +217,18 @@ if ($_GET) { $file = 'cache/img/' . $md5Url; if (testExistImg($file) !== true || isset($ui['fr']) && (int)$ui['fr'] === 1) { - $res = launchScript($defUrl, $md5Url, $width); - if ((int)$res !== 1) { - die('Internal error'); + if (isset($ui['iw']) && (int)$ui['iw'] === 1) { + launchScript($defUrl, $md5Url, $width, true); + } else { + $res = launchScript($defUrl, $md5Url, $width); + header("Content-type: image/png"); + header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); + echo file_get_contents('bin/loadingGen.png'); + exit(); } } - header("Content-type: image/png"); + header('Expires: ', gmdate('D, d M Y H:i:s', time()) . ' GMT'); if (!empty($ui['t']) && $ui['t'] === 'full') { echo file_get_contents($file . '.png'); } else { @@ -229,10 +265,7 @@ if ($_POST) { $file = 'cache/img/' . $md5Url; if (testExistImg($file) !== true || isset($ui['fr']) && (int)$ui['fr'] === 1) { - $res = launchScript($defUrl, $md5Url, $width); - if ((int)$res !== 1) { - die('Internal error'); - } + launchScript($defUrl, $md5Url, $width, true); } $success = array('normal' => $file . '.png', 'thumb' => $file . '_thumb.png'); } @@ -281,9 +314,13 @@ if (empty($defUrl)) {
'; + if ($GLOBALS['config']['onlyThumb'] === true) { + echo ''; + } else { + echo ''; + } } ?>
- \ No newline at end of file + diff --git a/readme.txt b/readme.txt index 8e09907..30b43da 100644 --- a/readme.txt +++ b/readme.txt @@ -1 +1,7 @@ All info in the homepage http://forge.leslibres.org/projects/soshot + +*** Thanks *** +Icon by http://www.iconfinder.com/icondetails/7917/128/camera_file_image_icon +Bash script idea by http://www.cambus.net/blog/page/3/ +Httpstatus in bash by https://gist.github.com/rsvp/1171304 +The engine phantomjs by http://phantomjs.org/