Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/wp-conte.../plugins/wp-file-.../lib/php
File: elFinderVolumeDriver.class.php
default:
[6500] Fix | Delete
$mime = 'image/png';
[6501] Fix | Delete
break;
[6502] Fix | Delete
}
[6503] Fix | Delete
}
[6504] Fix | Delete
switch ($mime) {
[6505] Fix | Delete
case 'image/gif':
[6506] Fix | Delete
return imagegif($image, $filename);
[6507] Fix | Delete
case 'image/jpeg':
[6508] Fix | Delete
if ($this->options['jpgProgressive']) {
[6509] Fix | Delete
imageinterlace($image, true);
[6510] Fix | Delete
}
[6511] Fix | Delete
return imagejpeg($image, $filename, $jpgQuality);
[6512] Fix | Delete
case 'image/wbmp':
[6513] Fix | Delete
return imagewbmp($image, $filename);
[6514] Fix | Delete
case 'image/png':
[6515] Fix | Delete
default:
[6516] Fix | Delete
return imagepng($image, $filename);
[6517] Fix | Delete
}
[6518] Fix | Delete
}
[6519] Fix | Delete
[6520] Fix | Delete
/**
[6521] Fix | Delete
* Output imagick image to file
[6522] Fix | Delete
*
[6523] Fix | Delete
* @param imagick $img imagick image resource
[6524] Fix | Delete
* @param string $filename The path to save the file to.
[6525] Fix | Delete
* @param string $destformat The Image type to use for $filename
[6526] Fix | Delete
* @param int $jpgQuality JEPG quality (1-100)
[6527] Fix | Delete
*
[6528] Fix | Delete
* @return bool
[6529] Fix | Delete
*/
[6530] Fix | Delete
protected function imagickImage($img, $filename, $destformat, $jpgQuality = null)
[6531] Fix | Delete
{
[6532] Fix | Delete
[6533] Fix | Delete
if (!$jpgQuality) {
[6534] Fix | Delete
$jpgQuality = $this->options['jpgQuality'];
[6535] Fix | Delete
}
[6536] Fix | Delete
[6537] Fix | Delete
try {
[6538] Fix | Delete
if ($destformat) {
[6539] Fix | Delete
if ($destformat === 'gif') {
[6540] Fix | Delete
$img->setImageFormat('gif');
[6541] Fix | Delete
} else if ($destformat === 'png') {
[6542] Fix | Delete
$img->setImageFormat('png');
[6543] Fix | Delete
} else if ($destformat === 'jpg') {
[6544] Fix | Delete
$img->setImageFormat('jpeg');
[6545] Fix | Delete
}
[6546] Fix | Delete
}
[6547] Fix | Delete
if (strtoupper($img->getImageFormat()) === 'JPEG') {
[6548] Fix | Delete
$img->setImageCompression(imagick::COMPRESSION_JPEG);
[6549] Fix | Delete
$img->setImageCompressionQuality($jpgQuality);
[6550] Fix | Delete
if ($this->options['jpgProgressive']) {
[6551] Fix | Delete
$img->setInterlaceScheme(Imagick::INTERLACE_PLANE);
[6552] Fix | Delete
}
[6553] Fix | Delete
try {
[6554] Fix | Delete
$orientation = $img->getImageOrientation();
[6555] Fix | Delete
} catch (ImagickException $e) {
[6556] Fix | Delete
$orientation = 0;
[6557] Fix | Delete
}
[6558] Fix | Delete
$img->stripImage();
[6559] Fix | Delete
if ($orientation) {
[6560] Fix | Delete
$img->setImageOrientation($orientation);
[6561] Fix | Delete
}
[6562] Fix | Delete
}
[6563] Fix | Delete
$result = $img->writeImage($filename);
[6564] Fix | Delete
} catch (Exception $e) {
[6565] Fix | Delete
$result = false;
[6566] Fix | Delete
}
[6567] Fix | Delete
[6568] Fix | Delete
return $result;
[6569] Fix | Delete
}
[6570] Fix | Delete
[6571] Fix | Delete
/**
[6572] Fix | Delete
* Assign the proper background to a gd image
[6573] Fix | Delete
*
[6574] Fix | Delete
* @param resource $image gd image resource
[6575] Fix | Delete
* @param string $bgcolor background color in #rrggbb format
[6576] Fix | Delete
*/
[6577] Fix | Delete
protected function gdImageBackground($image, $bgcolor)
[6578] Fix | Delete
{
[6579] Fix | Delete
[6580] Fix | Delete
if ($bgcolor === 'transparent') {
[6581] Fix | Delete
imagealphablending($image, false);
[6582] Fix | Delete
imagesavealpha($image, true);
[6583] Fix | Delete
} else {
[6584] Fix | Delete
list($r, $g, $b) = sscanf($bgcolor, "#%02x%02x%02x");
[6585] Fix | Delete
$bgcolor1 = imagecolorallocate($image, $r, $g, $b);
[6586] Fix | Delete
imagefill($image, 0, 0, $bgcolor1);
[6587] Fix | Delete
}
[6588] Fix | Delete
}
[6589] Fix | Delete
[6590] Fix | Delete
/**
[6591] Fix | Delete
* Prepare variables for exec convert of ImageMagick
[6592] Fix | Delete
*
[6593] Fix | Delete
* @param string $path
[6594] Fix | Delete
* @param string $destformat
[6595] Fix | Delete
* @param int $jpgQuality
[6596] Fix | Delete
* @param array $imageSize
[6597] Fix | Delete
* @param null $mime
[6598] Fix | Delete
*
[6599] Fix | Delete
* @return array
[6600] Fix | Delete
* @throws elFinderAbortException
[6601] Fix | Delete
*/
[6602] Fix | Delete
protected function imageMagickConvertPrepare($path, $destformat, $jpgQuality, $imageSize = null, $mime = null)
[6603] Fix | Delete
{
[6604] Fix | Delete
if (is_null($imageSize)) {
[6605] Fix | Delete
$imageSize = getimagesize($path);
[6606] Fix | Delete
}
[6607] Fix | Delete
if (is_null($mime)) {
[6608] Fix | Delete
$mime = $this->mimetype($path);
[6609] Fix | Delete
}
[6610] Fix | Delete
$srcType = $this->getExtentionByMime($mime, ':');
[6611] Fix | Delete
$ani = false;
[6612] Fix | Delete
if (preg_match('/^(?:gif|png|ico)/', $srcType)) {
[6613] Fix | Delete
$cmd = ELFINDER_IDENTIFY_PATH . ' -- ' . escapeshellarg($srcType . $path);
[6614] Fix | Delete
if ($this->procExec($cmd, $o) === 0) {
[6615] Fix | Delete
$ani = preg_split('/(?:\r\n|\n|\r)/', trim($o));
[6616] Fix | Delete
if (count($ani) < 2) {
[6617] Fix | Delete
$ani = false;
[6618] Fix | Delete
}
[6619] Fix | Delete
}
[6620] Fix | Delete
}
[6621] Fix | Delete
$coalesce = $index = $interlace = '';
[6622] Fix | Delete
$deconstruct = ' +repage';
[6623] Fix | Delete
if ($ani && $destformat !== 'png'/* not createTmb */) {
[6624] Fix | Delete
if (is_null($destformat)) {
[6625] Fix | Delete
$coalesce = ' -coalesce -repage 0x0';
[6626] Fix | Delete
$deconstruct = ' +repage -deconstruct -layers optimize';
[6627] Fix | Delete
} else if ($imageSize) {
[6628] Fix | Delete
if ($srcType === 'ico:') {
[6629] Fix | Delete
$index = '[0]';
[6630] Fix | Delete
foreach ($ani as $_i => $_info) {
[6631] Fix | Delete
if (preg_match('/ (\d+)x(\d+) /', $_info, $m)) {
[6632] Fix | Delete
if ($m[1] == $imageSize[0] && $m[2] == $imageSize[1]) {
[6633] Fix | Delete
$index = '[' . $_i . ']';
[6634] Fix | Delete
break;
[6635] Fix | Delete
}
[6636] Fix | Delete
}
[6637] Fix | Delete
}
[6638] Fix | Delete
}
[6639] Fix | Delete
}
[6640] Fix | Delete
} else {
[6641] Fix | Delete
$index = '[0]';
[6642] Fix | Delete
}
[6643] Fix | Delete
if ($imageSize && ($imageSize[2] === IMAGETYPE_JPEG || $imageSize[2] === IMAGETYPE_JPEG2000)) {
[6644] Fix | Delete
$jpgQuality = ' -quality ' . $jpgQuality;
[6645] Fix | Delete
if ($this->options['jpgProgressive']) {
[6646] Fix | Delete
$interlace = ' -interlace Plane';
[6647] Fix | Delete
}
[6648] Fix | Delete
} else {
[6649] Fix | Delete
$jpgQuality = '';
[6650] Fix | Delete
}
[6651] Fix | Delete
$quotedPath = escapeshellarg($srcType . $path . $index);
[6652] Fix | Delete
$quotedDstPath = escapeshellarg(($destformat ? ($destformat . ':') : $srcType) . $path);
[6653] Fix | Delete
return compact('ani', 'index', 'coalesce', 'deconstruct', 'jpgQuality', 'quotedPath', 'quotedDstPath', 'interlace');
[6654] Fix | Delete
}
[6655] Fix | Delete
[6656] Fix | Delete
/*********************** misc *************************/
[6657] Fix | Delete
[6658] Fix | Delete
/**
[6659] Fix | Delete
* Find position of first occurrence of string in a string with multibyte support
[6660] Fix | Delete
*
[6661] Fix | Delete
* @param string $haystack The string being checked.
[6662] Fix | Delete
* @param string $needle The string to find in haystack.
[6663] Fix | Delete
* @param int $offset The search offset. If it is not specified, 0 is used.
[6664] Fix | Delete
*
[6665] Fix | Delete
* @return int|bool
[6666] Fix | Delete
* @author Alexey Sukhotin
[6667] Fix | Delete
**/
[6668] Fix | Delete
protected function stripos($haystack, $needle, $offset = 0)
[6669] Fix | Delete
{
[6670] Fix | Delete
if (function_exists('mb_stripos')) {
[6671] Fix | Delete
return mb_stripos($haystack, $needle, $offset, 'UTF-8');
[6672] Fix | Delete
} else if (function_exists('mb_strtolower') && function_exists('mb_strpos')) {
[6673] Fix | Delete
return mb_strpos(mb_strtolower($haystack, 'UTF-8'), mb_strtolower($needle, 'UTF-8'), $offset);
[6674] Fix | Delete
}
[6675] Fix | Delete
return stripos($haystack, $needle, $offset);
[6676] Fix | Delete
}
[6677] Fix | Delete
[6678] Fix | Delete
/**
[6679] Fix | Delete
* Default serach match method (name match)
[6680] Fix | Delete
*
[6681] Fix | Delete
* @param String $name Item name
[6682] Fix | Delete
* @param String $query Query word
[6683] Fix | Delete
* @param String $path Item path
[6684] Fix | Delete
*
[6685] Fix | Delete
* @return bool @return bool
[6686] Fix | Delete
*/
[6687] Fix | Delete
protected function searchMatchName($name, $query, $path)
[6688] Fix | Delete
{
[6689] Fix | Delete
return $this->stripos($name, $query) !== false;
[6690] Fix | Delete
}
[6691] Fix | Delete
[6692] Fix | Delete
/**
[6693] Fix | Delete
* Get server side available archivers
[6694] Fix | Delete
*
[6695] Fix | Delete
* @param bool $use_cache
[6696] Fix | Delete
*
[6697] Fix | Delete
* @return array
[6698] Fix | Delete
* @throws elFinderAbortException
[6699] Fix | Delete
*/
[6700] Fix | Delete
protected function getArchivers($use_cache = true)
[6701] Fix | Delete
{
[6702] Fix | Delete
$sessionKey = 'archivers';
[6703] Fix | Delete
if ($use_cache) {
[6704] Fix | Delete
if (isset($this->options['archivers']) && is_array($this->options['archivers']) && $this->options['archivers']) {
[6705] Fix | Delete
$cache = $this->options['archivers'];
[6706] Fix | Delete
} else {
[6707] Fix | Delete
$cache = elFinder::$archivers;
[6708] Fix | Delete
}
[6709] Fix | Delete
if ($cache) {
[6710] Fix | Delete
return $cache;
[6711] Fix | Delete
} else {
[6712] Fix | Delete
if ($cache = $this->session->get($sessionKey, array())) {
[6713] Fix | Delete
return elFinder::$archivers = $cache;
[6714] Fix | Delete
}
[6715] Fix | Delete
}
[6716] Fix | Delete
}
[6717] Fix | Delete
[6718] Fix | Delete
$arcs = array(
[6719] Fix | Delete
'create' => array(),
[6720] Fix | Delete
'extract' => array()
[6721] Fix | Delete
);
[6722] Fix | Delete
[6723] Fix | Delete
if ($this->procExec('') === 0) {
[6724] Fix | Delete
[6725] Fix | Delete
$this->procExec(ELFINDER_TAR_PATH . ' --version', $o, $ctar);
[6726] Fix | Delete
[6727] Fix | Delete
if ($ctar == 0) {
[6728] Fix | Delete
$arcs['create']['application/x-tar'] = array('cmd' => ELFINDER_TAR_PATH, 'argc' => '-chf', 'ext' => 'tar');
[6729] Fix | Delete
$arcs['extract']['application/x-tar'] = array('cmd' => ELFINDER_TAR_PATH, 'argc' => '-xf', 'ext' => 'tar', 'toSpec' => '-C ', 'getsize' => array('argc' => '-xvf', 'toSpec' => '--to-stdout|wc -c', 'regex' => '/^.+(?:\r\n|\n|\r)[^\r\n0-9]*([0-9]+)[^\r\n]*$/s', 'replace' => '$1'));
[6730] Fix | Delete
unset($o);
[6731] Fix | Delete
$this->procExec(ELFINDER_GZIP_PATH . ' --version', $o, $c);
[6732] Fix | Delete
if ($c == 0) {
[6733] Fix | Delete
$arcs['create']['application/x-gzip'] = array('cmd' => ELFINDER_TAR_PATH, 'argc' => '-czhf', 'ext' => 'tgz');
[6734] Fix | Delete
$arcs['extract']['application/x-gzip'] = array('cmd' => ELFINDER_TAR_PATH, 'argc' => '-xzf', 'ext' => 'tgz', 'toSpec' => '-C ', 'getsize' => array('argc' => '-xvf', 'toSpec' => '--to-stdout|wc -c', 'regex' => '/^.+(?:\r\n|\n|\r)[^\r\n0-9]*([0-9]+)[^\r\n]*$/s', 'replace' => '$1'));
[6735] Fix | Delete
}
[6736] Fix | Delete
unset($o);
[6737] Fix | Delete
$this->procExec(ELFINDER_BZIP2_PATH . ' --version', $o, $c);
[6738] Fix | Delete
if ($c == 0) {
[6739] Fix | Delete
$arcs['create']['application/x-bzip2'] = array('cmd' => ELFINDER_TAR_PATH, 'argc' => '-cjhf', 'ext' => 'tbz');
[6740] Fix | Delete
$arcs['extract']['application/x-bzip2'] = array('cmd' => ELFINDER_TAR_PATH, 'argc' => '-xjf', 'ext' => 'tbz', 'toSpec' => '-C ', 'getsize' => array('argc' => '-xvf', 'toSpec' => '--to-stdout|wc -c', 'regex' => '/^.+(?:\r\n|\n|\r)[^\r\n0-9]*([0-9]+)[^\r\n]*$/s', 'replace' => '$1'));
[6741] Fix | Delete
}
[6742] Fix | Delete
unset($o);
[6743] Fix | Delete
$this->procExec(ELFINDER_XZ_PATH . ' --version', $o, $c);
[6744] Fix | Delete
if ($c == 0) {
[6745] Fix | Delete
$arcs['create']['application/x-xz'] = array('cmd' => ELFINDER_TAR_PATH, 'argc' => '-cJhf', 'ext' => 'xz');
[6746] Fix | Delete
$arcs['extract']['application/x-xz'] = array('cmd' => ELFINDER_TAR_PATH, 'argc' => '-xJf', 'ext' => 'xz', 'toSpec' => '-C ', 'getsize' => array('argc' => '-xvf', 'toSpec' => '--to-stdout|wc -c', 'regex' => '/^.+(?:\r\n|\n|\r)[^\r\n0-9]*([0-9]+)[^\r\n]*$/s', 'replace' => '$1'));
[6747] Fix | Delete
}
[6748] Fix | Delete
}
[6749] Fix | Delete
unset($o);
[6750] Fix | Delete
$this->procExec(ELFINDER_ZIP_PATH . ' -h', $o, $c);
[6751] Fix | Delete
if ($c == 0) {
[6752] Fix | Delete
$arcs['create']['application/zip'] = array('cmd' => ELFINDER_ZIP_PATH, 'argc' => '-r9 -q', 'ext' => 'zip');
[6753] Fix | Delete
}
[6754] Fix | Delete
unset($o);
[6755] Fix | Delete
$this->procExec(ELFINDER_UNZIP_PATH . ' --help', $o, $c);
[6756] Fix | Delete
if ($c == 0) {
[6757] Fix | Delete
$arcs['extract']['application/zip'] = array('cmd' => ELFINDER_UNZIP_PATH, 'argc' => '-q', 'ext' => 'zip', 'toSpec' => '-d ', 'getsize' => array('argc' => '-Z -t', 'regex' => '/^.+?,\s?([0-9]+).+$/', 'replace' => '$1'));
[6758] Fix | Delete
}
[6759] Fix | Delete
unset($o);
[6760] Fix | Delete
$this->procExec(ELFINDER_RAR_PATH, $o, $c);
[6761] Fix | Delete
if ($c == 0 || $c == 7) {
[6762] Fix | Delete
$arcs['create']['application/x-rar'] = array('cmd' => ELFINDER_RAR_PATH, 'argc' => 'a -inul' . (defined('ELFINDER_RAR_MA4') && ELFINDER_RAR_MA4? ' -ma4' : '') . ' --', 'ext' => 'rar');
[6763] Fix | Delete
}
[6764] Fix | Delete
unset($o);
[6765] Fix | Delete
$this->procExec(ELFINDER_UNRAR_PATH, $o, $c);
[6766] Fix | Delete
if ($c == 0 || $c == 7) {
[6767] Fix | Delete
$arcs['extract']['application/x-rar'] = array('cmd' => ELFINDER_UNRAR_PATH, 'argc' => 'x -y', 'ext' => 'rar', 'toSpec' => '', 'getsize' => array('argc' => 'l', 'regex' => '/^.+(?:\r\n|\n|\r)(?:(?:[^\r\n0-9]+[0-9]+[^\r\n0-9]+([0-9]+)[^\r\n]+)|(?:[^\r\n0-9]+([0-9]+)[^\r\n0-9]+[0-9]+[^\r\n]*))$/s', 'replace' => '$1'));
[6768] Fix | Delete
}
[6769] Fix | Delete
unset($o);
[6770] Fix | Delete
$this->procExec(ELFINDER_7Z_PATH, $o, $c);
[6771] Fix | Delete
if ($c == 0) {
[6772] Fix | Delete
$arcs['create']['application/x-7z-compressed'] = array('cmd' => ELFINDER_7Z_PATH, 'argc' => 'a --', 'ext' => '7z');
[6773] Fix | Delete
$arcs['extract']['application/x-7z-compressed'] = array('cmd' => ELFINDER_7Z_PATH, 'argc' => 'x -y', 'ext' => '7z', 'toSpec' => '-o', 'getsize' => array('argc' => 'l', 'regex' => '/^.+(?:\r\n|\n|\r)[^\r\n0-9]+([0-9]+)[^\r\n]+$/s', 'replace' => '$1'));
[6774] Fix | Delete
[6775] Fix | Delete
if (empty($arcs['create']['application/zip'])) {
[6776] Fix | Delete
$arcs['create']['application/zip'] = array('cmd' => ELFINDER_7Z_PATH, 'argc' => 'a -tzip --', 'ext' => 'zip');
[6777] Fix | Delete
}
[6778] Fix | Delete
if (empty($arcs['extract']['application/zip'])) {
[6779] Fix | Delete
$arcs['extract']['application/zip'] = array('cmd' => ELFINDER_7Z_PATH, 'argc' => 'x -tzip -y', 'ext' => 'zip', 'toSpec' => '-o', 'getsize' => array('argc' => 'l', 'regex' => '/^.+(?:\r\n|\n|\r)[^\r\n0-9]+([0-9]+)[^\r\n]+$/s', 'replace' => '$1'));
[6780] Fix | Delete
}
[6781] Fix | Delete
if (empty($arcs['create']['application/x-tar'])) {
[6782] Fix | Delete
$arcs['create']['application/x-tar'] = array('cmd' => ELFINDER_7Z_PATH, 'argc' => 'a -ttar --', 'ext' => 'tar');
[6783] Fix | Delete
}
[6784] Fix | Delete
if (empty($arcs['extract']['application/x-tar'])) {
[6785] Fix | Delete
$arcs['extract']['application/x-tar'] = array('cmd' => ELFINDER_7Z_PATH, 'argc' => 'x -ttar -y', 'ext' => 'tar', 'toSpec' => '-o', 'getsize' => array('argc' => 'l', 'regex' => '/^.+(?:\r\n|\n|\r)[^\r\n0-9]+([0-9]+)[^\r\n]+$/s', 'replace' => '$1'));
[6786] Fix | Delete
}
[6787] Fix | Delete
if (substr(PHP_OS, 0, 3) === 'WIN' && empty($arcs['extract']['application/x-rar'])) {
[6788] Fix | Delete
$arcs['extract']['application/x-rar'] = array('cmd' => ELFINDER_7Z_PATH, 'argc' => 'x -trar -y', 'ext' => 'rar', 'toSpec' => '-o', 'getsize' => array('argc' => 'l', 'regex' => '/^.+(?:\r\n|\n|\r)[^\r\n0-9]+([0-9]+)[^\r\n]+$/s', 'replace' => '$1'));
[6789] Fix | Delete
}
[6790] Fix | Delete
}
[6791] Fix | Delete
[6792] Fix | Delete
}
[6793] Fix | Delete
[6794] Fix | Delete
// Use PHP ZipArchive Class
[6795] Fix | Delete
if (class_exists('ZipArchive', false)) {
[6796] Fix | Delete
if (empty($arcs['create']['application/zip'])) {
[6797] Fix | Delete
$arcs['create']['application/zip'] = array('cmd' => 'phpfunction', 'argc' => array('self', 'zipArchiveZip'), 'ext' => 'zip');
[6798] Fix | Delete
}
[6799] Fix | Delete
if (empty($arcs['extract']['application/zip'])) {
[6800] Fix | Delete
$arcs['extract']['application/zip'] = array('cmd' => 'phpfunction', 'argc' => array('self', 'zipArchiveUnzip'), 'ext' => 'zip');
[6801] Fix | Delete
}
[6802] Fix | Delete
}
[6803] Fix | Delete
[6804] Fix | Delete
$this->session->set($sessionKey, $arcs);
[6805] Fix | Delete
return elFinder::$archivers = $arcs;
[6806] Fix | Delete
}
[6807] Fix | Delete
[6808] Fix | Delete
/**
[6809] Fix | Delete
* Resolve relative / (Unix-like)absolute path
[6810] Fix | Delete
*
[6811] Fix | Delete
* @param string $path target path
[6812] Fix | Delete
* @param string $base base path
[6813] Fix | Delete
*
[6814] Fix | Delete
* @return string
[6815] Fix | Delete
*/
[6816] Fix | Delete
protected function getFullPath($path, $base)
[6817] Fix | Delete
{
[6818] Fix | Delete
$separator = $this->separator;
[6819] Fix | Delete
$systemroot = $this->systemRoot;
[6820] Fix | Delete
$base = (string)$base;
[6821] Fix | Delete
[6822] Fix | Delete
if ($base[0] === $separator && substr($base, 0, strlen($systemroot)) !== $systemroot) {
[6823] Fix | Delete
$base = $systemroot . substr($base, 1);
[6824] Fix | Delete
}
[6825] Fix | Delete
if ($base !== $systemroot) {
[6826] Fix | Delete
$base = rtrim($base, $separator);
[6827] Fix | Delete
}
[6828] Fix | Delete
[6829] Fix | Delete
$sepquoted = preg_quote($separator, '#');
[6830] Fix | Delete
[6831] Fix | Delete
// normalize `//` to `/`
[6832] Fix | Delete
$path = preg_replace('#' . $sepquoted . '+#', $separator, $path); // '#/+#'
[6833] Fix | Delete
[6834] Fix | Delete
// remove `./`
[6835] Fix | Delete
$path = preg_replace('#(?<=^|' . $sepquoted . ')\.' . $sepquoted . '#', '', $path); // '#(?<=^|/)\./#'
[6836] Fix | Delete
[6837] Fix | Delete
// 'Here'
[6838] Fix | Delete
if ($path === '') return $base;
[6839] Fix | Delete
[6840] Fix | Delete
// join $base to $path if $path start `../`
[6841] Fix | Delete
[6842] Fix | Delete
if (substr($path, 0, 3) === '..' . $separator) {
[6843] Fix | Delete
$path = $base . $separator . $path;
[6844] Fix | Delete
}
[6845] Fix | Delete
// normalize `/../`
[6846] Fix | Delete
$normreg = '#(' . $sepquoted . ')[^' . $sepquoted . ']+' . $sepquoted . '\.\.' . $sepquoted . '#'; // '#(/)[^\/]+/\.\./#'
[6847] Fix | Delete
while (preg_match($normreg, $path)) {
[6848] Fix | Delete
$path = preg_replace($normreg, '$1', $path, 1);
[6849] Fix | Delete
}
[6850] Fix | Delete
if ($path !== $systemroot) {
[6851] Fix | Delete
$path = rtrim($path, $separator);
[6852] Fix | Delete
}
[6853] Fix | Delete
[6854] Fix | Delete
// discard the surplus `../`
[6855] Fix | Delete
$path = str_replace('..' . $separator, '', $path);
[6856] Fix | Delete
[6857] Fix | Delete
// Absolute path
[6858] Fix | Delete
if ($path[0] === $separator || strpos($path, $systemroot) === 0) {
[6859] Fix | Delete
return $path;
[6860] Fix | Delete
}
[6861] Fix | Delete
[6862] Fix | Delete
$preg_separator = '#' . $sepquoted . '#';
[6863] Fix | Delete
[6864] Fix | Delete
// Relative path from 'Here'
[6865] Fix | Delete
if (substr($path, 0, 2) === '.' . $separator || $path[0] !== '.') {
[6866] Fix | Delete
$arrn = preg_split($preg_separator, $path, -1, PREG_SPLIT_NO_EMPTY);
[6867] Fix | Delete
if ($arrn[0] !== '.') {
[6868] Fix | Delete
array_unshift($arrn, '.');
[6869] Fix | Delete
}
[6870] Fix | Delete
$arrn[0] = rtrim($base, $separator);
[6871] Fix | Delete
return join($separator, $arrn);
[6872] Fix | Delete
}
[6873] Fix | Delete
[6874] Fix | Delete
return $path;
[6875] Fix | Delete
}
[6876] Fix | Delete
[6877] Fix | Delete
/**
[6878] Fix | Delete
* Remove directory recursive on local file system
[6879] Fix | Delete
*
[6880] Fix | Delete
* @param string $dir Target dirctory path
[6881] Fix | Delete
*
[6882] Fix | Delete
* @return boolean
[6883] Fix | Delete
* @throws elFinderAbortException
[6884] Fix | Delete
* @author Naoki Sawada
[6885] Fix | Delete
*/
[6886] Fix | Delete
public function rmdirRecursive($dir)
[6887] Fix | Delete
{
[6888] Fix | Delete
return self::localRmdirRecursive($dir);
[6889] Fix | Delete
}
[6890] Fix | Delete
[6891] Fix | Delete
/**
[6892] Fix | Delete
* Create archive and return its path
[6893] Fix | Delete
*
[6894] Fix | Delete
* @param string $dir target dir
[6895] Fix | Delete
* @param array $files files names list
[6896] Fix | Delete
* @param string $name archive name
[6897] Fix | Delete
* @param array $arc archiver options
[6898] Fix | Delete
*
[6899] Fix | Delete
* @return string|bool
[6900] Fix | Delete
* @throws elFinderAbortException
[6901] Fix | Delete
* @author Dmitry (dio) Levashov,
[6902] Fix | Delete
* @author Alexey Sukhotin
[6903] Fix | Delete
* @author Naoki Sawada
[6904] Fix | Delete
*/
[6905] Fix | Delete
protected function makeArchive($dir, $files, $name, $arc)
[6906] Fix | Delete
{
[6907] Fix | Delete
if ($arc['cmd'] === 'phpfunction') {
[6908] Fix | Delete
if (is_callable($arc['argc'])) {
[6909] Fix | Delete
call_user_func_array($arc['argc'], array($dir, $files, $name));
[6910] Fix | Delete
}
[6911] Fix | Delete
} else {
[6912] Fix | Delete
$cwd = getcwd();
[6913] Fix | Delete
if (chdir($dir)) {
[6914] Fix | Delete
foreach ($files as $i => $file) {
[6915] Fix | Delete
$files[$i] = '.' . DIRECTORY_SEPARATOR . basename($file);
[6916] Fix | Delete
}
[6917] Fix | Delete
$files = array_map('escapeshellarg', $files);
[6918] Fix | Delete
$prefix = $switch = '';
[6919] Fix | Delete
// The zip command accepts the "-" at the beginning of the file name as a command switch,
[6920] Fix | Delete
// and can't use '--' before archive name, so add "./" to name for security reasons.
[6921] Fix | Delete
if ($arc['ext'] === 'zip' && strpos($arc['argc'], '-tzip') === false) {
[6922] Fix | Delete
$prefix = './';
[6923] Fix | Delete
$switch = '-- ';
[6924] Fix | Delete
}
[6925] Fix | Delete
$cmd = $arc['cmd'] . ' ' . $arc['argc'] . ' ' . $prefix . escapeshellarg($name) . ' ' . $switch . implode(' ', $files);
[6926] Fix | Delete
$err_out = '';
[6927] Fix | Delete
$this->procExec($cmd, $o, $c, $err_out, $dir);
[6928] Fix | Delete
chdir($cwd);
[6929] Fix | Delete
} else {
[6930] Fix | Delete
return false;
[6931] Fix | Delete
}
[6932] Fix | Delete
}
[6933] Fix | Delete
$path = $dir . DIRECTORY_SEPARATOR . $name;
[6934] Fix | Delete
return file_exists($path) ? $path : false;
[6935] Fix | Delete
}
[6936] Fix | Delete
[6937] Fix | Delete
/**
[6938] Fix | Delete
* Unpack archive
[6939] Fix | Delete
*
[6940] Fix | Delete
* @param string $path archive path
[6941] Fix | Delete
* @param array $arc archiver command and arguments (same as in $this->archivers)
[6942] Fix | Delete
* @param bool|string $mode bool: remove archive ( unlink($path) ) | string: extract to directory
[6943] Fix | Delete
*
[6944] Fix | Delete
* @return void
[6945] Fix | Delete
* @throws elFinderAbortException
[6946] Fix | Delete
* @author Dmitry (dio) Levashov
[6947] Fix | Delete
* @author Alexey Sukhotin
[6948] Fix | Delete
* @author Naoki Sawada
[6949] Fix | Delete
*/
[6950] Fix | Delete
protected function unpackArchive($path, $arc, $mode = true)
[6951] Fix | Delete
{
[6952] Fix | Delete
if (is_string($mode)) {
[6953] Fix | Delete
$dir = $mode;
[6954] Fix | Delete
$chdir = null;
[6955] Fix | Delete
$remove = false;
[6956] Fix | Delete
} else {
[6957] Fix | Delete
$dir = dirname($path);
[6958] Fix | Delete
$chdir = $dir;
[6959] Fix | Delete
$remove = $mode;
[6960] Fix | Delete
}
[6961] Fix | Delete
$dir = realpath($dir);
[6962] Fix | Delete
$path = realpath($path);
[6963] Fix | Delete
if ($arc['cmd'] === 'phpfunction') {
[6964] Fix | Delete
if (is_callable($arc['argc'])) {
[6965] Fix | Delete
call_user_func_array($arc['argc'], array($path, $dir));
[6966] Fix | Delete
}
[6967] Fix | Delete
} else {
[6968] Fix | Delete
$cwd = getcwd();
[6969] Fix | Delete
if (!$chdir || chdir($dir)) {
[6970] Fix | Delete
if (!empty($arc['getsize'])) {
[6971] Fix | Delete
// Check total file size after extraction
[6972] Fix | Delete
$getsize = $arc['getsize'];
[6973] Fix | Delete
if (is_array($getsize) && !empty($getsize['regex']) && !empty($getsize['replace'])) {
[6974] Fix | Delete
$cmd = $arc['cmd'] . ' ' . $getsize['argc'] . ' ' . escapeshellarg($path) . (!empty($getsize['toSpec'])? (' ' . $getsize['toSpec']): '');
[6975] Fix | Delete
$this->procExec($cmd, $o, $c);
[6976] Fix | Delete
if ($o) {
[6977] Fix | Delete
$size = preg_replace($getsize['regex'], $getsize['replace'], trim($o));
[6978] Fix | Delete
$comp = function_exists('bccomp')? 'bccomp' : 'strnatcmp';
[6979] Fix | Delete
if (!empty($this->options['maxArcFilesSize'])) {
[6980] Fix | Delete
if ($comp($size, (string)$this->options['maxArcFilesSize']) > 0) {
[6981] Fix | Delete
throw new Exception(elFinder::ERROR_ARC_MAXSIZE);
[6982] Fix | Delete
}
[6983] Fix | Delete
}
[6984] Fix | Delete
}
[6985] Fix | Delete
unset($o, $c);
[6986] Fix | Delete
}
[6987] Fix | Delete
}
[6988] Fix | Delete
if ($chdir) {
[6989] Fix | Delete
$cmd = $arc['cmd'] . ' ' . $arc['argc'] . ' ' . escapeshellarg(basename($path));
[6990] Fix | Delete
} else {
[6991] Fix | Delete
$cmd = $arc['cmd'] . ' ' . $arc['argc'] . ' ' . escapeshellarg($path) . ' ' . $arc['toSpec'] . escapeshellarg($dir);
[6992] Fix | Delete
}
[6993] Fix | Delete
$this->procExec($cmd, $o, $c);
[6994] Fix | Delete
$chdir && chdir($cwd);
[6995] Fix | Delete
}
[6996] Fix | Delete
}
[6997] Fix | Delete
$remove && unlink($path);
[6998] Fix | Delete
}
[6999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function