: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
if (!defined('ABSPATH')) exit;
if (!class_exists('BVFSWriteCallback')) :
class BVFSWriteCallback extends BVCallbackBase {
const MEGABYTE = 1048576;
const FS_WRITE_WING_VERSION = 1.0;
public function __construct() {
public function removeFiles($files) {
foreach($files as $file) {
if (file_exists($file)) {
$file_result['status'] = unlink($file);
if ($file_result['status'] === false) {
$file_result['error'] = "UNLINK_FAILED";
$file_result['status'] = true;
$file_result['error'] = "NOT_PRESENT";
$result[$file] = $file_result;
$result['status'] = true;
public function makeDirs($dirs, $permissions = 0777, $recursive = true) {
$dir_result['status'] = true;
$dir_result['message'] = "DIR_ALREADY_PRESENT";
$dir_result['status'] = false;
$dir_result['error'] = "FILE_PRESENT_IN_PLACE_OF_DIR";
$dir_result['status'] = mkdir($dir, $permissions, $recursive);
if ($dir_result['status'] === false) {
$dir_result['error'] = "MKDIR_FAILED";
$result[$dir] = $dir_result;
$result['status'] = true;
public function removeDirs($dirs) {
if (is_dir($dir) && !is_link($dir)) {
if ($this->isEmptyDir($dir)) {
$dir_result['status'] = rmdir($dir);
if ($dir_result['status'] === false) {
$dir_result['error'] = "RMDIR_FAILED";
$dir_result['status'] = false;
$dir_result['error'] = "NOT_EMPTY";
$dir_result['status'] = false;
$dir_result['error'] = "NOT_DIR";
$result[$dir] = $dir_result;
$result['status'] = true;
public function isEmptyDir($dir) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
public function doChmod($path_infos) {
foreach($path_infos as $path => $mode) {
if (file_exists($path)) {
$path_result['status'] = chmod($path, $mode);
if ($path_result['status'] === false) {
$path_result['error'] = "CHMOD_FAILED";
$path_result['status'] = false;
$path_result['error'] = "NOT_FOUND";
$result[$path] = $path_result;
$result['status'] = true;
public function concatFiles($ifiles, $ofile, $bsize, $offset) {
if (($offset !== 0) && (!file_exists($ofile))) {
'error' => 'OFILE_NOT_FOUND_BEFORE_CONCAT'
if (file_exists($ofile) && ($offset !== 0)) {
$handle = fopen($ofile, 'rb+');
$handle = fopen($ofile, 'wb+');
'error' => 'FOPEN_FAILED'
if (fseek($handle, $offset, SEEK_SET) === -1) {
'error' => 'FSEEK_FAILED'
foreach($ifiles as $file) {
$fp = fopen($file, 'rb');
'error' => "UNABLE_TO_OPEN_TMP_OFILE_FOR_READING"
$content = fread($fp, $bsize);
if ($content === false) {
'error' => "UNABLE_TO_READ_INFILE",
$written = fwrite($handle, $content);
if ($written === false) {
'error' => "UNABLE_TO_WRITE_TO_OFILE",
$total_written += $written;
$result['fclose'] = fclose($handle);
if (file_exists($ofile) && ($total_written != 0)) {
$result['status'] = true;
$result['fsize'] = filesize($ofile);
$result['total_written'] = $total_written;
$result['status'] = false;
$result['error'] = 'CONCATINATED_FILE_FAILED';
public function renameFiles($path_infos) {
foreach($path_infos as $oldpath => $newpath) {
$action_result = array();
if (file_exists($oldpath)) {
$action_result['status'] = rename($oldpath, $newpath);
if ($action_result['status'] === false) {
$action_result['error'] = "RENAME_FAILED";
$action_result['status'] = false;
$action_result['error'] = "NOT_FOUND";
$result[$oldpath] = $action_result;
$result['status'] = true;
public function curlFile($ifile_url, $ofile, $timeout) {
$fp = fopen($ofile, "wb+");
'error' => 'FOPEN_FAILED_FOR_TEMP_OFILE'
$ch = curl_init($ifile_url);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FILE, $fp);
$result['error'] = curl_error($ch);
$result['errorno'] = curl_errno($ch);
public function streamCopyFile($ifile_url, $ofile) {
$handle = fopen($ifile_url, "rb");
'error' => "UNABLE_TO_OPEN_REMOTE_FILE_STREAM"
$fp = fopen($ofile, "wb+");
'error' => 'FOPEN_FAILED_FOR_OFILE'
if (stream_copy_to_stream($handle, $fp) === false) {
$result['error'] = "UNABLE_TO_WRITE_TO_TMP_OFILE";
public function writeContentToFile($content, $ofile) {
$fp = fopen($ofile, "wb+");
'error' => 'FOPEN_FAILED_FOR_TEMP_OFILE'
if (fwrite($fp, $content) === false) {
$result['error'] = "UNABLE_TO_WRITE_TO_TMP_OFILE";
public function moveUploadedFile($ofile) {
if (isset($_FILES['myfile'])) {
$myfile = $_FILES['myfile'];
switch ($myfile['error']) {
$result['error'] = "UPLOADERR_NO_FILE";
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
$result['error'] = "UPLOADERR_FORM_SIZE";
$result['error'] = "UPLOAD_ERR_UNKNOWN";
if ($is_upload_ok && !isset($myfile['tmp_name'])) {
$result['error'] = "MYFILE_TMP_NAME_NOT_FOUND";
if (move_uploaded_file($myfile['tmp_name'], $ofile) === false) {
$result['error'] = 'MOVE_UPLOAD_FILE_FAILED';
$result['error'] = "FILE_NOT_PRESENT_IN_FILES";
public function uploadFile($params) {
$ofile = $params['ofile'];
switch($params['protocol']) {
$timeout = isset($params['timeout']) ? $params['timeout'] : 60;
$ifile_url = isset($params['ifileurl']) ? $params['ifileurl'] : null;
$resp = $this->curlFile($ifile_url, $ofile, $timeout);
$ifile_url = isset($params['ifileurl']) ? $params['ifileurl'] : null;
$resp = $this->streamCopyFile($ifile_url, $ofile);
case "httpcontenttransfer":
$resp = $this->writeContentToFile($params['content'], $ofile);
$resp = $this->moveUploadedFile($ofile);
$resp['error'] = "INVALID_PROTOCOL";
if (isset($resp['error'])) {
if (file_exists($ofile)) {
$resp['fsize'] = filesize($ofile);
$resp['error'] = "OFILE_NOT_FOUND";
public function process($request) {
$params = $request->params;
switch ($request->method) {
$resp = $this->removeFiles($params['files']);
$resp = $this->doChmod($params['pathinfos']);
$resp = $this->makeDirs($params['dirs'], $params['permissions'], $params['recursive']);
$resp = $this->removeDirs($params['dirs']);
$resp = $this->renameFiles($params['pathinfos']);
$resp = $this->uploadFile($params);
$bsize = (isset($params['bsize'])) ? $params['bsize'] : (8 * BVFSWriteCallback::MEGABYTE);
$offset = (isset($params['offset'])) ? $params['offset'] : 0;
$resp = $this->concatFiles($params['infiles'], $params['ofile'], $bsize, $offset);