PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 3.9.2
WP STAGING – WordPress Backup, Restore, Migration & Clone v3.9.2
4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Framework / ErrorHandler.php
wp-staging / Framework Last commit date
Adapter 1 year ago Analytics 1 year ago Assets 1 year ago BackgroundProcessing 1 year ago CloningProcess 1 year ago Collection 3 years ago Command 5 years ago Component 2 years ago DI 2 years ago Database 1 year ago DependencyResolver 2 years ago Exceptions 2 years ago Facades 1 year ago Filesystem 1 year ago Interfaces 5 years ago Job 1 year ago Language 1 year ago Mails 1 year ago Network 2 years ago Newsfeed 1 year ago Notices 1 year ago Performance 1 year ago Permalinks 1 year ago Queue 1 year ago Rest 2 years ago Security 1 year ago Settings 1 year ago TemplateEngine 1 year ago ThirdParty 1 year ago Traits 1 year ago Utils 1 year ago AnalyticsServiceProvider.php 2 years ago AssetServiceProvider.php 5 years ago CommonServiceProvider.php 1 year ago ErrorHandler.php 2 years ago NoticeServiceProvider.php 2 years ago SettingsServiceProvider.php 2 years ago SiteInfo.php 1 year ago Url.php 3 years ago
ErrorHandler.php
79 lines
1 <?php
2
3 namespace WPStaging\Framework;
4
5 /**
6 * @package WPStaging\Framework
7 */
8 class ErrorHandler
9 {
10 /** @var string */
11 const ERROR_FILE_EXTENSION = '.wpstgerror';
12
13 public function registerShutdownHandler()
14 {
15 register_shutdown_function([$this, 'shutdownHandler']);
16 }
17
18 public function shutdownHandler()
19 {
20 if (!defined('WPSTG_REQUEST')) {
21 return;
22 }
23
24 if (!defined('WPSTG_UPLOADS_DIR')) {
25 return;
26 }
27
28 /**
29 * Requests for which to check for memory exhaustion
30 * Using hardcoded values below to avoid loading all classes
31 * @var array $wpStagingRequests
32 */
33 $wpStagingRequests = [
34 'wpstg_backup', // @see WPStaging\Backup\Ajax\Backup::WPSTG_REQUEST
35 'wpstg_restore', // @see WPStaging\Backup\Ajax\Restore::WPSTG_REQUEST
36 'wpstg_cloning', // @see WPStaging\Backend\Modules\Jobs\Cloning::WPSTG_REQUEST
37 ];
38
39 $wpStagingRequest = WPSTG_REQUEST;
40 if (!in_array($wpStagingRequest, $wpStagingRequests, true)) {
41 return;
42 }
43
44 $error = error_get_last();
45 if (!is_array($error)) {
46 return;
47 }
48
49 if ($error['type'] !== E_ERROR) {
50 return;
51 }
52
53 preg_match('/Allowed memory size of (\d+) bytes exhausted \(tried to allocate (\d+) bytes\)/', $error['message'], $data);
54 if (!is_array($data) || count($data) !== 3) {
55 return;
56 }
57
58 // Temporary file to store the error message
59 $errorTmpFile = WPSTG_UPLOADS_DIR . $wpStagingRequest . self::ERROR_FILE_EXTENSION;
60
61 $fileHandler = fopen($errorTmpFile, 'w');
62
63 $message = json_encode([
64 'memoryUsage' => memory_get_usage(true),
65 'peakMemoryUsage' => memory_get_peak_usage(true),
66 'phpMemoryLimit' => ini_get('memory_limit'),
67 'wpMemoryLimit' => defined('WP_MEMORY_LIMIT') ? WP_MEMORY_LIMIT : '',
68 'allowedMemoryLimit' => $data[1],
69 'exhaustedMemorySize' => $data[2],
70 'time' => date('Y/m/d H:i:s', time()), // @see WPStaging\Core\Utils\Logger::LOG_DATETIME_FORMAT, use hardcoded value to avoid loading class
71 ]);
72
73 if (is_resource($fileHandler)) {
74 fwrite($fileHandler, $message);
75 fclose($fileHandler);
76 }
77 }
78 }
79