: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
Plugin Name: WP File Manager
Plugin URI: https://wordpress.org/plugins/wp-file-manager
Description: Manage your WP files.
Author URI: https://profiles.wordpress.org/mndpsingh287
if (!defined('WP_FILE_MANAGER_DIRNAME')) {
define('WP_FILE_MANAGER_DIRNAME', plugin_basename(dirname(__FILE__)));
if ( ! defined( 'WP_FM_SITE_URL' ) ) {
define( 'WP_FM_SITE_URL', 'https://filemanagerpro.io' );
define('WP_FILE_MANAGER_PATH', plugin_dir_path(__FILE__));
if (!class_exists('mk_file_folder_manager')):
class mk_file_folder_manager
protected $SERVER = 'https://filemanagerpro.io/api/plugindata/api.php';
public function __construct()
add_action('activated_plugin', array(&$this, 'deactivate_file_manager_pro'));
add_action('admin_menu', array(&$this, 'ffm_menu_page'));
add_action('network_admin_menu', array(&$this, 'ffm_menu_page'));
add_action('admin_enqueue_scripts', array(&$this, 'ffm_admin_things'));
add_action('admin_enqueue_scripts', array(&$this, 'ffm_admin_script'));
add_action('wp_ajax_mk_file_folder_manager', array(&$this, 'mk_file_folder_manager_action_callback'));
add_action('wp_ajax_mk_fm_close_fm_help', array($this, 'mk_fm_close_fm_help'));
add_filter('plugin_action_links', array(&$this, 'mk_file_folder_manager_action_links'), 10, 2);
do_action('load_filemanager_extensions');
add_action('plugins_loaded', array(&$this, 'filemanager_load_text_domain'));
File Manager Verify Email
add_action('wp_ajax_mk_filemanager_verify_email', array(&$this, 'mk_filemanager_verify_email_callback'));
add_action('wp_ajax_verify_filemanager_email', array(&$this, 'verify_filemanager_email_callback'));
add_action('wp_ajax_mk_file_folder_manager_media_upload', array(&$this, 'mk_file_folder_manager_media_upload'));
add_action('init', array(&$this, 'create_auto_directory'));
add_action('wp_ajax_mk_file_manager_backup', array(&$this, 'mk_file_manager_backup_callback'));
add_action('wp_ajax_mk_file_manager_backup_remove', array(&$this, 'mk_file_manager_backup_remove_callback'));
add_action('wp_ajax_mk_file_manager_single_backup_remove', array(&$this, 'mk_file_manager_single_backup_remove_callback'));
add_action('wp_ajax_mk_file_manager_single_backup_logs', array(&$this, 'mk_file_manager_single_backup_logs_callback'));
add_action('wp_ajax_mk_file_manager_single_backup_restore', array(&$this, 'mk_file_manager_single_backup_restore_callback'));
add_action( 'rest_api_init', function () {
if(current_user_can('manage_options') || (is_multisite() && current_user_can( 'manage_network' ))){
register_rest_route( 'v1', '/fm/backup/(?P<backup_id>[a-zA-Z0-9-=]+)/(?P<type>[a-zA-Z0-9-=]+)/(?P<key>[a-zA-Z0-9-=]+)', array(
'callback' => array( $this, 'fm_download_backup' ),
'permission_callback' => '__return_true',
register_rest_route( 'v1', '/fm/backupall/(?P<backup_id>[a-zA-Z0-9-=]+)/(?P<type>[a-zA-Z0-9-=]+)/(?P<key>[a-zA-Z0-9-=]+)/(?P<all>[a-zA-Z]+)', array(
'callback' => array( $this, 'fm_download_backup_all' ),
'permission_callback' => '__return_true',
* Checks if another version of Filemanager/Filemanager PRO is active and deactivates it.
* Hooked on `activated_plugin` so other plugin is deactivated when current plugin is activated.
public function deactivate_file_manager_pro($plugin) {
if ( ! in_array( $plugin, array(
'wp-file-manager/file_folder_manager.php',
'wp-file-manager-pro/file_folder_manager_pro.php'
$plugin_to_deactivate = 'wp-file-manager/file_folder_manager.php';
// If we just activated the free version, deactivate the pro version.
if ( $plugin === $plugin_to_deactivate ) {
$plugin_to_deactivate = 'wp-file-manager-pro/file_folder_manager_pro.php';
if ( is_multisite() && is_network_admin() ) {
$active_plugins = (array) get_site_option( 'active_sitewide_plugins', array() );
$active_plugins = array_keys( $active_plugins );
$active_plugins = (array) get_option( 'active_plugins', array() );
foreach ( $active_plugins as $plugin_basename ) {
if ( $plugin_to_deactivate === $plugin_basename ) {
deactivate_plugins( $plugin_basename );
public function create_auto_directory() {
$upload_dir = wp_upload_dir();
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup';
if (!file_exists($backup_dirname)) {
wp_mkdir_p($backup_dirname);
$myfile = $backup_dirname."/.htaccess";
if(!file_exists($myfile)){
$myfileHandle = @fopen($myfile, 'w+');
if(!is_bool($myfileHandle)){
$txt = '<FilesMatch "\.(zip|gz)$">';
$txt .= "\nOrder allow,deny\n";
$txt .= "Deny from all\n";
@fwrite($myfileHandle, $txt);
// creating blank index.php inside fm_backup
$ourFileName = $backup_dirname."/index.html";
if(!file_exists($ourFileName)){
$ourFileHandle = @fopen($ourFileName, 'w');
if(!is_bool($ourFileHandle)){
@chmod($ourFileName, 0755);
public function mk_file_manager_single_backup_restore_callback() {
$nonce = sanitize_text_field($_POST['nonce']);
if(current_user_can('manage_options') && wp_verify_nonce( $nonce, 'wpfmbackuprestore' )) {
$fmdb = $wpdb->prefix.'wpfm_backup';
$upload_dir = wp_upload_dir();
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup/';
$bkpid = intval($_POST['id']);
$filesDestination = WP_CONTENT_DIR.'/';
if ( strcmp($backup_dirname, "/") === 0 ) {
$backup_path = $backup_dirname;
$backup_path = $backup_dirname."/";
$database = sanitize_text_field($_POST['database']);
$plugins = sanitize_text_field($_POST['plugins']);
$themes = sanitize_text_field($_POST['themes']);
$uploads = sanitize_text_field($_POST['uploads']);
$others = sanitize_text_field($_POST['others']);
include('classes/files-restore.php');
$restoreFiles = new wp_file_manager_files_restore();
$wpdb->prepare('select * from '.$fmdb.' where id = %d', $bkpid)
if(file_exists($backup_dirname.$fmbkp->backup_name.'-themes.zip')) {
$wp_filesystem->delete($filesDestination.'themes',true);
$restoreThemes = $restoreFiles->extract($backup_dirname.$fmbkp->backup_name.'-themes.zip',$filesDestination.'themes');
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => 'false', 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => '<li class="fm-running-list fm-custom-checked">'.__('Themes backup restored successfully.', 'wp-file-manager').'</li>'));
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => 'false', 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => '<li class="fm-running-list fm-custom-unchecked">'.__('Unable to restore themes.', 'wp-file-manager').'</li>'));
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => 'false', 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => ''));
else if($uploads == 'true'){
$path_direc = $upload_dir['basedir'];
$path_direc = $filesDestination.'uploads';
if(file_exists($backup_dirname.$fmbkp->backup_name.'-uploads.zip')) {
$alllist = $wp_filesystem->dirlist($path_direc);
if(is_array($alllist) && !empty($alllist))
foreach($alllist as $key=>$value)
if($key!= 'wp-file-manager-pro')
$wp_filesystem->delete($path_direc.'/'.$key,true);
$restoreUploads = $restoreFiles->extract($backup_dirname.$fmbkp->backup_name.'-uploads.zip',$path_direc);
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> 'false', 'others' => $others,'bkpid' => $bkpid,'msg' => '<li class="fm-running-list fm-custom-checked">'.__('Uploads backup restored successfully.', 'wp-file-manager').'</li>'));
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> 'false', 'others' => $others,'bkpid' => $bkpid,'msg' => '<li class="fm-running-list fm-custom-unchecked">'.__('Unable to restore uploads.', 'wp-file-manager').'</li>'));
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> 'false', 'others' => $others,'bkpid' => $bkpid,'msg' => ''));
else if($others == 'true'){
if(file_exists($backup_dirname.$fmbkp->backup_name.'-others.zip')) {
$alllist = $wp_filesystem->dirlist($filesDestination);
if(is_array($alllist) && !empty($alllist))
foreach($alllist as $key=>$value)
if($key != 'themes' && $key != 'uploads' && $key != 'plugins')
$wp_filesystem->delete($filesDestination.$key,true);
$restoreOthers = $restoreFiles->extract($backup_dirname.$fmbkp->backup_name.'-others.zip',$filesDestination);
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => 'false','bkpid' => $bkpid,'msg' => '<li class="fm-running-list fm-custom-checked">'.__('Others backup restored successfully.', 'wp-file-manager').'</li>'));
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => 'false','bkpid' => $bkpid,'msg' => '<li class="fm-running-list fm-custom-unchecked">'.__('Unable to restore others.', 'wp-file-manager').'</li>'));
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => 'false','bkpid' => $bkpid,'msg' => ''));
else if($plugins == 'true'){
if(file_exists($backup_path.$fmbkp->backup_name.'-plugins.zip')) {
$alllist = $wp_filesystem->dirlist($filesDestination.'plugins');
if(is_array($alllist) && !empty($alllist))
foreach($alllist as $key=>$value)
if($key!= 'wp-file-manager')
$wp_filesystem->delete($filesDestination.'plugins/'.$key,true);
$restorePlugins = $restoreFiles->extract($backup_path.$fmbkp->backup_name.'-plugins.zip',$filesDestination.'plugins');
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => 'false','themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => '<li class="fm-running-list fm-custom-checked">'.__('Plugins backup restored successfully.', 'wp-file-manager').'</li>'));
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => 'false','themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => '<li class="fm-running-list fm-custom-unchecked">'.__('Unable to restore plugins.', 'wp-file-manager').'</li>'));
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => 'false','themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => 0,'msg' => ''));
else if($database == 'true'){
if(file_exists($backup_dirname.$fmbkp->backup_name.'-db.sql.gz')) {
include('classes/db-restore.php');
$restoreDatabase = new Restore_Database($fmbkp->backup_name.'-db.sql.gz');
if($restoreDatabase->restoreDb()) {
echo wp_json_encode(array('step' => 0, 'database' => 'false','plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => '','msg' => '<li class="fm-running-list fm-custom-checked">'.__('Database backup restored successfully.', 'wp-file-manager').'</li>', 'msgg' => '<li class="fm-running-list fm-custom-checked">'.__('All Done', 'wp-file-manager').'</li>'));
echo wp_json_encode(array('step' => 0, 'database' => 'false','plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => '<li class="fm-running-list fm-custom-unchecked">'.__('Unable to restore DB backup.', 'wp-file-manager').'</li>'));
echo wp_json_encode(array('step' => 1, 'database' => 'false','plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => ''));
echo wp_json_encode(array('step' => 0, 'database' => 'false','plugins' => 'false','themes' => 'false','uploads'=> 'false','others' => 'false', 'bkpid' => '', 'msg' => '<li class="fm-running-list fm-custom-checked">'.__('All Done', 'wp-file-manager').'</li>'));
echo wp_json_encode(array('step' => 0, 'database' => 'false','plugins' => 'false','themes' => 'false', 'uploads'=> 'false', 'others' => 'false','bkpid' => '','msg' => '<li class="fm-running-list fm-custom-unchecked">'.__('Unable to restore plugins.', 'wp-file-manager').'</li>'));
public function mk_file_manager_backup_remove_callback(){
$nonce = sanitize_text_field($_POST['nonce']);
if(current_user_can('manage_options') && wp_verify_nonce( $nonce, 'wpfmbackupremove' )) {
$fmdb = $wpdb->prefix.'wpfm_backup';
$upload_dir = wp_upload_dir();
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup/';
$bkpRids = $_POST['delarr'];
foreach($bkpRids as $bkRid) {
$wpdb->prepare('select * from '.$fmdb.' where id = %d',$bkRid)
if(file_exists($backup_dirname.$fmbkp->backup_name.'-db.sql.gz')) {
unlink($backup_dirname.$fmbkp->backup_name.'-db.sql.gz');
if(file_exists($backup_dirname.$fmbkp->backup_name.'-others.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-others.zip');
if(file_exists($backup_dirname.$fmbkp->backup_name.'-plugins.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-plugins.zip');
if(file_exists($backup_dirname.$fmbkp->backup_name.'-themes.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-themes.zip');
if(file_exists($backup_dirname.$fmbkp->backup_name.'-uploads.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-uploads.zip');
$wpdb->delete($fmdb, array('id' => $bkRid));
echo __('Backups removed successfully!','wp-file-manager');
echo __('Unable to removed backup!','wp-file-manager');
public function mk_file_manager_single_backup_logs_callback() {
$nonce = sanitize_text_field($_POST['nonce']);
if(current_user_can('manage_options') && wp_verify_nonce( $nonce, 'wpfmbackuplogs' )) {
$fmdb = $wpdb->prefix.'wpfm_backup';
$upload_dir = wp_upload_dir();
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup/';
$bkpId = intval($_POST['id']);
$wpdb->prepare('select * from '.$fmdb.' where id = %d', $bkpId)
if(file_exists($backup_dirname.$fmbkp->backup_name.'-db.sql.gz')) {
$size = filesize($backup_dirname.$fmbkp->backup_name.'-db.sql.gz');
$logs[] = __('Database backup done on date ', 'wp-file-manager').$fmbkp->backup_date.' ('.$fmbkp->backup_name.'-db.sql.gz) ('.$this->formatSizeUnits($size).')';
if(file_exists($backup_dirname.$fmbkp->backup_name.'-plugins.zip')) {
$size = filesize($backup_dirname.$fmbkp->backup_name.'-plugins.zip');
$logs[] = __('Plugins backup done on date ', 'wp-file-manager').$fmbkp->backup_date.' ('.$fmbkp->backup_name.'-plugins.zip) ('.$this->formatSizeUnits($size).')';
if(file_exists($backup_dirname.$fmbkp->backup_name.'-themes.zip')) {
$size = filesize($backup_dirname.$fmbkp->backup_name.'-themes.zip');
$logs[] = __('Themes backup done on date ', 'wp-file-manager').$fmbkp->backup_date.' ('.$fmbkp->backup_name.'-themes.zip) ('.$this->formatSizeUnits($size).')';
if(file_exists($backup_dirname.$fmbkp->backup_name.'-uploads.zip')) {
$size = filesize($backup_dirname.$fmbkp->backup_name.'-uploads.zip');
$logs[] = __('Uploads backup done on date ', 'wp-file-manager').$fmbkp->backup_date.' ('.$fmbkp->backup_name.'-uploads.zip) ('.$this->formatSizeUnits($size).')';
if(file_exists($backup_dirname.$fmbkp->backup_name.'-others.zip')) {
$size = filesize($backup_dirname.$fmbkp->backup_name.'-others.zip');
$logs[] = __('Others backup done on date ', 'wp-file-manager').$fmbkp->backup_date.' ('.$fmbkp->backup_name.'-others.zip) ('.$this->formatSizeUnits($size).')';
$logMessage = '<h3 class="fm_console_log_pop log_msg_align_center">'.__('Logs', 'wp-file-manager').'</h3>';
$logMessage .= '<p class="fm_console_success">('.$count++.') '.$log.'</p>';
$logMessage .= '<p class="fm_console_error">'.__('No logs found!', 'wp-file-manager').'</p>';
public function formatSizeUnits($bytes) {
if ($bytes >= 1073741824)
$bytes = number_format($bytes / 1073741824, 2) . ' GB';
elseif ($bytes >= 1048576)
$bytes = number_format($bytes / 1048576, 2) . ' MB';
$bytes = number_format($bytes / 1024, 2) . ' KB';
$bytes = $bytes . ' bytes';
$bytes = $bytes . ' byte';
public function mk_file_manager_single_backup_remove_callback(){
$nonce = sanitize_text_field($_POST['nonce']);
if(current_user_can('manage_options') && wp_verify_nonce( $nonce, 'wpfmbackupremove' )) {
$fmdb = $wpdb->prefix.'wpfm_backup';
$upload_dir = wp_upload_dir();
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup/';
$bkpId = intval($_POST['id']);
$wpdb->prepare('select * from '.$fmdb.' where id = %d',$bkpId)
if(file_exists($backup_dirname.$fmbkp->backup_name.'-db.sql.gz')) {
unlink($backup_dirname.$fmbkp->backup_name.'-db.sql.gz');
if(file_exists($backup_dirname.$fmbkp->backup_name.'-others.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-others.zip');
if(file_exists($backup_dirname.$fmbkp->backup_name.'-plugins.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-plugins.zip');
if(file_exists($backup_dirname.$fmbkp->backup_name.'-themes.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-themes.zip');
if(file_exists($backup_dirname.$fmbkp->backup_name.'-uploads.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-uploads.zip');
$wpdb->delete($fmdb, array('id' => $bkpId));
public function mk_file_manager_backup_callback(){
$nonce = sanitize_text_field( $_POST['nonce'] );
if( current_user_can( 'manage_options' ) && wp_verify_nonce( $nonce, 'wpfmbackup' ) ) {
$fmdb = $wpdb->prefix.'wpfm_backup';
$date = date('Y-m-d H:i:s');
$file_number = 'backup_'.date('Y_m_d_H_i_s-').bin2hex(openssl_random_pseudo_bytes(4));
$database = sanitize_text_field($_POST['database']);
$files = sanitize_text_field($_POST['files']);
$plugins = sanitize_text_field($_POST['plugins']);
$themes = sanitize_text_field($_POST['themes']);
$uploads = sanitize_text_field($_POST['uploads']);