Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4125276
Invoker.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
Invoker.php
View Options
<?php
declare
(
strict_types
=
1
);
/*
* This file is part of phpunit/php-invoker.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace
SebastianBergmann\Invoker
;
use
const
SIGALRM
;
use
function
call_user_func_array
;
use
function
function_exists
;
use
function
pcntl_alarm
;
use
function
pcntl_async_signals
;
use
function
pcntl_signal
;
use
function
sprintf
;
use
Throwable
;
final
class
Invoker
{
/**
* @var int
*/
private
$timeout
;
/**
* @throws Throwable
*/
public
function
invoke
(
callable
$callable
,
array
$arguments
,
int
$timeout
)
{
if
(!
$this
->
canInvokeWithTimeout
())
{
throw
new
ProcessControlExtensionNotLoadedException
(
'The pcntl (process control) extension for PHP is required'
);
}
pcntl_signal
(
SIGALRM
,
function
():
void
{
throw
new
TimeoutException
(
sprintf
(
'Execution aborted after %d second%s'
,
$this
->
timeout
,
$this
->
timeout
===
1
?
''
:
's'
)
);
},
true
);
$this
->
timeout
=
$timeout
;
pcntl_async_signals
(
true
);
pcntl_alarm
(
$timeout
);
try
{
return
call_user_func_array
(
$callable
,
$arguments
);
}
finally
{
pcntl_alarm
(
0
);
}
}
public
function
canInvokeWithTimeout
():
bool
{
return
function_exists
(
'pcntl_signal'
)
&&
function_exists
(
'pcntl_async_signals'
)
&&
function_exists
(
'pcntl_alarm'
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Wed, Aug 19, 07:23 (2 w, 2 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
7b/94/f08671e1aa893ca94d99a5cd161c
Default Alt Text
Invoker.php (1 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment