C:\xampp\htdocs\landing\wp-content\plugins\hummingbird-performance\core\traits\trait-wpconfig.php


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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
<?php
/**
 * WPConfig trait.
 *
 * Allows read/write of wp-config.php file.
 *
 * @since 1.7.0
 * @since 2.5.0  Improved functionality and moved to a trait from Page_Cache module.
 * @package Hummingbird\Core
 */

namespace Hummingbird\Core\Traits;

use 
Hummingbird\WP_Hummingbird;

if ( ! 
defined'ABSPATH' ) ) {
    exit;
}

/**
 * Trait WPConfig
 */
trait WPConfig {

    
/**
     * Config file path.
     *
     * @var string $wp_config_file
     */
    
public $wp_config_file ABSPATH 'wp-config.php';

    
/**
     * File pointer.
     *
     * @var null|resource $fp
     */
    
private $fp null;

    
/**
     * Add a define to wp-config.php file.
     *
     * @since 2.5.0
     *
     * @param string $name   Define name.
     * @param string $value  Define value.
     *
     * @return bool
     */
    
public function wpconfig_add$name$value ) {
        if ( ! 
$this->can_continue() ) {
            return 
false;
        }

        
$value $this->prepare_value$value );
        
$lines $this->get_lines();

        
// Generate the new file data.
        
$new_file = array();
        
$added    false;
        foreach ( 
$lines as $line ) {
            
// Maybe there's already a define?
            
if ( preg_match"/define\(\s*'{$name}'/i"$line ) ) {
                
$added true;
                
WP_Hummingbird::get_instance()->core->logger->log"Added define( {$name}{$value} ) to wp-config.php file."$this->get_slug() );
                
$new_file[] = "define( '{$name}', {$value} ); // Added by Hummingbird";
                continue;
            }

            
// If we reach the end and no define - add it.
            
if ( ! $added && preg_match"/\/\* That's all, stop editing!.*/i"$line ) ) {
                
WP_Hummingbird::get_instance()->core->logger->log"Added define( {$name}{$value} ) to wp-config.php file."$this->get_slug() );
                
$new_file[] = "define( '{$name}', {$value} ); // Added by Hummingbird";
            }

            
$new_file[] = $line;
        }

        return 
$this->writeimplode"\n"$new_file ) );
    }

    
/**
     * Remove a define from wp-config.php file.
     *
     * @since 2.5.0
     *
     * @param string $name  Define name.
     *
     * @return bool
     */
    
public function wpconfig_remove$name ) {
        if ( ! 
$this->can_continue() ) {
            return 
false;
        }

        
$lines $this->get_lines();

        
// Generate the new file data.
        
$new_file = array();
        foreach ( 
$lines as $line ) {
            if ( 
preg_match"/define\(\s*'{$name}'/i"$line ) ) {
                
WP_Hummingbird::get_instance()->core->logger->log"Removed define( '{$name}', ... ) from wp-config.php file."$this->get_slug() );
                continue;
            }

            
$new_file[] = $line;
        }

        return 
$this->writeimplode"\n"$new_file ) );
    }

    
/**
     * Check if we can access the file.
     *
     * @since 2.5.0
     *
     * @return bool
     */
    
private function can_continue() {
        
// Taken from wp-load.php.
        // If config file doesn't exists in root directory, try to locate it in a directory above.
        
if ( ! file_exists$this->wp_config_file )
            && ( 
file_existsdirnameABSPATH ) . '/wp-config.php' ) && ! file_existsdirnameABSPATH ) . '/wp-settings.php' ) ) )
        {
            
// The config file resides one level above ABSPATH but is not part of another installation.
            
$this->wp_config_file dirnameABSPATH ) . '/wp-config.php';
        }

        if ( ! 
file_exists$this->wp_config_file ) ) {
            
WP_Hummingbird::get_instance()->core->logger->log'Failed to locate wp-config.php file.'$this->get_slug() );
            return 
false;
        }

        if ( ! 
$this->fp fopen$this->wp_config_file'r+' ) ) {
            
WP_Hummingbird::get_instance()->core->logger->log'Failed to open wp-config.php for writing.'$this->get_slug() );
            return 
false;
        }

        return 
true;
    }

    
/**
     * Try to convert the value to a proper string, so that it is properly written to wp-config.php file.
     *
     * @since 2.5.0
     *
     * @param mixed $value  Value.
     *
     * @return string
     */
    
private function prepare_value$value ) {
        
// Make sure to enclose in single quotes if this is a string value.
        
if ( is_string$value ) ) {
            return 
"'{$value}'";
        }

        if ( 
is_bool$value ) ) {
            return 
$value 'true' 'false';
        }

        return 
$value;
    }

    
/**
     * Get lines from file.
     *
     * @since 2.5.0
     *
     * @return array
     */
    
private function get_lines() {
        
// Attempt to get a lock. If the filesystem supports locking, this will block until the lock is acquired.
        
flock$this->fpLOCK_EX );

        
$lines = array();
        while ( ! 
feof$this->fp ) ) {
            
$lines[] = rtrimfgets$this->fp ), "\r\n" );
        }

        return 
$lines;
    }

    
/**
     * Write to the start of the file, and truncate it to that length.
     *
     * @since 2.5.0
     *
     * @param string $data  File data.
     *
     * @return bool
     */
    
private function write$data ) {
        
fseek$this->fp);
        
$bytes fwrite$this->fp$data );

        if ( 
$bytes ) {
            
ftruncate$this->fpftell$this->fp ) );
        }

        
fflush$this->fp );
        
flock$this->fpLOCK_UN );
        
fclose$this->fp );

        return (bool) 
$bytes;
    }

}
x

Windows NT KPTV 6.2 build 9200 (Windows Server 2012 Datacenter Edition) i586