FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
php-src/tests/probe_cache.inc at master · php/php-src · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
php
/
php-src
Public
Notifications
You must be signed in to change notification settings
Fork
8.1k
Star
40.3k
Code
Issues
956
Pull requests
1.1k
Actions
Security and quality
52
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Security and quality
Insights
Expand file tree
Breadcrumbs
php-src
/
tests
/
probe_cache.inc
Copy path
More file actions
More file actions
Latest commit
History
History
History
73 lines (63 loc) · 2.12 KB
Breadcrumbs
php-src
/
tests
/
probe_cache.inc
Copy path
File metadata and controls
73 lines (63 loc) · 2.12 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
final
class
ProbeFailureException
extends
Exception
{
public
function
__construct
(
string
|
Throwable
$
failure
, ?
Throwable
$
previous
=
null
)
{
if
(
$
failure
instanceof
Throwable) {
$
previous
=
$
failure
;
$
failure
=
$
failure
->
getMessage
();
}
parent
::
__construct
(
$
failure
,
0
,
$
previous
);
}
}
final
class
ProbeCache
{
private
const
FAILURE_PREFIX
=
'
failure:
'
;
/**
* Runs a probe once per configuration during SKIPIF, caching only failures.
* Outside SKIPIF, the cache is bypassed and wrapped exceptions are rethrown.
*/
public
static
function
getFailure
(
string
$
namespace
,
array
$
configuration
,
callable
$
probe
):
mixed
{
if
(
getenv
(
'
TEST_PHP_EVALUATING_SKIPIF
'
) !==
'
1
'
) {
try
{
return
$
probe
();
}
catch
(
ProbeFailureException
$
e
) {
throw
$
e
->
getPrevious
() ??
$
e
;
}
}
$
directory
=
getenv
(
'
TEST_PHP_SHARED_CACHE_DIR
'
);
if
(!
is_string
(
$
directory
) || !
is_dir
(
$
directory
)) {
return
$
probe
();
}
$
cacheFile
=
$
directory
.
DIRECTORY_SEPARATOR
.
'
probe-
'
.
hash
(
'
sha256
'
,
serialize
([
$
namespace
,
$
configuration
]));
$
cache
= @
fopen
(
$
cacheFile
,
'
c+
'
);
if
(
$
cache
===
false
|| !
flock
(
$
cache
,
LOCK_EX
)) {
if
(
$
cache
!==
false
) {
fclose
(
$
cache
);
}
return
$
probe
();
}
try
{
$
cached
=
stream_get_contents
(
$
cache
);
if
(
is_string
(
$
cached
) &&
str_starts_with
(
$
cached
,
self
::
FAILURE_PREFIX
)) {
throw
new
ProbeFailureException
(
substr
(
$
cached
,
strlen
(
self
::
FAILURE_PREFIX
)));
}
try
{
return
$
probe
();
}
catch
(
ProbeFailureException
$
e
) {
rewind
(
$
cache
);
ftruncate
(
$
cache
,
0
);
fwrite
(
$
cache
,
self
::
FAILURE_PREFIX
.
$
e
->
getMessage
());
fflush
(
$
cache
);
throw
$
e
;
}
}
finally
{
flock
(
$
cache
,
LOCK_UN
);
fclose
(
$
cache
);
}
}
}
Back
|
FazBrowse Home
|
New Git URL