index.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. $WATERMARK_TEXT="LibreSpeed";
  3. error_reporting(0);
  4. putenv('GDFONTPATH=' . realpath('.'));
  5. function tryFont($name){
  6. $rp=realpath('.');
  7. if(imageftbbox(12,0,$name,"M")[5]==0){
  8. $name=$rp."/".$name.".ttf";
  9. if(imageftbbox(12,0,$name,"M")[5]==0){
  10. return null;
  11. }
  12. }
  13. return $name;
  14. }
  15. function format($d){
  16. if($d<10) return number_format($d,2,".","");
  17. if($d<100) return number_format($d,1,".","");
  18. return number_format($d,0,".","");
  19. }
  20. $SCALE=1.25;
  21. $WIDTH=400*$SCALE;
  22. $HEIGHT=229*$SCALE;
  23. $im=imagecreatetruecolor($WIDTH,$HEIGHT);
  24. $BACKGROUND_COLOR=imagecolorallocate($im,255,255,255);
  25. $FONT_LABEL=tryFont("OpenSans-Semibold");
  26. $FONT_LABEL_SIZE=14*$SCALE;
  27. $FONT_LABEL_SIZE_BIG=16*$SCALE;
  28. $FONT_METER=tryFont("OpenSans-Light");
  29. $FONT_METER_SIZE=20*$SCALE;
  30. $FONT_METER_SIZE_BIG=22*$SCALE;
  31. $FONT_MEASURE=tryFont("OpenSans-Semibold");
  32. $FONT_MEASURE_SIZE=12*$SCALE;
  33. $FONT_MEASURE_SIZE_BIG=12*$SCALE;
  34. $FONT_ISP=tryFont("OpenSans-Semibold");
  35. $FONT_ISP_SIZE=9*$SCALE;
  36. $FONT_WATERMARK=tryFont("OpenSans-Light");
  37. $FONT_WATERMARK_SIZE=8*$SCALE;
  38. $TEXT_COLOR_LABEL=imagecolorallocate($im,40,40,40);
  39. $TEXT_COLOR_DL_METER=imagecolorallocate($im,96,96,170);
  40. $TEXT_COLOR_UL_METER=imagecolorallocate($im,96,96,96);
  41. $TEXT_COLOR_PING_METER=imagecolorallocate($im,170,96,96);
  42. $TEXT_COLOR_JIT_METER=imagecolorallocate($im,170,96,96);
  43. $TEXT_COLOR_MEASURE=imagecolorallocate($im,40,40,40);
  44. $TEXT_COLOR_ISP=imagecolorallocate($im,40,40,40);
  45. $TEXT_COLOR_WATERMARK=imagecolorallocate($im,160,160,160);
  46. $POSITION_Y_DL_LABEL=105*$SCALE;
  47. $POSITION_Y_UL_LABEL=105*$SCALE;
  48. $POSITION_Y_PING_LABEL=24*$SCALE;
  49. $POSITION_Y_JIT_LABEL=24*$SCALE;
  50. $POSITION_Y_DL_METER=143*$SCALE;
  51. $POSITION_Y_UL_METER=143*$SCALE;
  52. $POSITION_Y_PING_METER=60*$SCALE;
  53. $POSITION_Y_JIT_METER=60*$SCALE;
  54. $POSITION_Y_DL_MEASURE=169*$SCALE;
  55. $POSITION_Y_UL_MEASURE=169*$SCALE;
  56. $POSITION_Y_PING_MEASURE=60*$SCALE;
  57. $POSITION_Y_JIT_MEASURE=60*$SCALE;
  58. $POSITION_Y_ISP=205*$SCALE;
  59. $POSITION_X_DL=120*$SCALE;
  60. $POSITION_X_UL=280*$SCALE;
  61. $POSITION_X_PING=125*$SCALE;
  62. $POSITION_X_JIT=275*$SCALE;
  63. $POSITION_X_ISP=4*$SCALE;
  64. $SMALL_SEP=8*$SCALE;
  65. $SEPARATOR_Y=211*$SCALE;
  66. $SEPARATOR_COLOR=imagecolorallocate($im,192,192,192);
  67. $POSITION_Y_WATERMARK=223*$SCALE;
  68. $DL_TEXT="Download";
  69. $UL_TEXT="Upload";
  70. $PING_TEXT="Ping";
  71. $JIT_TEXT="Jitter";
  72. $MBPS_TEXT="Mbps";
  73. $MS_TEXT="ms";
  74. $id=$_GET["id"];
  75. include_once('telemetry_settings.php');
  76. require 'idObfuscation.php';
  77. if($enable_id_obfuscation) $id=deobfuscateId($id);
  78. $conn=null; $q=null;
  79. $ispinfo=null; $dl=null; $ul=null; $ping=null; $jit=null;
  80. if($db_type=="mysql"){
  81. $conn = new mysqli($MySql_hostname, $MySql_username, $MySql_password, $MySql_databasename, $MySql_port);
  82. $q = $conn->prepare("select ispinfo,dl,ul,ping,jitter from speedtest_users where id=?");
  83. $q->bind_param("i",$id);
  84. $q->execute();
  85. $q->bind_result($ispinfo,$dl,$ul,$ping,$jit);
  86. $q->fetch();
  87. }else if($db_type=="sqlite"){
  88. $conn = new PDO("sqlite:$Sqlite_db_file") or die();
  89. $q=$conn->prepare("select ispinfo,dl,ul,ping,jitter from speedtest_users where id=?") or die();
  90. $q->execute(array($id)) or die();
  91. $row=$q->fetch() or die();
  92. $ispinfo=$row["ispinfo"];
  93. $dl=$row["dl"];
  94. $ul=$row["ul"];
  95. $ping=$row["ping"];
  96. $jit=$row["jitter"];
  97. $conn=null;
  98. }else if($db_type=="postgresql"){
  99. $conn_host = "host=$PostgreSql_hostname";
  100. $conn_db = "dbname=$PostgreSql_databasename";
  101. $conn_user = "user=$PostgreSql_username";
  102. $conn_password = "password=$PostgreSql_password";
  103. $conn = new PDO("pgsql:$conn_host;$conn_db;$conn_user;$conn_password") or die();
  104. $q=$conn->prepare("select ispinfo,dl,ul,ping,jitter from speedtest_users where id=?") or die();
  105. $q->execute(array($id)) or die();
  106. $row=$q->fetch() or die();
  107. $ispinfo=$row["ispinfo"];
  108. $dl=$row["dl"];
  109. $ul=$row["ul"];
  110. $ping=$row["ping"];
  111. $jit=$row["jitter"];
  112. $conn=null;
  113. }else die();
  114. $dl=format($dl);
  115. $ul=format($ul);
  116. $ping=format($ping);
  117. $jit=format($jit);
  118. $ispinfo=json_decode($ispinfo,true)["processedString"];
  119. $dash=strpos($ispinfo,"-");
  120. if(!($dash===FALSE)){
  121. $ispinfo=substr($ispinfo,$dash+2);
  122. $par=strrpos($ispinfo,"(");
  123. if(!($par===FALSE)) $ispinfo=substr($ispinfo,0,$par);
  124. }else $ispinfo="";
  125. $dlBbox=imageftbbox($FONT_LABEL_SIZE_BIG,0,$FONT_LABEL,$DL_TEXT);
  126. $ulBbox=imageftbbox($FONT_LABEL_SIZE_BIG,0,$FONT_LABEL,$UL_TEXT);
  127. $pingBbox=imageftbbox($FONT_LABEL_SIZE,0,$FONT_LABEL,$PING_TEXT);
  128. $jitBbox=imageftbbox($FONT_LABEL_SIZE,0,$FONT_LABEL,$JIT_TEXT);
  129. $dlMeterBbox=imageftbbox($FONT_METER_SIZE_BIG,0,$FONT_METER,$dl);
  130. $ulMeterBbox=imageftbbox($FONT_METER_SIZE_BIG,0,$FONT_METER,$ul);
  131. $pingMeterBbox=imageftbbox($FONT_METER_SIZE,0,$FONT_METER,$ping);
  132. $jitMeterBbox=imageftbbox($FONT_METER_SIZE,0,$FONT_METER,$jit);
  133. $mbpsBbox=imageftbbox($FONT_MEASURE_SIZE_BIG,0,$FONT_MEASURE,$MBPS_TEXT);
  134. $msBbox=imageftbbox($FONT_MEASURE_SIZE,0,$FONT_MEASURE,$MS_TEXT);
  135. $watermarkBbox=imageftbbox($FONT_WATERMARK_SIZE,0,$FONT_WATERMARK,$WATERMARK_TEXT);
  136. $POSITION_X_WATERMARK=$WIDTH-$watermarkBbox[4]-4*$SCALE;
  137. imagefilledrectangle($im, 0, 0, $WIDTH, $HEIGHT, $BACKGROUND_COLOR);
  138. imagefttext($im,$FONT_LABEL_SIZE_BIG,0,$POSITION_X_DL-$dlBbox[4]/2,$POSITION_Y_DL_LABEL,$TEXT_COLOR_LABEL,$FONT_LABEL,$DL_TEXT);
  139. imagefttext($im,$FONT_LABEL_SIZE_BIG,0,$POSITION_X_UL-$ulBbox[4]/2,$POSITION_Y_UL_LABEL,$TEXT_COLOR_LABEL,$FONT_LABEL,$UL_TEXT);
  140. imagefttext($im,$FONT_LABEL_SIZE,0,$POSITION_X_PING-$pingBbox[4]/2,$POSITION_Y_PING_LABEL,$TEXT_COLOR_LABEL,$FONT_LABEL,$PING_TEXT);
  141. imagefttext($im,$FONT_LABEL_SIZE,0,$POSITION_X_JIT-$jitBbox[4]/2,$POSITION_Y_JIT_LABEL,$TEXT_COLOR_LABEL,$FONT_LABEL,$JIT_TEXT);
  142. imagefttext($im,$FONT_METER_SIZE_BIG,0,$POSITION_X_DL-$dlMeterBbox[4]/2,$POSITION_Y_DL_METER,$TEXT_COLOR_DL_METER,$FONT_METER,$dl);
  143. imagefttext($im,$FONT_METER_SIZE_BIG,0,$POSITION_X_UL-$ulMeterBbox[4]/2,$POSITION_Y_UL_METER,$TEXT_COLOR_UL_METER,$FONT_METER,$ul);
  144. imagefttext($im,$FONT_METER_SIZE,0,$POSITION_X_PING-$pingMeterBbox[4]/2-$msBbox[4]/2-$SMALL_SEP/2,$POSITION_Y_PING_METER,$TEXT_COLOR_PING_METER,$FONT_METER,$ping);
  145. imagefttext($im,$FONT_METER_SIZE,0,$POSITION_X_JIT-$jitMeterBbox[4]/2-$msBbox[4]/2-$SMALL_SEP/2,$POSITION_Y_JIT_METER,$TEXT_COLOR_JIT_METER,$FONT_METER,$jit);
  146. imagefttext($im,$FONT_MEASURE_SIZE_BIG,0,$POSITION_X_DL-$mbpsBbox[4]/2,$POSITION_Y_DL_MEASURE,$TEXT_COLOR_MEASURE,$FONT_MEASURE,$MBPS_TEXT);
  147. imagefttext($im,$FONT_MEASURE_SIZE_BIG,0,$POSITION_X_UL-$mbpsBbox[4]/2,$POSITION_Y_UL_MEASURE,$TEXT_COLOR_MEASURE,$FONT_MEASURE,$MBPS_TEXT);
  148. imagefttext($im,$FONT_MEASURE_SIZE,0,$POSITION_X_PING+$pingMeterBbox[4]/2+$SMALL_SEP/2-$msBbox[4]/2,$POSITION_Y_PING_MEASURE,$TEXT_COLOR_MEASURE,$FONT_MEASURE,$MS_TEXT);
  149. imagefttext($im,$FONT_MEASURE_SIZE,0,$POSITION_X_JIT+$jitMeterBbox[4]/2+$SMALL_SEP/2-$msBbox[4]/2,$POSITION_Y_JIT_MEASURE,$TEXT_COLOR_MEASURE,$FONT_MEASURE,$MS_TEXT);
  150. imagefttext($im,$FONT_ISP_SIZE,0,$POSITION_X_ISP,$POSITION_Y_ISP,$TEXT_COLOR_ISP,$FONT_ISP,$ispinfo);
  151. imagefttext($im,$FONT_WATERMARK_SIZE,0,$POSITION_X_WATERMARK,$POSITION_Y_WATERMARK,$TEXT_COLOR_WATERMARK,$FONT_WATERMARK,$WATERMARK_TEXT);
  152. imagefilledrectangle($im, 0, $SEPARATOR_Y, $WIDTH, $SEPARATOR_Y, $SEPARATOR_COLOR);
  153. header('Content-Type: image/png');
  154. imagepng($im);
  155. imagedestroy($im);
  156. ?>