Crons Verbeteren
16-06-2009 17:36
Offline Stuur privëbericht
www.Sedio.nl
Berichten: 170

Even een artikel over crons verbeteren want ik zie steeds meer topics die daar over gaan.

Je crons werken waarschijnlijk niet goed als er een tijd niemand op je site is geweest dan krijgt iedereen er maar voor een 1 uur ze geld ect. erbij dat is natuurlijk niet fijn dus let goed op dan gaan ze vanzelf werken.

het is slim om het artikel door te lezen als je er weinig vanaf weet dan leer je er nog wat van ik zet onderaan wel een voorbeeld van hoe het er uiteindelijk eruit zou moeten zien mocht het je zelf niet lukken

Je hebt waarschijnlijk een _include-config.php die er ongeveer nu ongeveer zo uit zien:

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<?php /* ------------------------- */ 

  
if(!(@mysql_pconnect("localhost","","") && @mysql_select_db(""))) { 
    print <<<ENDHTML
<html> 


<head> 
<title>[( Criminals )]</title> 
<link rel="stylesheet" type="text/css" href="css-v1.css"> 

</head> 


<body style="background: #AA3C3C; margin: 0px;"> 
  <table width=100%> 
    <tr><td class="subTitle"><b>Database Error</b></td></tr> 
    <tr><td class="mainTxt"> 
    Er is een fout opgetreden in de database 
    </td></tr> 
  </table> 
</body> 

</html> 
ENDHTML; 
    exit; 
  } 



  session_start(); 
  include("_include-funcs.php"); 
  if(isset(
$_SESSION['login'])) { 
    
$dbres              = mysql_query("SELECT *,UNIX_TIMESTAMP(`signup`) AS `signup`,UNIX_TIMESTAMP(`online`) AS `online` FROM `[users]` WHERE `login`='{$_SESSION['login']}'"); 
    
$data               = mysql_fetch_object($dbres); 
  } 



  if(((count(
$_POST) > 0 && !isset($_POST['omnilog'])) || ($_POST['omnilog'] == 1 && count($_GET) > 1)) && isset($OMNILOG)) { 
    
$forwardedFor           = ($_SERVER['HTTP_X_FORWARDED_FOR'] != "") ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['HTTP_CLIENT_IP']; 
    
$forwardedFor           = preg_replace('/, .+/','',$forwardedFor); 
    
$postVars               = addslashes(var_export($_POST,TRUE)); 
    if(
$postVars == "array (n)" || (count($_POST) == 1 && isset($_POST['omnilog']))) 
      
$postVars             = ""; 
    
$getVars                = addslashes(var_export($_GET,TRUE)); 
    if(
$getVars == "array (n)") 
      
$getVars              = ""; 
    mysql_query("INSERT INTO `[omnilog]` VALUES(NOW(),'
{$_COOKIE['login']}','{$_SERVER['REMOTE_ADDR']}','$forwardedFor','{$_SERVER['PHP_SELF']}','$postVars','$getVars')"); 
  } 

  foreach(
$_POST as $key => $value) { 
    if(gettype(
$_POST[$key]) == "array") 
      foreach(
$_POST[$key] as $key2 => $value2
        
$_POST[$key][$key2]     = addslashes($_POST[$key][$key2]); 
    else 
      
$_POST[$key]          = addslashes($_POST[$key]); 
  } 
  foreach(
$_GET as $key => $value) { 
    if(gettype(
$_GET[$key]) == "array") 
      foreach(
$_GET[$key] as $key2 => $value2
        
$_GET[$key][$key2]      = addslashes($_GET[$key][$key2]); 
    else 
      
$_GET[$key]           = addslashes($_GET[$key]); 
  } 
  foreach(
$_COOKIE as $key => $value) { 
    if(gettype(
$_COOKIE[$key]) == "array") 
      foreach(
$_COOKIE[$key] as $key2 => $value2
        
$_COOKIE[$key][$key2]       = addslashes($_COOKIE[$key][$key2]); 
    else 
      
$_COOKIE[$key]            = addslashes($_COOKIE[$key]); 
  } 



  
$clientIP             = $_SERVER['REMOTE_ADDR']; 
  
$forwardedFor             = ($_SERVER['HTTP_X_FORWARDED_FOR'] != "") ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['HTTP_CLIENT_IP']; 
  
$forwardedFor             = preg_replace('/, .+/','',$forwardedFor); 
  
$dbres                = mysql_query("SELECT `id` FROM `[users]` WHERE `level`='-1' AND (`IP`='$clientIP' OR `IP`='$forwardedFor')"); 
  if(mysql_num_rows(
$dbres) != 0) { 
    print <<<ENDHTML
<html> 


<head> 
<title>[( Criminals )]</title> 
<link rel="stylesheet" type="text/css" href="css-v1.css"> 

</head> 


<body style="background: #AA3C3C; margin: 0px;"> 
  <table width=100% height=100%> 
    <tr><td class="subTitle"><b>Ban</b></td></tr> 
    <tr><td class="mainTxt"> 
    Het IP waarmee je speelt is geband 
    </td></tr> 
  </table> 
</body> 

</html> 
ENDHTML; 
    exit; 
  } 



  if(isset(
$UPDATE_DB)) { 
    
$dbres              = mysql_query("SELECT UNIX_TIMESTAMP(`time`) AS `time`,`name` FROM `[cron]`"); 
    while(
$x = mysql_fetch_object($dbres)) 
      
$update[$x->name]     = $x->time

    if(floor(
$update['hour']/3600) != floor(time()/3600)) { 
      
$dbres                = mysql_query("SELECT GET_LOCK('hour_update',0)"); 
      if(mysql_result(
$dbres,0) == 1) { 
        
$cron_pass          = "secretcronpassword"; 
        mysql_query("UPDATE `[cron]` SET `time`=NOW() WHERE `name`='hour'"); 
        include("_cron_hour.php"); 
        mysql_query("SELECT RELEASE_LOCK('hour_update')"); 
      } 
    } 

    if(floor(
$update['day']/86400) != floor(time()/86400)) { 
      
$dbres                = mysql_query("SELECT GET_LOCK('day_update',0)"); 
      if(mysql_result(
$dbres,0) == 1) { 
        
$cron_pass          = "secretcronpassword"; 
        mysql_query("UPDATE `[cron]` SET `time`=NOW() WHERE `name`='day'"); 
        include("_cron_day.php"); 
        mysql_query("SELECT RELEASE_LOCK('day_update')"); 
      } 
    } 

    if(floor(
$update['week']/604800) != floor(time()/604800)) { 
      
$dbres                = mysql_query("SELECT GET_LOCK('week_update',0)"); 
      if(mysql_result(
$dbres,0) == 1) { 
        
$cron_pass          = "secretcronpassword"; 
        mysql_query("UPDATE `[cron]` SET `time`=NOW() WHERE `name`='week'"); 
        include("_cron_week.php"); 
        mysql_query("SELECT RELEASE_LOCK('week_update')"); 
      } 
    } 

    if(date('n',
$update['month']) != date('n',time())) { 
      
$dbres                = mysql_query("SELECT GET_LOCK('month_update',0)"); 
      if(mysql_result(
$dbres,0) == 1) { 
        
$cron_pass          = "secretcronpassword"; 
        mysql_query("UPDATE `[cron]` SET `time`=NOW() WHERE `name`='month'"); 
        include("_cron_month.php"); 
        mysql_query("SELECT RELEASE_LOCK('month_update')"); 
      } 
    } 

    if((date('G',time()) >= 16 && date('z',time()) != date('z',
$update['horserace'])) || (date('G',time()) >= 21 && date('G',$update['horserace']) < 21)) { 
      
$dbres                = mysql_query("SELECT GET_LOCK('horserace_update',0)"); 
      if(mysql_result(
$dbres,0) == 1) { 
        
$cron_pass          = "secretcronpassword"; 
        mysql_query("UPDATE `[cron]` SET `time`=NOW() WHERE `name`='horserace'"); 
        include("_cron_horserace.php"); 
        mysql_query("SELECT RELEASE_LOCK('horserace_update')"); 
      } 
    } 
  } 

/* ------------------------- */ ?>


Je ziet dus dat het stuk script wat de crons uitvoert helemaal onderaan staat dus hij pakt het niet goed dat gaan we veranderen

stap 1:

zet het script dat de crons laat uitvoeren (regel 108 tot en met 162 in de bovenstaande code) ergens tussen regel 28 en 30 dat pakt hij het beter en het werkt dus ookal is er niemand op je website geweest.

stap 2:

Er staat in het stukje script van de crons deze code:

Code | Selecteer Alles
minimaliseren
1
2
3
4
<?php // <-- dit stukje hiervoor niet kopieeren

        
mysql_query("UPDATE `[cron]` SET `time`=NOW() WHERE `name`='horserace'"); 
        include(
"_cron_horserace.php");


je moet dat veranderen in:

Code | Selecteer Alles
minimaliseren
1
2
3
4
<?php // <-- dit stukje hiervoor niet kopieeren

        
include("_cron_horserace.php"); 
        
mysql_query("UPDATE `[cron]` SET `time`=NOW() WHERE `name`='horserace'");


LETOP!!! het geldt alleen voor _cron_month.php en _cron_horserace.php je draait het als het ware om dus eerst komt de include en daarna de mysql_query:

stap 3:

nu gaan we bij het zelfde stukje _cron_hour.php, _cron_day.php en _cron_week.php aanpassen

de regels die je even moet zoeken bij alle 3:

Code | Selecteer Alles
minimaliseren
1
2
3
4
<?php // <-- dit stukje niet kopieeren

mysql_query("UPDATE `[cron]` SET `time`=NOW() WHERE `name`='hour'");  
        include(
"_cron_hour.php");


je vervangt weer die 2 regels 3 keer in het volgende:

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
<?php // <-- dit stukje hiervoor niet kopieeren

    
$times                = (floor(time()/3600))-(floor($update['hour']/3600)); 
    
$date                $update['hour']+3600*$times
    
$date                date("Y-m-d H:i:s"$date); 
        for(
$nr 1$nr <= $times$nr++) { 
          include(
"_cron_hour.php"); 
        } 
        
mysql_query("UPDATE `[cron]` SET `time`='" $date "' WHERE `name`='hour'");


je moet er alleen wel weer op letten dat je het hour en het 3600 (aantal seconden in een uur)ook verandert in day of week als je er mee bezig bent
dus:
bij dag (86400 sec)
bij week (604800 sec)

stap 5

zoek dit ongeveer bij regel 106:
Code | Selecteer Alles
minimaliseren
1
2
3
<?php // <-- dit stukje hiervoor niet kopieeren

if(isset($_SESSION['login'])) {


verander dat in:

Code | Selecteer Alles
minimaliseren
1
2
3
<?php // <-- dit stukje hiervoor niet kopieeren

if(check_login() === true) {

dan is je spel ook weer wat veiliger.


ok dit is het einde hier is hoe het er uit zou moeten zien:

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<?php /* ------------------------- */ 

  
if(!(@mysql_pconnect("localhost","","") && @mysql_select_db(""))) { 
    print <<<ENDHTML
<html> 


<head> 
<title>[( Criminals )]</title> 
<link rel="stylesheet" type="text/css" href="css-v1.css"> 

</head> 


<body style="background: #AA3C3C; margin: 0px;"> 
  <table width=100%> 
    <tr><td class="subTitle"><b>Database Error</b></td></tr> 
    <tr><td class="mainTxt"> 
    Er is een fout opgetreden in de database 
    </td></tr> 
  </table> 
</body> 

</html> 
ENDHTML; 
    exit; 
  } 



  if(isset(
$UPDATE_DB)) { 
    
$dbres              = mysql_query("SELECT UNIX_TIMESTAMP(`time`) AS `time`,`name` FROM `[cron]`"); 
    while(
$x = mysql_fetch_object($dbres)) 
      
$update[$x->name]     = $x->time

    if(floor(
$update['hour']/3600) != floor(time()/3600)) { 
      
$dbres                = mysql_query("SELECT GET_LOCK('hour_update',0)"); 
      if(mysql_result(
$dbres,0) == 1) { 
        
$cron_pass            = "secretcronpassword"; 
    
$times                = (floor(time()/3600))-(floor($update['hour']/3600)); 
    
$date                = $update['hour']+3600*$times
    
$date                = date("Y-m-d H:i:s", $date); 
        for(
$nr = 1; $nr <= $times$nr++) { 
          include("_cron_hour.php"); 
        } 
        mysql_query("UPDATE `[cron]` SET `time`='
{$date}' WHERE `name`='hour'"); 
        mysql_query("SELECT RELEASE_LOCK('hour_update')"); 
      } 
    } 

    if(floor(
$update['day']/86400) != floor(time()/86400)) { 
      
$dbres                = mysql_query("SELECT GET_LOCK('day_update',0)"); 
      if(mysql_result(
$dbres,0) == 1) { 
        
$cron_pass            = "secretcronpassword"; 
    
$times                = (floor(time()/86400))-(floor($update['day']/86400)); 
    
$date                = $update['day']+86400*$times
    
$date                = date("Y-m-d H:i:s", $date); 
        for(
$nr = 1; $nr <= $times$nr++) { 
          include("_cron_day.php"); 
        } 
        mysql_query("UPDATE `[cron]` SET `time`='
{$date}' WHERE `name`='day'"); 
        mysql_query("SELECT RELEASE_LOCK('day_update')"); 
      } 
    } 

    if(floor(
$update['week']/604800) != floor(time()/604800)) { 
      
$dbres                = mysql_query("SELECT GET_LOCK('week_update',0)"); 
      if(mysql_result(
$dbres,0) == 1) { 
        
$cron_pass            = "secretcronpassword"; 
    
$times                = (floor(time()/604800))-(floor($update['week']/604800)); 
    
$date                = $update['week']+604800*$times
    
$date                = date("Y-m-d H:i:s", $date); 
        for(
$nr = 1; $nr <= $times$nr++) { 
          include("_cron_week.php"); 
        } 
        mysql_query("UPDATE `[cron]` SET `time`='
{$date}' WHERE `name`='week'"); 
        mysql_query("SELECT RELEASE_LOCK('week_update')"); 
      } 
    } 

    if(date('n',
$update['month']) != date('n',time())) { 
      
$dbres                = mysql_query("SELECT GET_LOCK('month_update',0)"); 
      if(mysql_result(
$dbres,0) == 1) { 
        
$cron_pass          = "secretcronpassword"; 
        include("_cron_month.php"); 
        mysql_query("UPDATE `[cron]` SET `time`=NOW() WHERE `name`='month'"); 
        mysql_query("SELECT RELEASE_LOCK('month_update')"); 
      } 
    } 

    if((date('G',time()) >= 16 && date('z',time()) != date('z',
$update['horserace'])) || (date('G',time()) >= 21 && date('G',$update['horserace']) < 21)) { 
      
$dbres                = mysql_query("SELECT GET_LOCK('horserace_update',0)"); 
      if(mysql_result(
$dbres,0) == 1) { 
        
$cron_pass          = "secretcronpassword"; 
        include("_cron_horserace.php"); 
        mysql_query("UPDATE `[cron]` SET `time`=NOW() WHERE `name`='horserace'"); 
        mysql_query("SELECT RELEASE_LOCK('horserace_update')"); 
      } 
    } 
  } 



  session_start(); 
  include("_include-funcs.php"); 
  if(check_login() === true) { 
    
$dbres              = mysql_query("SELECT *,UNIX_TIMESTAMP(`signup`) AS `signup`,UNIX_TIMESTAMP(`online`) AS `online` FROM `[users]` WHERE `login`='{$_SESSION['login']}'"); 
    
$data               = mysql_fetch_object($dbres); 
  } 



  if(((count(
$_POST) > 0 && !isset($_POST['omnilog'])) || ($_POST['omnilog'] == 1 && count($_GET) > 1)) && isset($OMNILOG)) { 
    
$forwardedFor           = ($_SERVER['HTTP_X_FORWARDED_FOR'] != "") ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['HTTP_CLIENT_IP']; 
    
$forwardedFor           = preg_replace('/, .+/','',$forwardedFor); 
    
$postVars               = addslashes(var_export($_POST,TRUE)); 
    if(
$postVars == "array (n)" || (count($_POST) == 1 && isset($_POST['omnilog']))) 
      
$postVars             = ""; 
    
$getVars                = addslashes(var_export($_GET,TRUE)); 
    if(
$getVars == "array (n)") 
      
$getVars              = ""; 
    mysql_query("INSERT INTO `[omnilog]` VALUES(NOW(),'
{$_COOKIE['login']}','{$_SERVER['REMOTE_ADDR']}','$forwardedFor','{$_SERVER['PHP_SELF']}','$postVars','$getVars')"); 
  } 

  foreach(
$_POST as $key => $value) { 
    if(gettype(
$_POST[$key]) == "array") 
      foreach(
$_POST[$key] as $key2 => $value2
        
$_POST[$key][$key2]     = addslashes($_POST[$key][$key2]); 
    else 
      
$_POST[$key]          = addslashes($_POST[$key]); 
  } 
  foreach(
$_GET as $key => $value) { 
    if(gettype(
$_GET[$key]) == "array") 
      foreach(
$_GET[$key] as $key2 => $value2
        
$_GET[$key][$key2]      = addslashes($_GET[$key][$key2]); 
    else 
      
$_GET[$key]           = addslashes($_GET[$key]); 
  } 
  foreach(
$_COOKIE as $key => $value) { 
    if(gettype(
$_COOKIE[$key]) == "array") 
      foreach(
$_COOKIE[$key] as $key2 => $value2
        
$_COOKIE[$key][$key2]       = addslashes($_COOKIE[$key][$key2]); 
    else 
      
$_COOKIE[$key]            = addslashes($_COOKIE[$key]); 
  } 



  
$clientIP             = $_SERVER['REMOTE_ADDR']; 
  
$forwardedFor             = ($_SERVER['HTTP_X_FORWARDED_FOR'] != "") ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['HTTP_CLIENT_IP']; 
  
$forwardedFor             = preg_replace('/, .+/','',$forwardedFor); 
  
$dbres                = mysql_query("SELECT `id` FROM `[users]` WHERE `level`='-1' AND (`IP`='$clientIP' OR `IP`='$forwardedFor')"); 
  if(mysql_num_rows(
$dbres) != 0) { 
    print <<<ENDHTML
<html> 


<head> 
<title>[( Criminals )]</title> 
<link rel="stylesheet" type="text/css" href="css-v1.css"> 

</head> 


<body style="background: #AA3C3C; margin: 0px;"> 
  <table width=100% height=100%> 
    <tr><td class="subTitle"><b>Ban</b></td></tr> 
    <tr><td class="mainTxt"> 
    Het IP waarmee je speelt is geband 
    </td></tr> 
  </table> 
</body> 

</html> 
ENDHTML; 
    exit; 
  } 

/* ------------------------- */ ?>


Voor vragen PM me maar
Mvg,
Melvin
Berichten: 258
Offline Stuur privébericht
Hoe land heb je er wel niett overgedaan om dit te maken ?
2010-04-07 21:20:13
Berichten: 29
Offline Stuur privébericht
Bedankt voor de uitleg.

Heb je misschien enig idee waarom de crons totaal niet werken?
de includeconfig staat goed, de crons is niks mis mee?
Maar ze worden niet geladen.

hoe zou de database van de crons eruit moeten zien?
dan heb ik het nu over de structuur en de data.
2011-02-10 11:21:03