NArc0t1c Posted August 2, 2007 Share Posted August 2, 2007 Hello. I have a problem with a script I am trying to make. I know it's correct, but it giving me an Unsupported operand types error. What causes this? It's an if statement, with a calculation; surely it cannot be that! Here is a part of the script: <?php $time = time(); // Generate time. $cron_minute_run = 60; // Seconds in a minute. $last_minute_run = file("crons/cron_minute.txt"); // Get previous time. if ($time - $last_minute_run >= $cron_minute_run) { $start_min_timer = microtime(); // Start timer. if ($time - $last_minute_run / 60 > 1) { $minute_run_no = $time - $last_minute_run / 60; // Calculate how many times to run. } else { $minute_run_no = 1; // Only run once. } for ($i = 0; $i < $minute_run_no; $i++) { // Run x times. $do = mysql_query("UPDATE table SET col_2=col_2-1 WERE other > 0", $c); $do = mysql_query("UPDATE table SET col=col-1 WHERE other > 0", $c); if (empty($do)) { mail("me@domain.suffix", "Minute Cron not run.", "The minute cron could not run because of a mysql error.", "From: me@domain.suffix"); // Send mail stating there is an error. } else { $open = fopen("crons/cron_minute.txt", "w"); //Write time to file for next use. fputs($open, time()); fclose($open); $end_min_timer = microtime(); // End timer. $total_min_timer = $start_min_timer - $end_min_timer; // Calculate timer. mail("me@domain.suffix", "Minute Cron was run.", "The minute cron was run succesfully.\r\n" . "Time: $time\r\n" . "Time Took: $start_min_timer - $end_min_timer\r\n" . "Total: $total_min_timer.", "From: me@domain.suffix"); // Send a mail for statistics. } } } exit; //No need to continue. ?> Thanks.. Quote Link to comment Share on other sites More sharing options...
btherl Posted August 2, 2007 Share Posted August 2, 2007 Where is the error reported? Quote Link to comment Share on other sites More sharing options...
ToonMariner Posted August 2, 2007 Share Posted August 2, 2007 As you don't report which line of code this is on I can only guess its in the math doen inside the if statements... try this... <?php $time = time(); // Generate time. $cron_minute_run = 60; // Seconds in a minute. $last_minute_run = file("crons/cron_minute.txt"); // Get previous time. if (($time - $last_minute_run) >= $cron_minute_run) { $start_min_timer = microtime(); // Start timer. if ((($time - $last_minute_run) / 60) > 1) { $minute_run_no = ($time - $last_minute_run) / 60; // Calculate how many times to run. } else { $minute_run_no = 1; // Only run once. } for ($i = 0; $i < $minute_run_no; $i++) { // Run x times. $do = mysql_query("UPDATE table SET col=col-1, col_2=col_2-1 WERE other > 0", $c); if (!empty(mysql_error())) { mail("me@domain.suffix", "Minute Cron not run.", "The minute cron could not run because of a mysql error.", "From: me@domain.suffix"); // Send mail stating there is an error. } else { $open = fopen("crons/cron_minute.txt", "w"); //Write time to file for next use. fputs($open, time()); fclose($open); $end_min_timer = microtime(); // End timer. $total_min_timer = $start_min_timer - $end_min_timer; // Calculate timer. mail("me@domain.suffix", "Minute Cron was run.", "The minute cron was run succesfully.\r\n" . "Time: $time\r\n" . "Time Took: $start_min_timer - $end_min_timer\r\n" . "Total: $total_min_timer.", "From: me@domain.suffix"); // Send a mail for statistics. } } } exit; //No need to continue. ?> changed you query string as well so you only run one query... You MUST take note of the precedence of operators when you use them in conjunction with one another!!!!!!!!!! x - y / z would be x subtract y divided by z that measn y would be divided by z first and then subtracted from x - great if that is what you want - if you wanted the result of x - y divided by z then (x-y)/z is the correct structure... Quote Link to comment Share on other sites More sharing options...
NArc0t1c Posted August 2, 2007 Author Share Posted August 2, 2007 Error on line 14: The if statement. Original error: Fatal error: Unsupported operand types in /hsphere/local/home/user/parth/script.php on line 13 ToonMariner, the queries were just examples, there are about 30 queries and some file I\O. I have tried it that way, in brackets, still doesn't work. Thanks though. Quote Link to comment Share on other sites More sharing options...
ToonMariner Posted August 2, 2007 Share Posted August 2, 2007 there is notihng on line 13... are you posting all the code????# the more info you give us the easier it is to fix... Quote Link to comment Share on other sites More sharing options...
NArc0t1c Posted August 2, 2007 Author Share Posted August 2, 2007 No, but the other's are the same if statement, with different variables. Most of the data within the statements are queries. Nothing related to this. Quote Link to comment Share on other sites More sharing options...
ToonMariner Posted August 2, 2007 Share Posted August 2, 2007 sounds like you have a better handle on it than anyone else... Like I said if you post ALL the code and as much info about the error as possible we may be able to help.... We aint mind readers so please be aware of that. Quote Link to comment Share on other sites More sharing options...
NArc0t1c Posted August 2, 2007 Author Share Posted August 2, 2007 I'm not looking for an argument. The full script is: <?php $time = time(); $cron_minute_run = 60; $cron_fminute_run = 60 * 5; $cron_hour_run = 60 * 60; $cron_day_run = 60 * 60 * 24; $last_minute_run = file("crons/cron_minute.txt"); $last_fminute_run = file("crons/cron_fiveminute.txt"); $last_hour_run = file("crons/cron_hour.txt"); $last_day_run = file("crons/cron_day.txt"); if ($time - $last_minute_run >= $cron_minute) { $start_min_timer = microtime(); if (($time - $last_minute_run) / 60 > 1) { $minute_run_no = $time - $last_minute_run / 60; } else { $minute_run_no = 1; } for ($i = 0; $i < $minute_run_no; $i++) { $do = mysql_query("UPDATE users SET hospital=hospital-1 WERE hospital > 0", $c); $do = mysql_query("UPDATE users SET jail=jail-1 WHERE jail > 0", $c); mysql_query("UPDATE `auctions` SET time=`time`-1"); $qqq = mysql_query("SELECT * FROM `auctions` WHERE time=0", $c); while ($win = mysql_fetch_array($qqq)) { $time = $win['time']; $item = $win['itemname']; $winner = $win['bidder']; $owner = $win['owner']; $iname = mysql_query("SELECT `itmname` FROM `items` WHERE itmid={$item}"); if ($win['bids'] > 0) { mysql_query("insert into `inventory` VALUES('',$item,$winner,1)", $c) or die(mysql_error()); event_add($winner, "You won the auction of the {$iname} for \${$win['current']}", $c); event_add($owner, "Your {$iname} sold succesfully on the auction market with {$win['bids']} bids. You have been paid \${$win['current']}", $c); mysql_query("update users set money=money+{$win['current']},auctionquota=auctionquota-1 where userid=$owner", $c); } if ($win['bids'] == 0) { event_add($win['owner'], "Your auction has ended with no bidders. Your {$iname} has been returned to your inventory.", $c); $winner = $win['owner']; mysql_query("insert into `inventory` VALUES('',$item,$winner,1)", $c) or die(mysql_error()); } } mysql_query("delete from `auctions` where time=0", $c); if (empty($do)) { mail("me@domain.suffix", "Minute Cron not run.", "The minute cron could not run because of a mysql error.", "From: ferdi@narc0t1c.net"); } else { $open = fopen("crons/cron_minute.txt", "w"); fputs($open, time()); fclose($open); $end_min_timer = microtime(); $total_min_timer = $start_min_timer - $end_min_timer; mail("me@domain.suffix", "Minute Cron was run.", "The minute cron was run succesfully.\r\n" . "Time: $time\r\n" . "Time Took: $start_min_timer - $end_min_timer\r\n" . "Total: $total_min_timer.", "From: ferdi@narc0t1c.net"); } } } if ($time - $last_fminute_run >= $cron_fminute_run) { $start_fmin_timer = microtime(); if ($time - $last_fminute_run / 60 > 1) { $fminute_run_no = $time - $last_fminute_run / 60; } else { $fminute_run_no = 1; } for ($i = 0; $i < $fminute_run_no; $i++) { $q1 = mysql_query("SELECT COUNT(*) as users FROM users", $c); $r = mysql_fetch_array($q1); $rows = $r['users']; $i = 1; $next = $rows; $query = "UPDATE users SET brave=brave+((maxbrave/10)+0.5) WHERE brave<maxbrave "; $query2 = "UPDATE users SET brave=maxbrave WHERE brave>maxbrave"; $query3 = "UPDATE users SET hp=hp+(maxhp/3) WHERE hp<maxhp"; $query4 = "UPDATE users SET hp=maxhp WHERE hp>maxhp"; $do = mysql_query($query, $c) or die("\nError Executing Query 1 for updating users $i to $next\n$query\n" . mysql_error() . "\nError Code:" . mysql_errno()); mysql_query($query2, $c) or die("\nError Executing Query 2 for updating users $i to $next\n$query2\n" . mysql_error() . "\nError Code:" . mysql_errno()); mysql_query($query3, $c) or die("\nError Executing Query 3 for updating users $i to $next\n$query3\n" . mysql_error() . "\nError Code:" . mysql_errno()); mysql_query($query4, $c) or die("\nError Executing Query 4 for updating users $i to $next\n$query4\n" . mysql_error() . "\nError Code:" . mysql_errno()); $q1 = mysql_query("SELECT COUNT(*) as users FROM users", $c); $r = mysql_fetch_array($q1); $rows = $r['users']; $i = 1; $next = $rows; $query = "UPDATE users SET energy=energy+(maxenergy/(12.5)) WHERE energy<maxenergy AND donatordays=0"; $query5 = "UPDATE users SET energy=energy+(maxenergy/(6)) WHERE energy<maxenergy AND donatordays>0"; $query2 = "UPDATE users SET energy=maxenergy WHERE energy>maxenergy"; $query3 = "UPDATE users SET will=will+10 WHERE will<maxwill"; $query4 = "UPDATE users SET will=maxwill WHERE will>maxwill"; mysql_query($query, $c) or die("\nError Executing Query 1 for updating users $i to $next\n$query\n" . mysql_error() . "\nError Code:" . mysql_errno()); mysql_query($query5, $c) or die("\nError Executing Query 5 for updating users $i to $next\n$query5\n" . mysql_error() . "\nError Code:" . mysql_errno()); mysql_query($query2, $c) or die("\nError Executing Query 2 for updating users $i to $next\n$query2\n" . mysql_error() . "\nError Code:" . mysql_errno()); mysql_query($query3, $c) or die("\nError Executing Query 3 for updating users $i to $next\n$query3\n" . mysql_error() . "\nError Code:" . mysql_errno()); mysql_query($query4, $c) or die("\nError Executing Query 4 for updating users $i to $next\n$query4\n" . mysql_error() . "\nError Code:" . mysql_errno()); if (empty($do)) { mail("me@domain.suffix", "Five Minute Cron not run.", "The five minute cron could not run because of a mysql error.", "From: ferdi@narc0t1c.net"); } else { $open = fopen("crons/cron_fiveminute.txt", "w"); fputs($open, time()); fclose($open); $end_fmin_timer = microtime(); $total_fmin_timer = $start_min_timer - $end_min_timer; mail("me@domain.suffix", "Five Minute Cron was run.", "The five minute cron was run succesfully.\r\n" . "Time: $time\r\n" . "Time Took: $start_fmin_timer - $end_fmin_timer\r\n" . "Total: $total_fmin_timer.", "From: ferdi@narc0t1c.net"); } } } if ($time - $last_hour_run >= $cron_hor_run) { $start_hour_timer = microtime(); if ($time - $last_hour_run / 60 > 1) { $hour_run_no = $time - $last_hour_run / 60; } else { $hour_run_no = 1; } for ($i = 0; $i < $hour_run_no; $i++) { mysql_query("UPDATE gangs SET gangCHOURS=gangCHOURS-1 WHERE gangCRIME>0", $c); $q = mysql_query("SELECT g.*,oc.* FROM gangs g LEFT JOIN orgcrimes oc ON g.gangCRIME=oc.ocID WHERE g.gangCRIME > 0 AND g.gangCHOURS = 0", $c); while ($r = mysql_fetch_array($q)) { $suc = rand(0, 1); if ($suc) { $log = $r['ocSTARTTEXT'] . $r['ocSUCCTEXT']; $muny = (int)(rand($r['ocMINMONEY'], $r['ocMAXMONEY'])); $log = str_replace(array("{muny}", "'"), array($muny, "''"), $log); $do = mysql_query("UPDATE gangs SET gangMONEY=gangMONEY+$muny,gangCRIME=0 WHERE gangID={$r['gangID']}", $c); mysql_query("INSERT INTO oclogs VALUES ('',{$r['ocID']},{$r['gangID']}, '$log', 'success', $muny, '{$r['ocNAME']}', unix_timestamp())", $c); $i = mysql_insert_id($c); $qm = mysql_query("SELECT * FROM users WHERE gang={$r['gangID']}", $c); while ($rm = mysql_fetch_array($qm)) { event_add($rm['userid'], "Your Gang's Organised Crime Succeeded. Go <a href='oclog.php?ID=$i'>here</a> to view the details.", $c); } } else { $log = $r['ocSTARTTEXT'] . $r['ocFAILTEXT']; $muny = 0; $log = str_replace(array("{muny}", "'"), array($muny, "''"), $log); mysql_query("UPDATE gangs SET gangCRIME=0 WHERE gangID={$r['gangID']}", $c); mysql_query("INSERT INTO oclogs VALUES ('',{$r['ocID']},{$r['gangID']}, '$log', 'failure', $muny, '{$r['ocNAME']}', unix_timestamp())", $c); $i = mysql_insert_id($c); $qm = mysql_query("SELECT * FROM users WHERE gang={$r['gangID']}", $c); while ($rm = mysql_fetch_array($qm)) { event_add($rm['userid'], "Your Gang's Organised Crime Failed. Go <a href='oclog.php?ID=$i'>here</a> to view the details.", $c); } } } if (empty($do)) { mail("me@domain.suffix", "Hour Cron not run.", "The hour cron could not run because of a mysql error.", "From: ferdi@narc0t1c.net"); } else { $open = fopen("crons/cron_fiveminute.txt", "w"); fputs($open, time()); fclose($open); $end_hour_timer = microtime(); $total_hour_timer = $start_min_timer - $end_min_timer; mail("me@domain.suffix", "Hour Cron was run.", "The hour cron was run succesfully.\r\n" . "Time: $time\r\n" . "Time Took: $start_hour_timer - $end_hour_timer\r\n" . "Total: $total_hour_timer.", "From: ferdi@narc0t1c.net"); } } } if ($time - $last_day_run >= $cron_day_run) { $start_day_timer = microtime(); if ($time - $last_day_run / 60 > 1) { $day_run_no = $time - $last_day_run / 60; } else { $day_run_no = 1; } for ($i = 0; $i < $day_run_no; $i++) { mysql_query("UPDATE users SET shots=6"); mysql_query("UPDATE users SET daysingang=daysingang+1 WHERE gang > 0", $c); $do = mysql_query("UPDATE users SET daysold=daysold+1", $c); mysql_query("UPDATE users SET mailban=mailban-1 WHERE mailban > 0", $c); mysql_query("UPDATE users SET donatordays=donatordays-1 WHERE donatordays > 0", $c); mysql_query("UPDATE users SET cdays=cdays-1 WHERE course > 0", $c); mysql_query("UPDATE users SET bankmoney=bankmoney+(bankmoney/50) where bankmoney>0", $c); mysql_query("UPDATE users SET cybermoney=cybermoney+(cybermoney/100*7) where cybermoney>0", $c); $q = mysql_query("SELECT * FROM users WHERE cdays=0 AND course > 0", $c); while ($r = mysql_fetch_array($q)) { $cd = mysql_query("SELECT * FROM courses WHERE crID={$r['course']}", $c); $coud = mysql_fetch_array($cd); $userid = $r['userid']; mysql_query("INSERT INTO coursesdone VALUES({$r['userid']},{$r['course']})", $c); $upd = ""; $ev = ""; if ($coud['crSTR'] > 0) { $upd .= ",us.strength=us.strength+{$coud['crSTR']}"; $ev .= ", {$coud['crSTR']} strength"; } if ($coud['crGUARD'] > 0) { $upd .= ",us.guard=us.guard+{$coud['crGUARD']}"; $ev .= ", {$coud['crGUARD']} guard"; } if ($coud['crLABOUR'] > 0) { $upd .= ",us.labour=us.labour+{$coud['crLABOUR']}"; $ev .= ", {$coud['crLABOUR']} labour"; } if ($coud['crAGIL'] > 0) { $upd .= ",us.agility=us.agility+{$coud['crAGIL']}"; $ev .= ", {$coud['crAGIL']} agility"; } if ($coud['crIQ'] > 0) { $upd .= ",us.IQ=us.IQ+{$coud['crIQ']}"; $ev .= ", {$coud['crIQ']} IQ"; } $ev = substr($ev, 1); if ($upd) { mysql_query("UPDATE users u LEFT JOIN userstats us ON u.userid=us.userid SET us.userid=us.userid $upd WHERE u.userid=$userid", $c) or die(mysql_error() . "<br />" . "UPDATE users u LEFT JOIN userstats us ON u.userid=us.userid SET us.userid=us.userid $upd WHERE u.userid=$userid"); } mysql_query("INSERT INTO events VALUES('',$userid,unix_timestamp(),0,'Congratulations, you completed the {$coud['crNAME']} and gained $ev!')", $c); } mysql_query("UPDATE users SET course=0 WHERE cdays=0", $c); mysql_query("TRUNCATE TABLE votes;", $c); mysql_query("UPDATE fedjail set fed_days=fed_days-1", $c); mysql_query("UPDATE users u LEFT JOIN fedjail f ON u.fedjail=f.fed_id SET u.fedjail=0 WHERE f.fed_days=0", $c); mysql_query("DELETE FROM fedjail WHERE fed_days=0", $c); mysql_query("UPDATE users u LEFT JOIN userstats us ON u.userid=us.userid LEFT JOIN jobs j ON j.jID=u.job LEFT JOIN jobranks jr ON u.jobrank=jr.jrID SET u.money=u.money+jr.jrPAY,us.strength=us.strength+jr.jrSTRG,us.labour=us.labour+jr.jrLABOURG,us.IQ=us.IQ+jr.jrIQG,u.exp=u.exp+(jr.jrPAY/20) WHERE u.job > 0 AND u.jobrank > 0", $c) or die("UPDATE users u LEFT JOIN userstats us ON u.userid=us.userid LEFT JOIN jobs j ON j.jID=u.job LEFT JOIN jobranks jr ON u.jobrank=jr.jrID SET u.money=u.money+jr.jrPAY,us.strength=us.strength+jr.jrSTRG,us.labour=us.labour+jr.jrLABOURG,us.IQ=us.IQ+jr.jrIQG WHERE u.job > 0 AND u.jobrank > 0<br />" . mysql_error()); mysql_query("update users set turns=200 WHERE donatordays>=1", $c) or die(mysql_error()); mysql_query("update users set turns=100 WHERE donatordays<=0", $c) or die(mysql_error()); if (empty($do)) { mail("me@domain.suffix", "Day Cron not run.", "The hour cron could not run because of a mysql error.", "From: ferdi@narc0t1c.net"); } else { $open = fopen("crons/cron_fiveminute.txt", "w"); fputs($open, time()); fclose($open); $end_day_timer = microtime(); $total_day_timer = $start_min_timer - $end_min_timer; mail("me@domain.suffix", "Day Cron was run.", "The day cron was run succesfully.\r\n" . "Time: $time\r\n" . "Time Took: $start_day_timer - $end_day_timer\r\n" . "Total: $total_day_timer.", "From: ferdi@narc0t1c.net"); } } } exit; ?> Quote Link to comment Share on other sites More sharing options...
btherl Posted August 2, 2007 Share Posted August 2, 2007 file() returns an array. You can't subtract an array from a number. You can verify with the following script: print 1 - array(1); Quote Link to comment Share on other sites More sharing options...
clearstatcache Posted August 2, 2007 Share Posted August 2, 2007 if (($time - $last_minute_run) >= $cron_minute_run) $last_minute_run is an array...... Quote Link to comment Share on other sites More sharing options...
mrjcfreak Posted August 2, 2007 Share Posted August 2, 2007 I think you might need a bit more of file_get_contents() and a bit less of file(); The former returns a string of the data from the file, the latter an array of the lines in the file. To be honest, you shouldn't be using individual files for individual values on scripts which expect heavy usage- it would be better to combine the values on different lines of the same file, or in the DB, if it's possible. Quote Link to comment Share on other sites More sharing options...
NArc0t1c Posted August 2, 2007 Author Share Posted August 2, 2007 I will try that, thanks. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.