mirror of
https://github.com/moodle/moodle.git
synced 2025-07-12 01:46:32 +02:00
.github
.grunt
.phpstorm.meta.php
.upgradenotes
admin
ai
analytics
auth
availability
backup
badges
blocks
blog
cache
calendar
cohort
comment
communication
competency
completion
contentbank
course
customfield
dataformat
enrol
error
favourites
files
filter
grade
group
h5p
install
iplookup
lang
lib
adodb
ajax
amd
antivirus
aws-sdk
behat
bennu
classes
access
analytics
antivirus
attribute
aws
check
content
context
dataformat
dml
event
exception
external
files
form
hook
hub
local
lock
log
message
moodlenet
navigation
oauth2
output
plugininfo
privacy
progress
reportbuilder
route
router
session
task
tests
update
upgrade
activity_dates.php
attribute_helper.php
chart_axis.php
chart_bar.php
chart_base.php
chart_line.php
chart_pie.php
chart_series.php
clock.php
collator.php
component.php
content.php
context.php
context_helper.php
cron.php
cssparser.php
dataformat.php
date.php
deprecation.php
di.php
emoticon_manager.php
encryption.php
filetypes.php
formatting.php
geopattern.php
grades_external.php
grading_external.php
hooks.php
http_client.php
invalid_persistent_exception.php
ip_utils.php
lang_string.php
locale.php
minify.php
notification.php
param.php
param_clientside_regex.php
persistent.php
php_time_limit.php
plugin_manager.php
qrcode.php
report_helper.php
requirejs.php
router.php
rtlcss.php
scss.php
shutdown_manager.php
string_manager.php
string_manager_install.php
string_manager_standard.php
system_clock.php
text.php
url.php
user.php
useragent.php
userfeedback.php
uuid.php
db
ddl
dml
dtl
editor
emoji-data
evalmath
external
filebrowser
filestorage
fonts
form
geopattern-php
giggsey
google
grade
guzzlehttp
html2text
htmlpurifier
jmespath
jquery
laravel
lti1p3
ltiprovider
markdown
maxmind
minify
mlbackend
mustache
nikic
openspout
pear
php-css-parser
php-di
php-enum
php-jwt
phpmailer
phpspreadsheet
phpunit
phpxmlrpc
plist
polyfills
portfolio
psr
ralouphie
requirejs
rtlcss
scssphp
simplepie
slim
spatie
symfony
table
tcpdf
templates
testing
tests
userkey
webauthn
xapi
xhprof
xmldb
yui
yuilib
zipstream
UPGRADING.md
accesslib.php
adminlib.php
apis.json
apis.schema.json
authlib.php
badgeslib.php
blocklib.php
cacert.pem
cacert.txt
clilib.php
completionlib.php
componentlib.class.php
components.json
conditionlib.php
configonlylib.php
cookies.js
cronlib.php
csslib.php
csvlib.class.php
customcheckslib.php
datalib.php
ddllib.php
default.ttf
deprecatedlib.php
dmllib.php
dtllib.php
editorlib.php
emptyfile.php
enrollib.php
environmentlib.php
excellib.class.php
externallib.php
filelib.php
filterlib.php
flickrclient.php
flickrlib.php
formslib.php
gdlib.php
googleapi.php
gradelib.php
graphlib.php
grouplib.php
index.html
installlib.php
javascript-static.js
javascript.php
jslib.php
jssourcemap.php
ldaplib.php
lexer.php
licenselib.php
licenses.json
listlib.php
mathslib.php
messagelib.php
modinfolib.php
moodlelib.php
myprofilelib.php
navigationlib.php
oauthlib.php
odslib.class.php
outputactions.php
outputcomponents.php
outputfactories.php
outputfragmentrequirementslib.php
outputlib.php
outputrenderers.php
outputrequirementslib.php
pagelib.php
pdflib.php
phpminimumversionlib.php
plagiarismlib.php
plugins.json
plugins.schema.json
portfoliolib.php
questionlib.php
recaptchalib_v2.php
requirejs.php
resourcelib.php
rsslib.php
searchlib.php
sessionlib.php
setup.php
setuplib.php
soaplib.php
statslib.php
subplugins.schema.json
tablelib.php
thirdpartylibs.xml
tokeniserlib.php
upgrade.txt
upgradelib.php
uploadlib.php
validateurlsyntax.php
wasmlib.php
webdavlib.php
weblib.php
wiki_to_markdown.php
wordlist.txt
xhtml.xsl
xmlize.php
xsendfilelib.php
local
login
media
message
mnet
mod
moodlenet
my
notes
payment
pix
plagiarism
portfolio
privacy
question
rating
report
reportbuilder
repository
rss
search
sms
tag
theme
user
userpix
webservice
.eslintrc
.gherkin-lintrc
.gitattributes
.gitignore
.jshintignore
.jshintrc
.nvmrc
.shifter.json
.stylelintrc
CONTRIBUTING.md
COPYING.txt
Gruntfile.js
INSTALL.txt
README.md
TRADEMARK.txt
UPGRADING.md
behat.yml.dist
brokenfile.php
composer.json
composer.lock
config-dist.php
draftfile.php
editmode.php
file.php
help.php
help_ajax.php
index.php
install.php
npm-shrinkwrap.json
package.json
phpcs.xml.dist
phpunit.xml.dist
pluginfile.php
r.php
security.txt
tokenpluginfile.php
version.php
114 lines
3.8 KiB
PHP
114 lines
3.8 KiB
PHP
<?php
|
|
// This file is part of Moodle - http://moodle.org/
|
|
//
|
|
// Moodle is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Moodle is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/**
|
|
* PHP time limit management.
|
|
*
|
|
* @package core
|
|
* @copyright 2013 The Open University
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
|
|
defined('MOODLE_INTERNAL') || die();
|
|
|
|
/**
|
|
* Utility class to manage PHP time limit.
|
|
*/
|
|
class core_php_time_limit {
|
|
/**
|
|
* @var int Current end time of time limit (-1 if not set)
|
|
*/
|
|
protected static $currentend = -1;
|
|
|
|
/**
|
|
* @var array Data for unit testing
|
|
*/
|
|
protected static $unittestdata = array();
|
|
|
|
/**
|
|
* Sets the PHP time limit to a number of seconds from now.
|
|
*
|
|
* This function will always extend the time limit (in other words, if the time
|
|
* limit has already been set further in the future, it will do nothing).
|
|
*
|
|
* In order to support front-end servers which may time out silently if no
|
|
* output is displayed, you should ideally only call this function if you expect
|
|
* some output to be displayed at the same time. (I.e. if you call this function
|
|
* each time around a loop, also display some output each time around the loop,
|
|
* such as a progress bar update.)
|
|
*
|
|
* @param int $newlimit Limit in seconds from now (0 = infinite)
|
|
*/
|
|
public static function raise($newlimit = 0) {
|
|
global $CFG;
|
|
|
|
// Special behaviour in unit tests so that we can check the value.
|
|
if (PHPUNIT_TEST) {
|
|
self::$unittestdata[] = $newlimit;
|
|
}
|
|
|
|
// If the time limit has already been set to 'infinite', ignore. Also do
|
|
// nothing in CLI scripts (including unit testing) which are set to
|
|
// infinite by default.
|
|
if (self::$currentend === 0 || CLI_SCRIPT) {
|
|
return;
|
|
}
|
|
|
|
// Maximum time limit can be set in config. This can be useful for front-end
|
|
// server systems; if the front-end server has a timeout without receiving
|
|
// data, it's helpful to set this timeout lower to ensure that a suitable
|
|
// error gets logged.
|
|
if (!empty($CFG->maxtimelimit)) {
|
|
$realtimeout = max(1, $CFG->maxtimelimit);
|
|
if ($newlimit === 0) {
|
|
$newlimit = $realtimeout;
|
|
} else {
|
|
$newlimit = min($newlimit, $realtimeout);
|
|
}
|
|
}
|
|
|
|
// If new time limit is infinite, just set that.
|
|
if ($newlimit === 0) {
|
|
self::$currentend = 0;
|
|
@set_time_limit(0);
|
|
return;
|
|
}
|
|
|
|
// Calculate time limits to make sure it's longer than previous.
|
|
$now = time();
|
|
$newend = $now + $newlimit;
|
|
if (self::$currentend !== -1 && self::$currentend > $newend) {
|
|
// Existing time limit is already longer, so do nothing.
|
|
return;
|
|
}
|
|
|
|
// Set time limit and update current value.
|
|
@set_time_limit($newlimit);
|
|
self::$currentend = $newend;
|
|
}
|
|
|
|
/**
|
|
* For unit testing, returns an array of the values set during test.
|
|
*
|
|
* @return array Array of values set
|
|
*/
|
|
public static function get_and_clear_unit_test_data() {
|
|
$data = self::$unittestdata;
|
|
self::$unittestdata = array();
|
|
return $data;
|
|
}
|
|
}
|