index.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. error_reporting(0);
  3. putenv('GDFONTPATH=' . realpath('.'));
  4. function tryFont($name){
  5. $rp=realpath('.');
  6. if(imageftbbox(12,0,$name,"M")[5]==0){
  7. $name=$rp."/".$name.".ttf";
  8. if(imageftbbox(12,0,$name,"M")[5]==0){
  9. return null;
  10. }
  11. }
  12. return $name;
  13. }
  14. $SCALE=1.25;
  15. $WIDTH=530*$SCALE;
  16. $HEIGHT=150*$SCALE;
  17. $im=imagecreatetruecolor($WIDTH,$HEIGHT);
  18. $BACKGROUND_COLOR=imagecolorallocate($im,248,248,248);
  19. $FONT_1=tryFont("OpenSans-Semibold");
  20. $FONT_1_SIZE=16*$SCALE;
  21. $FONT_2=tryFont("OpenSans-Light");
  22. $FONT_2_SIZE=24*$SCALE;
  23. $FONT_3=tryFont("OpenSans-Semibold");
  24. $FONT_3_SIZE=14*$SCALE;
  25. $FONT_4=tryFont("OpenSans-Semibold");
  26. $FONT_4_SIZE=10*$SCALE;
  27. $FONT_WATERMARK=tryFont("OpenSans-Light");
  28. $FONT_WATERMARK_SIZE=8*$SCALE;
  29. $TEXT_COLOR_1=imagecolorallocate($im,40,40,40);
  30. $TEXT_COLOR_2=imagecolorallocate($im,96,96,96);
  31. $TEXT_COLOR_3=imagecolorallocate($im,40,40,40);
  32. $TEXT_COLOR_4=imagecolorallocate($im,40,40,40);
  33. $TEXT_COLOR_WATERMARK=imagecolorallocate($im,160,160,160);
  34. $POSITION_Y_1=24*$SCALE;
  35. $POSITION_Y_2=78*$SCALE;
  36. $POSITION_Y_3=118*$SCALE;
  37. $POSITION_Y_4=146*$SCALE;
  38. $POSITION_Y_WATERMARK=146*$SCALE;
  39. $POSITION_X_DL=68*$SCALE;
  40. $POSITION_X_UL=200*$SCALE;
  41. $POSITION_X_PING=330*$SCALE;
  42. $POSITION_X_JIT=460*$SCALE;
  43. $POSITION_X_ISP=4*$SCALE;
  44. $DL_TEXT="Download";
  45. $UL_TEXT="Upload";
  46. $PING_TEXT="Ping";
  47. $JIT_TEXT="Jitter";
  48. $MBPS_TEXT="Mbps";
  49. $MS_TEXT="ms";
  50. $WATERMARK_TEXT="HTML5 Speedtest";
  51. $id=$_GET["id"];
  52. include_once('../telemetry/telemetry_settings.php');
  53. $conn=null; $q=null;
  54. $ispinfo=null; $dl=null; $ul=null; $ping=null; $jit=null;
  55. if($db_type=="mysql"){
  56. $conn = new mysqli($MySql_hostname, $MySql_username, $MySql_password, $MySql_databasename);
  57. $q = $conn->prepare("select ispinfo,dl,ul,ping,jitter from speedtest_users where id=?");
  58. $q->bind_param("i",$id);
  59. $q->execute();
  60. $q->bind_result($ispinfo,$dl,$ul,$ping,$jit);
  61. $q->fetch();
  62. }else if($db_type=="sqlite"){
  63. $conn = new PDO("sqlite:$Sqlite_db_file") or die();
  64. $q=$conn->prepare("select ispinfo,dl,ul,ping,jitter from speedtest_users where id=?") or die();
  65. $q->execute(array($id)) or die();
  66. $row=$q->fetch() or die();
  67. $ispinfo=$row["ispinfo"];
  68. $dl=$row["dl"];
  69. $ul=$row["ul"];
  70. $ping=$row["ping"];
  71. $jitter=$row["jitter"];
  72. $conn=null;
  73. }else if($db_type=="postgresql"){
  74. $conn_host = "host=$PostgreSql_hostname";
  75. $conn_db = "dbname=$PostgreSql_databasename";
  76. $conn_user = "user=$PostgreSql_username";
  77. $conn_password = "password=$PostgreSql_password";
  78. $conn = new PDO("pgsql:$conn_host;$conn_db;$conn_user;$conn_password") or die();
  79. $q=$conn->prepare("select ispinfo,dl,ul,ping,jitter from speedtest_users where id=?") or die();
  80. $q->execute(array($id)) or die();
  81. $row=$q->fetch() or die();
  82. $ispinfo=$row["ispinfo"];
  83. $dl=$row["dl"];
  84. $ul=$row["ul"];
  85. $ping=$row["ping"];
  86. $jitter=$row["jitter"];
  87. $conn=null;
  88. }else die();
  89. $ispinfo=json_decode($ispinfo,true)["processedString"];
  90. $dash=strrpos($ispinfo,"-");
  91. if(!($dash===FALSE)){
  92. $ispinfo=substr($ispinfo,$dash+2);
  93. $par=strrpos($ispinfo,"(");
  94. if(!($par===FALSE)) $ispinfo=substr($ispinfo,0,$par);
  95. }else $ispinfo="";
  96. $dlBbox=imageftbbox($FONT_1_SIZE,0,$FONT_1,$DL_TEXT);
  97. $ulBbox=imageftbbox($FONT_1_SIZE,0,$FONT_1,$UL_TEXT);
  98. $pingBbox=imageftbbox($FONT_1_SIZE,0,$FONT_1,$PING_TEXT);
  99. $jitBbox=imageftbbox($FONT_1_SIZE,0,$FONT_1,$JIT_TEXT);
  100. $dlMeterBbox=imageftbbox($FONT_2_SIZE,0,$FONT_2,$dl);
  101. $ulMeterBbox=imageftbbox($FONT_2_SIZE,0,$FONT_2,$ul);
  102. $pingMeterBbox=imageftbbox($FONT_2_SIZE,0,$FONT_2,$ping);
  103. $jitMeterBbox=imageftbbox($FONT_2_SIZE,0,$FONT_2,$jit);
  104. $mbpsBbox=imageftbbox($FONT_3_SIZE,0,$FONT_3,$MBPS_TEXT);
  105. $msBbox=imageftbbox($FONT_3_SIZE,0,$FONT_3,$MS_TEXT);
  106. $watermarkBbox=imageftbbox($FONT_WATERMARK_SIZE,0,$FONT_WATERMARK,$WATERMARK_TEXT);
  107. $POSITION_X_WATERMARK=$WIDTH-$watermarkBbox[4]-4*$SCALE;
  108. imagefilledrectangle($im, 0, 0, $WIDTH, $HEIGHT, $BACKGROUND_COLOR);
  109. imagefttext($im,$FONT_1_SIZE,0,$POSITION_X_DL-$dlBbox[4]/2,$POSITION_Y_1,$TEXT_COLOR_1,$FONT_1,$DL_TEXT);
  110. imagefttext($im,$FONT_1_SIZE,0,$POSITION_X_UL-$ulBbox[4]/2,$POSITION_Y_1,$TEXT_COLOR_1,$FONT_1,$UL_TEXT);
  111. imagefttext($im,$FONT_1_SIZE,0,$POSITION_X_PING-$pingBbox[4]/2,$POSITION_Y_1,$TEXT_COLOR_1,$FONT_1,$PING_TEXT);
  112. imagefttext($im,$FONT_1_SIZE,0,$POSITION_X_JIT-$jitBbox[4]/2,$POSITION_Y_1,$TEXT_COLOR_1,$FONT_1,$JIT_TEXT);
  113. imagefttext($im,$FONT_2_SIZE,0,$POSITION_X_DL-$dlMeterBbox[4]/2,$POSITION_Y_2,$TEXT_COLOR_2,$FONT_2,$dl);
  114. imagefttext($im,$FONT_2_SIZE,0,$POSITION_X_UL-$ulMeterBbox[4]/2,$POSITION_Y_2,$TEXT_COLOR_2,$FONT_2,$ul);
  115. imagefttext($im,$FONT_2_SIZE,0,$POSITION_X_PING-$pingMeterBbox[4]/2,$POSITION_Y_2,$TEXT_COLOR_2,$FONT_2,$ping);
  116. imagefttext($im,$FONT_2_SIZE,0,$POSITION_X_JIT-$jitMeterBbox[4]/2,$POSITION_Y_2,$TEXT_COLOR_2,$FONT_2,$jit);
  117. imagefttext($im,$FONT_3_SIZE,0,$POSITION_X_DL-$mbpsBbox[4]/2,$POSITION_Y_3,$TEXT_COLOR_3,$FONT_3,$MBPS_TEXT);
  118. imagefttext($im,$FONT_3_SIZE,0,$POSITION_X_UL-$mbpsBbox[4]/2,$POSITION_Y_3,$TEXT_COLOR_3,$FONT_3,$MBPS_TEXT);
  119. imagefttext($im,$FONT_3_SIZE,0,$POSITION_X_PING-$msBbox[4]/2,$POSITION_Y_3,$TEXT_COLOR_3,$FONT_3,$MS_TEXT);
  120. imagefttext($im,$FONT_3_SIZE,0,$POSITION_X_JIT-$msBbox[4]/2,$POSITION_Y_3,$TEXT_COLOR_3,$FONT_3,$MS_TEXT);
  121. imagefttext($im,$FONT_4_SIZE,0,$POSITION_X_ISP,$POSITION_Y_4,$TEXT_COLOR_4,$FONT_4,$ispinfo);
  122. imagefttext($im,$FONT_WATERMARK_SIZE,0,$POSITION_X_WATERMARK,$POSITION_Y_WATERMARK,$TEXT_COLOR_WATERMARK,$FONT_WATERMARK,$WATERMARK_TEXT);
  123. header('Content-Type: image/png');
  124. imagepng($im);
  125. imagedestroy($im);
  126. ?>