php


Difference between set_time_limit() and ini_set('max_execution_time', …)


Is there any actual difference between these two lines of code?
ini_set('max_execution_time', 20*60);
set_time_limit(20*60);
Looking at the current source:
/* {{{ proto bool set_time_limit(int seconds)
Sets the maximum time a script can run */
PHP_FUNCTION(set_time_limit)
{
zend_long new_timeout;
char *new_timeout_str;
int new_timeout_strlen;
zend_string *key;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &new_timeout) == FAILURE) {
return;
}
new_timeout_strlen = zend_spprintf(&new_timeout_str, 0, ZEND_LONG_FMT, new_timeout);
key = zend_string_init("max_execution_time", sizeof("max_execution_time")-1, 0);
if (zend_alter_ini_entry_chars_ex(key, new_timeout_str, new_timeout_strlen, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0 TSRMLS_CC) == SUCCESS) {
RETVAL_TRUE;
} else {
RETVAL_FALSE;
}
zend_string_release(key);
efree(new_timeout_str);
}
/* }}} */
set_time_limit() is indeed just a convenience wrapper around the according ini_set() call. It doesn't even seem to perform the advertised timer reset. (But I would guess the "timer" actually isn't a separate entity, but the ini value itself is used as such.)
A tiny difference to take into account is the way they behave on failure:
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.
In practice, it should not be a great deal since safe mode is allegedly the only situation that can cause a failure and the feature is already deprecated.
Other than that, the function is just a wrapper for the property change.
No there isn't.
echo ini_get('max_execution_time'); // 30
set_time_limit(100);
echo ini_get('max_execution_time'); // 100
Regarding timer reset, it is reset in both cases:
ini_set('max_execution_time', 10);
for ($i=0; $i<50000000; $i++) {
}
ini_set('max_execution_time', 10); // timer is reset, just as it would be with set_time_limit
for ($i=0; $i<50000000; $i++) {
}
echo 'done';
According to the php manual, set_time_limit() will reset the execution timer when called. I don't believe ini_set() has the same side-effect, which would be the difference between the two.
See http://php.net/manual/en/function.set-time-limit.php for more information.
Update: since examining various portions of the php source code (including that referenced by mario's answer), it is my conclusion that ini_set() and set_time_limit() are precisely equivalent.
ini_set() does indeed reset the timer (though I'm still at a loss as to how either function performs the reset, I would have to look up the function that kills the script when the timer ends to figure that one out).
Both modes "set_time_limit(5)" and "ini_set('max_execution_time', '5')" reset time, a practical and clear example:
//-----------------------------------------------------------
//test "max_execution_time":
ini_set('max_execution_time', 5);
for ($i=0; $i<3; $i++) {
sleep(1);
}
ini_set('max_execution_time', 5);
for ($i=0; $i<3; $i++) {
sleep(1);
}
echo '<br/>';
echo 'done with max_execution_time';
//-----------------------------------------------------------
//test "set_time_limit":
set_time_limit(5);
for ($i=0; $i<3; $i++) {
sleep(1);
}
set_time_limit(5);
for ($i=0; $i<3; $i++) {
sleep(1);
}
echo '<br/>';
echo 'done with set_time_limit';
All "for" complete successfully, this indicates that the time was reset in all cases,
Greetings
That code only is true on windows.
Sleep time in php linux don't consume execution time
for example in linux:
<?php
set_time_limit(2);
for($i=0; $i<10; $i++)
{
echo ("$i \n");
sleep(1);
}
`
will show
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
but the same code on Windows with default configuration will show
1 | 2

Related Links

Adding a link to click a new button on the form [duplicate]
How to bypass CloudFlare rocket script if wp_enqueue_script is used to add scripts?
Image path upload and displaying image in mysql
fusionchart in php are not showing
php built in webserver not reacheable with ip:port via network cable
I cant get value of the radio button Except first radio button
Edit iframe content using PHP, and preg_replace()
PMPRO Wordpress plugin Membership Cancellation Errors (stripe)
Android HttpURLConnection Post Data, PHP App Server can't receive data
compare todays date with the date in the mysql table using codeigniter
Get all possible combinations without duplicates
how to upload to files to amazon EC2
Getting the top scores, but remove duplicate users (SQL)
Explode a string after 5 spaces and 2 new lines in a string in PHP
How to create a button that links to different URL using if-else statement
How to display category's items?

Categories

HOME
rust
visual-studio
ionic2
android-studio
lambda
schema.org
writefile
transactions
typeerror
magento-2.0
dependencies
turbojpeg
ipv6
facebook-android-sdk
ag-grid
selection
port
roku
fbloginview
responsivevoice
smartgwt
jpa-2.0
significance
anova
connection-refused
pubxml
tortoisemerge
webviewclient
annotation-processing
tsung
bitbake
cucumber-junit
pdfminer
landscape
netstat
bluemixtools
runtimeexception
cheat-engine
android-n
resampling
get-event-store
cloudera-sentry
elasticsearch-aggregation
web-inspector
jqgrid-asp.net
expandablelistview
vesta
bit-shift
gcal
cloudwatch
roracle
beeline
openstack-glance
maven-jaxb2-plugin
android-webservice
dex
emacs25
qtextedit
portal
yui3
system.web.optimization
taco
certificate-authority
webgrind
largenumber
replicaset
green-threads
textscan
erlog
console.log
tidyr
fat32
lifetime
comctl32
n-tier-architecture
dc
berkeley-db-xml
aho-corasick
nodeload
strdup
ggts
red-system
semantic-merge
jquery-dialog
zend-pdf
pageheap
mkannotation
kolite
expression-web
sql-parametrized-query
chunking
uninstaller
activestate
rawcontacts
bucket
twitter-feed

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App