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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
<?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Services */
/** * Represents the file size service. */ class WPSEO_File_Size_Service {
/** * Retrieves an indexable. * * @param WP_REST_Request $request The request object. * * @return WP_REST_Response The response. */ public function get( WP_REST_Request $request ) { try { $file_url = $this->get_file_url( $request );
return new WP_REST_Response( [ 'type' => 'success', 'size_in_bytes' => $this->get_file_size( $file_url ), ], 200 ); } catch ( WPSEO_File_Size_Exception $exception ) { return new WP_REST_Response( [ 'type' => 'failure', 'response' => $exception->getMessage(), ], 404 ); } }
/** * Retrieves the file url. * * @param WP_REST_Request $request The request to retrieve file url from. * * @return string The file url. * @throws WPSEO_File_Size_Exception The file is hosted externally. */ protected function get_file_url( WP_REST_Request $request ) { $file_url = rawurldecode( $request->get_param( 'url' ) );
if ( ! $this->is_externally_hosted( $file_url ) ) { return $file_url; }
throw WPSEO_File_Size_Exception::externally_hosted( $file_url ); }
/** * Checks if the file is hosted externally. * * @param string $file_url The file url. * * @return bool True if it is hosted externally. */ protected function is_externally_hosted( $file_url ) { return wp_parse_url( home_url(), PHP_URL_HOST ) !== wp_parse_url( $file_url, PHP_URL_HOST ); }
/** * Returns the file size. * * @param string $file_url The file url to get the size for. * * @return int The file size. * @throws WPSEO_File_Size_Exception Retrieval of file size went wrong for unknown reasons. */ protected function get_file_size( $file_url ) { $file_config = wp_upload_dir(); $file_url = str_replace( $file_config['baseurl'], '', $file_url ); $file_size = $this->calculate_file_size( $file_url );
if ( ! $file_size ) { throw WPSEO_File_Size_Exception::unknown_error( $file_url ); }
return $file_size; }
/** * Calculates the file size using the Utils class. * * @param string $file_url The file to retrieve the size for. * * @return int|bool The file size or False if it could not be retrieved. */ protected function calculate_file_size( $file_url ) { return WPSEO_Image_Utils::get_file_size( [ 'path' => $file_url, ] ); } }
|