I use joomla connect to postgresql:
$db = JFactory::getDBO();
$db->setQuery($query);
$db->query();
$object = $db->loadAssocList();
Default timeout=30s. I want set timeout =120.
How set timeout of query? Thanks.
set_time_limit
Set the number of seconds a script is allowed to run. If this is reached, the script returns a fatal error. The default limit is 30 seconds or, if it exists, the max_execution_time value defined in the php.ini.
When called, set_time_limit() restarts the timeout counter from zero. In other words, if the timeout is the default 30 seconds, and 25 seconds into script execution a call such as set_time_limit(20) is made, the script will run for a total of 45 seconds before timing out.
you need to use the standard php function
set_time_limit(120);
Related
I have run a query direct in phpmyadmin only 5 sec time taken but when load in php query than i face this error Query execution was interrupted
max_statement_time exceeded
i check the phpmyadmin and have a wrapper inside Util.php ...function .....#set_time_limit((int) $GLOBALS['cfg']['ExecTimeLimit']); ... and lead to config.values.php 'ExecTimeLimit' => 'validateNonNegativeNumber', or just in case to config.inc.php ( could be like this https://stackoverflow.com/a/13858161/5781320 ) : in my case isn't a value set you may check if in your case is!
if you do not find anything you should check php.ini "Set the number of seconds a script is allowed to run. If this is reached, the script returns a fatal error. The default limit is 30 seconds or, if it exists, the max_execution_time value defined in the php.ini " -> https://www.php.net/manual/ro/function.set-time-limit.php
I put my code on sleep when no data returned by server. But it gives me this error after a while being idle.
<b>Fatal error</b>: Maximum execution time of 120 seconds exceeded in
I know, changing the max limit in php.ini would help. But i don't want to do this, because I don't own the server...so I can't be changing each clients server limit.
how can I set the max limit to infinity here or probably how to reconnect if reached max?
while ($currentmodif <= $lastmodif)
{
usleep(10000); // sleep 10ms to unload the CPU
clearstatcache();
$currentmodif = filemtime($filename);
}
You'll have to set it to zero. Zero means the script can run forever. Add the following at the start of your script:
ini_set('max_execution_time', 0);
set_time_limit() does not return anything so you can't use it to detect whether it succeeded. Additionally, it'll throw a warning:
Warning: set_time_limit(): Cannot set time limit in safe mode
ini_set() returns FALSE on failure and does not trigger warnings.
Function, which waits about one day in the background and then execute another.
Like:
function Sleep(){
sleep( /* One Day */ );
Run();
}
function Run(){
//One Day later,
//execute code.
}
Or maby something like this (this is fictional):
class Waiter extends Timer{
$time = 0;
function __construct($time){
$this->time = $time;
}
function onDelay(){
//One day Later.
}
}
$wait = new Waiter( /* One Day */ );
Is there a good solution?
Or is the sleep() function also okey?
But I have to say, that the execution timeout is 30 seconds.
Using a cronjob is the correct solution for this problem. If for some reason you cannot use it, make sure to add ignore_user_abort(1) and set_time_limit(0); at the top of the php script.
int ignore_user_abort ([ bool $value ] )
When running PHP as a command line script, and the script's tty goes
away without the script being terminated then the script will die the
next time it tries to write anything, unless value is set to TRUE
bool set_time_limit ( int $seconds )
Set the number of seconds a script is allowed to run. If this is
reached, the script returns a fatal error. The default limit is 30
seconds or, if it exists, the max_execution_time value defined in the
php.ini.
When called, set_time_limit() restarts the timeout counter from zero.
In other words, if the timeout is the default 30 seconds, and 25
seconds into script execution a call such as set_time_limit(20) is
made, the script will run for a total of 45 seconds before timing out.
As you said, the execution time is 30 seconds, the overall script is forced to an end after 30 seconds. It can't wait longer.
As already suggested, you could use a cron job.
If your problem is not regular recurrent, you could write a little script, which writes the time (with date) when the function should execute into a file (or a database). The cron then would execute every hour (or if its important, every minute) and checks, if the function needs to be executed
Crons have been mentioned, but there's a second option - queueing.
https://en.wikipedia.org/wiki/Message_queue
There is a wide variety of queue software available, from ones you install yourself like Beanstalk or RabbitMQ to hosted ones in the cloud like Amazon SQS or IronMQ.
set_time_limit(0) will reset the counter to 0, but I would need to call it like every 30 seconds or so in order for the script to continue running without breaking in error.
Is there any way I could just disable this time limit stuff, without having to call this function repeatedly?
Setting the limit to 0 disables it entirely. Setting it to non-zero resets the countdown to that value. e.g.
while(true) {
set_time_limit(30);
sleep(29);
}
Will run (virtually) indefinitely, because the limit keeps getting reset to 30, one second before it was about to expire.
You should only need to call set_time_limit(0) once, unless you are running PHP in safe-mode which a lot of shared web hosts do
Read the docs for set_time_limit() here
Is it possible to get Max Execution timeout notification so that i can use code clean up operations before the php script stops running?
Basically, i am trying to create a script that can do some changes/modifications to my database which has huge data pile. Also, this php script execution can be paused/resumed using a filelock.
You can either use set_error_handler() or register_shutdown_function().
Edit: See also: max execution time error handling
If you set 0 to set_time_limit, it will never stop :)
You can increase the limit time inside your code using:
set_time_limit(300); //time in seconds
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
or
changing the max_execution_time parameter inside your php.ini.
The default time is 30 seconds.