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: elFinder.class.php
$class = 'elFinderPlugin' . $name;
[1500] Fix | Delete
// to try auto load
[1501] Fix | Delete
if (!class_exists($class)) {
[1502] Fix | Delete
$p_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . $name . DIRECTORY_SEPARATOR . 'plugin.php';
[1503] Fix | Delete
if (is_file($p_file)) {
[1504] Fix | Delete
include_once $p_file;
[1505] Fix | Delete
}
[1506] Fix | Delete
}
[1507] Fix | Delete
if (class_exists($class, false)) {
[1508] Fix | Delete
$this->plugins[$key] = new $class($opts);
[1509] Fix | Delete
} else {
[1510] Fix | Delete
$this->plugins[$key] = false;
[1511] Fix | Delete
}
[1512] Fix | Delete
}
[1513] Fix | Delete
return $this->plugins[$key];
[1514] Fix | Delete
}
[1515] Fix | Delete
[1516] Fix | Delete
/***************************************************************************/
[1517] Fix | Delete
/* commands */
[1518] Fix | Delete
/***************************************************************************/
[1519] Fix | Delete
[1520] Fix | Delete
/**
[1521] Fix | Delete
* Normalize error messages
[1522] Fix | Delete
*
[1523] Fix | Delete
* @return array
[1524] Fix | Delete
* @author Dmitry (dio) Levashov
[1525] Fix | Delete
**/
[1526] Fix | Delete
public function error()
[1527] Fix | Delete
{
[1528] Fix | Delete
$errors = array();
[1529] Fix | Delete
[1530] Fix | Delete
foreach (func_get_args() as $msg) {
[1531] Fix | Delete
if (is_array($msg)) {
[1532] Fix | Delete
$errors = array_merge($errors, $msg);
[1533] Fix | Delete
} else {
[1534] Fix | Delete
$errors[] = $msg;
[1535] Fix | Delete
}
[1536] Fix | Delete
}
[1537] Fix | Delete
[1538] Fix | Delete
return count($errors) ? $errors : array(self::ERROR_UNKNOWN);
[1539] Fix | Delete
}
[1540] Fix | Delete
[1541] Fix | Delete
/**
[1542] Fix | Delete
* @param $args
[1543] Fix | Delete
*
[1544] Fix | Delete
* @return array
[1545] Fix | Delete
* @throws elFinderAbortException
[1546] Fix | Delete
*/
[1547] Fix | Delete
protected function netmount($args)
[1548] Fix | Delete
{
[1549] Fix | Delete
$options = array();
[1550] Fix | Delete
$protocol = $args['protocol'];
[1551] Fix | Delete
$toast = '';
[1552] Fix | Delete
[1553] Fix | Delete
if ($protocol === 'netunmount') {
[1554] Fix | Delete
if (!empty($args['user']) && $volume = $this->volume($args['user'])) {
[1555] Fix | Delete
if ($this->removeNetVolume($args['host'], $volume)) {
[1556] Fix | Delete
return array('removed' => array(array('hash' => $volume->root())));
[1557] Fix | Delete
}
[1558] Fix | Delete
}
[1559] Fix | Delete
return array('sync' => true, 'error' => $this->error(self::ERROR_NETUNMOUNT));
[1560] Fix | Delete
}
[1561] Fix | Delete
[1562] Fix | Delete
$driver = isset(self::$netDrivers[$protocol]) ? self::$netDrivers[$protocol] : '';
[1563] Fix | Delete
$class = 'elFinderVolume' . $driver;
[1564] Fix | Delete
[1565] Fix | Delete
if (!class_exists($class)) {
[1566] Fix | Delete
return array('error' => $this->error(self::ERROR_NETMOUNT, $args['host'], self::ERROR_NETMOUNT_NO_DRIVER));
[1567] Fix | Delete
}
[1568] Fix | Delete
[1569] Fix | Delete
if (!$args['path']) {
[1570] Fix | Delete
$args['path'] = '/';
[1571] Fix | Delete
}
[1572] Fix | Delete
[1573] Fix | Delete
foreach ($args as $k => $v) {
[1574] Fix | Delete
if ($k != 'options' && $k != 'protocol' && $v) {
[1575] Fix | Delete
$options[$k] = $v;
[1576] Fix | Delete
}
[1577] Fix | Delete
}
[1578] Fix | Delete
[1579] Fix | Delete
if (is_array($args['options'])) {
[1580] Fix | Delete
foreach ($args['options'] as $key => $value) {
[1581] Fix | Delete
$options[$key] = $value;
[1582] Fix | Delete
}
[1583] Fix | Delete
}
[1584] Fix | Delete
[1585] Fix | Delete
/* @var elFinderVolumeDriver $volume */
[1586] Fix | Delete
$volume = new $class();
[1587] Fix | Delete
[1588] Fix | Delete
// pass session handler
[1589] Fix | Delete
$volume->setSession($this->session);
[1590] Fix | Delete
[1591] Fix | Delete
$volume->setNeedOnline(true);
[1592] Fix | Delete
[1593] Fix | Delete
if (is_callable(array($volume, 'netmountPrepare'))) {
[1594] Fix | Delete
$options = $volume->netmountPrepare($options);
[1595] Fix | Delete
if (isset($options['exit'])) {
[1596] Fix | Delete
if ($options['exit'] === 'callback') {
[1597] Fix | Delete
$this->callback($options['out']);
[1598] Fix | Delete
}
[1599] Fix | Delete
return $options;
[1600] Fix | Delete
}
[1601] Fix | Delete
if (!empty($options['toast'])) {
[1602] Fix | Delete
$toast = $options['toast'];
[1603] Fix | Delete
unset($options['toast']);
[1604] Fix | Delete
}
[1605] Fix | Delete
}
[1606] Fix | Delete
[1607] Fix | Delete
$netVolumes = $this->getNetVolumes();
[1608] Fix | Delete
[1609] Fix | Delete
if (!isset($options['id'])) {
[1610] Fix | Delete
// given fixed unique id
[1611] Fix | Delete
if (!$options['id'] = $this->getNetVolumeUniqueId($netVolumes)) {
[1612] Fix | Delete
return array('error' => $this->error(self::ERROR_NETMOUNT, $args['host'], 'Could\'t given volume id.'));
[1613] Fix | Delete
}
[1614] Fix | Delete
}
[1615] Fix | Delete
[1616] Fix | Delete
// load additional volume root options
[1617] Fix | Delete
if (!empty($this->optionsNetVolumes['*'])) {
[1618] Fix | Delete
$options = array_merge($this->optionsNetVolumes['*'], $options);
[1619] Fix | Delete
}
[1620] Fix | Delete
if (!empty($this->optionsNetVolumes[$protocol])) {
[1621] Fix | Delete
$options = array_merge($this->optionsNetVolumes[$protocol], $options);
[1622] Fix | Delete
}
[1623] Fix | Delete
[1624] Fix | Delete
if (!$key = $volume->netMountKey) {
[1625] Fix | Delete
$key = md5($protocol . '-' . serialize($options));
[1626] Fix | Delete
}
[1627] Fix | Delete
$options['netkey'] = $key;
[1628] Fix | Delete
[1629] Fix | Delete
if (!isset($netVolumes[$key]) && $volume->mount($options)) {
[1630] Fix | Delete
// call post-process function of netmount
[1631] Fix | Delete
if (is_callable(array($volume, 'postNetmount'))) {
[1632] Fix | Delete
$volume->postNetmount($options);
[1633] Fix | Delete
}
[1634] Fix | Delete
$options['driver'] = $driver;
[1635] Fix | Delete
$netVolumes[$key] = $options;
[1636] Fix | Delete
$this->saveNetVolumes($netVolumes);
[1637] Fix | Delete
$rootstat = $volume->file($volume->root());
[1638] Fix | Delete
$res = array('added' => array($rootstat));
[1639] Fix | Delete
if ($toast) {
[1640] Fix | Delete
$res['toast'] = $toast;
[1641] Fix | Delete
}
[1642] Fix | Delete
return $res;
[1643] Fix | Delete
} else {
[1644] Fix | Delete
$this->removeNetVolume(null, $volume);
[1645] Fix | Delete
return array('error' => $this->error(self::ERROR_NETMOUNT, $args['host'], implode(' ', $volume->error())));
[1646] Fix | Delete
}
[1647] Fix | Delete
}
[1648] Fix | Delete
[1649] Fix | Delete
/**
[1650] Fix | Delete
* "Open" directory
[1651] Fix | Delete
* Return array with following elements
[1652] Fix | Delete
* - cwd - opened dir info
[1653] Fix | Delete
* - files - opened dir content [and dirs tree if $args[tree]]
[1654] Fix | Delete
* - api - api version (if $args[init])
[1655] Fix | Delete
* - uplMaxSize - if $args[init]
[1656] Fix | Delete
* - error - on failed
[1657] Fix | Delete
*
[1658] Fix | Delete
* @param array command arguments
[1659] Fix | Delete
*
[1660] Fix | Delete
* @return array
[1661] Fix | Delete
* @throws elFinderAbortException
[1662] Fix | Delete
* @author Dmitry (dio) Levashov
[1663] Fix | Delete
*/
[1664] Fix | Delete
protected function open($args)
[1665] Fix | Delete
{
[1666] Fix | Delete
$target = $args['target'];
[1667] Fix | Delete
$init = !empty($args['init']);
[1668] Fix | Delete
$tree = !empty($args['tree']);
[1669] Fix | Delete
$volume = $this->volume($target);
[1670] Fix | Delete
$cwd = $volume ? $volume->dir($target) : false;
[1671] Fix | Delete
$hash = $init ? 'default folder' : '#' . $target;
[1672] Fix | Delete
$compare = '';
[1673] Fix | Delete
[1674] Fix | Delete
// on init request we can get invalid dir hash -
[1675] Fix | Delete
// dir which can not be opened now, but remembered by client,
[1676] Fix | Delete
// so open default dir
[1677] Fix | Delete
if ((!$cwd || !$cwd['read']) && $init) {
[1678] Fix | Delete
$volume = $this->default;
[1679] Fix | Delete
$target = $volume->defaultPath();
[1680] Fix | Delete
$cwd = $volume->dir($target);
[1681] Fix | Delete
}
[1682] Fix | Delete
[1683] Fix | Delete
if (!$cwd) {
[1684] Fix | Delete
return array('error' => $this->error(self::ERROR_OPEN, $hash, self::ERROR_DIR_NOT_FOUND));
[1685] Fix | Delete
}
[1686] Fix | Delete
if (!$cwd['read']) {
[1687] Fix | Delete
return array('error' => $this->error(self::ERROR_OPEN, $hash, self::ERROR_PERM_DENIED));
[1688] Fix | Delete
}
[1689] Fix | Delete
[1690] Fix | Delete
$files = array();
[1691] Fix | Delete
[1692] Fix | Delete
// get current working directory files list
[1693] Fix | Delete
if (($ls = $volume->scandir($cwd['hash'])) === false) {
[1694] Fix | Delete
return array('error' => $this->error(self::ERROR_OPEN, $cwd['name'], $volume->error()));
[1695] Fix | Delete
}
[1696] Fix | Delete
[1697] Fix | Delete
if (isset($cwd['dirs']) && $cwd['dirs'] != 1) {
[1698] Fix | Delete
$cwd = $volume->dir($target);
[1699] Fix | Delete
}
[1700] Fix | Delete
[1701] Fix | Delete
// get other volume root
[1702] Fix | Delete
if ($tree) {
[1703] Fix | Delete
foreach ($this->volumes as $id => $v) {
[1704] Fix | Delete
$files[] = $v->file($v->root());
[1705] Fix | Delete
}
[1706] Fix | Delete
}
[1707] Fix | Delete
[1708] Fix | Delete
// long polling mode
[1709] Fix | Delete
if ($args['compare']) {
[1710] Fix | Delete
$sleep = max(1, (int)$volume->getOption('lsPlSleep'));
[1711] Fix | Delete
$standby = (int)$volume->getOption('plStandby');
[1712] Fix | Delete
if ($standby > 0 && $sleep > $standby) {
[1713] Fix | Delete
$standby = $sleep;
[1714] Fix | Delete
}
[1715] Fix | Delete
$limit = max(0, floor($standby / $sleep)) + 1;
[1716] Fix | Delete
do {
[1717] Fix | Delete
elFinder::extendTimeLimit(30 + $sleep);
[1718] Fix | Delete
$_mtime = 0;
[1719] Fix | Delete
foreach ($ls as $_f) {
[1720] Fix | Delete
if (isset($_f['ts'])) {
[1721] Fix | Delete
$_mtime = max($_mtime, $_f['ts']);
[1722] Fix | Delete
}
[1723] Fix | Delete
}
[1724] Fix | Delete
$compare = strval(count($ls)) . ':' . strval($_mtime);
[1725] Fix | Delete
if ($compare !== $args['compare']) {
[1726] Fix | Delete
break;
[1727] Fix | Delete
}
[1728] Fix | Delete
if (--$limit) {
[1729] Fix | Delete
sleep($sleep);
[1730] Fix | Delete
$volume->clearstatcache();
[1731] Fix | Delete
if (($ls = $volume->scandir($cwd['hash'])) === false) {
[1732] Fix | Delete
break;
[1733] Fix | Delete
}
[1734] Fix | Delete
}
[1735] Fix | Delete
} while ($limit);
[1736] Fix | Delete
if ($ls === false) {
[1737] Fix | Delete
return array('error' => $this->error(self::ERROR_OPEN, $cwd['name'], $volume->error()));
[1738] Fix | Delete
}
[1739] Fix | Delete
}
[1740] Fix | Delete
[1741] Fix | Delete
if ($ls) {
[1742] Fix | Delete
if ($files) {
[1743] Fix | Delete
$files = array_merge($files, $ls);
[1744] Fix | Delete
} else {
[1745] Fix | Delete
$files = $ls;
[1746] Fix | Delete
}
[1747] Fix | Delete
}
[1748] Fix | Delete
[1749] Fix | Delete
$result = array(
[1750] Fix | Delete
'cwd' => $cwd,
[1751] Fix | Delete
'options' => $volume->options($cwd['hash']),
[1752] Fix | Delete
'files' => $files
[1753] Fix | Delete
);
[1754] Fix | Delete
[1755] Fix | Delete
if ($compare) {
[1756] Fix | Delete
$result['cwd']['compare'] = $compare;
[1757] Fix | Delete
}
[1758] Fix | Delete
[1759] Fix | Delete
if (!empty($args['init'])) {
[1760] Fix | Delete
$result['api'] = sprintf('%.1F%03d', self::$ApiVersion, self::$ApiRevision);
[1761] Fix | Delete
$result['uplMaxSize'] = ini_get('upload_max_filesize');
[1762] Fix | Delete
$result['uplMaxFile'] = ini_get('max_file_uploads');
[1763] Fix | Delete
$result['netDrivers'] = array_keys(self::$netDrivers);
[1764] Fix | Delete
$result['maxTargets'] = $this->maxTargets;
[1765] Fix | Delete
if ($volume) {
[1766] Fix | Delete
$result['cwd']['root'] = $volume->root();
[1767] Fix | Delete
}
[1768] Fix | Delete
if (elfinder::$textMimes) {
[1769] Fix | Delete
$result['textMimes'] = elfinder::$textMimes;
[1770] Fix | Delete
}
[1771] Fix | Delete
}
[1772] Fix | Delete
[1773] Fix | Delete
return $result;
[1774] Fix | Delete
}
[1775] Fix | Delete
[1776] Fix | Delete
/**
[1777] Fix | Delete
* Return dir files names list
[1778] Fix | Delete
*
[1779] Fix | Delete
* @param array command arguments
[1780] Fix | Delete
*
[1781] Fix | Delete
* @return array
[1782] Fix | Delete
* @author Dmitry (dio) Levashov
[1783] Fix | Delete
**/
[1784] Fix | Delete
protected function ls($args)
[1785] Fix | Delete
{
[1786] Fix | Delete
$target = $args['target'];
[1787] Fix | Delete
$intersect = isset($args['intersect']) ? $args['intersect'] : array();
[1788] Fix | Delete
[1789] Fix | Delete
if (($volume = $this->volume($target)) == false
[1790] Fix | Delete
|| ($list = $volume->ls($target, $intersect)) === false) {
[1791] Fix | Delete
return array('error' => $this->error(self::ERROR_OPEN, '#' . $target));
[1792] Fix | Delete
}
[1793] Fix | Delete
return array('list' => $list);
[1794] Fix | Delete
}
[1795] Fix | Delete
[1796] Fix | Delete
/**
[1797] Fix | Delete
* Return subdirs for required directory
[1798] Fix | Delete
*
[1799] Fix | Delete
* @param array command arguments
[1800] Fix | Delete
*
[1801] Fix | Delete
* @return array
[1802] Fix | Delete
* @author Dmitry (dio) Levashov
[1803] Fix | Delete
**/
[1804] Fix | Delete
protected function tree($args)
[1805] Fix | Delete
{
[1806] Fix | Delete
$target = $args['target'];
[1807] Fix | Delete
[1808] Fix | Delete
if (($volume = $this->volume($target)) == false
[1809] Fix | Delete
|| ($tree = $volume->tree($target)) == false) {
[1810] Fix | Delete
return array('error' => $this->error(self::ERROR_OPEN, '#' . $target));
[1811] Fix | Delete
}
[1812] Fix | Delete
[1813] Fix | Delete
return array('tree' => $tree);
[1814] Fix | Delete
}
[1815] Fix | Delete
[1816] Fix | Delete
/**
[1817] Fix | Delete
* Return parents dir for required directory
[1818] Fix | Delete
*
[1819] Fix | Delete
* @param array command arguments
[1820] Fix | Delete
*
[1821] Fix | Delete
* @return array
[1822] Fix | Delete
* @throws elFinderAbortException
[1823] Fix | Delete
* @author Dmitry (dio) Levashov
[1824] Fix | Delete
*/
[1825] Fix | Delete
protected function parents($args)
[1826] Fix | Delete
{
[1827] Fix | Delete
$target = $args['target'];
[1828] Fix | Delete
$until = $args['until'];
[1829] Fix | Delete
[1830] Fix | Delete
if (($volume = $this->volume($target)) == false
[1831] Fix | Delete
|| ($tree = $volume->parents($target, false, $until)) == false) {
[1832] Fix | Delete
return array('error' => $this->error(self::ERROR_OPEN, '#' . $target));
[1833] Fix | Delete
}
[1834] Fix | Delete
[1835] Fix | Delete
return array('tree' => $tree);
[1836] Fix | Delete
}
[1837] Fix | Delete
[1838] Fix | Delete
/**
[1839] Fix | Delete
* Return new created thumbnails list
[1840] Fix | Delete
*
[1841] Fix | Delete
* @param array command arguments
[1842] Fix | Delete
*
[1843] Fix | Delete
* @return array
[1844] Fix | Delete
* @throws ImagickException
[1845] Fix | Delete
* @throws elFinderAbortException
[1846] Fix | Delete
* @author Dmitry (dio) Levashov
[1847] Fix | Delete
*/
[1848] Fix | Delete
protected function tmb($args)
[1849] Fix | Delete
{
[1850] Fix | Delete
[1851] Fix | Delete
$result = array('images' => array());
[1852] Fix | Delete
$targets = $args['targets'];
[1853] Fix | Delete
[1854] Fix | Delete
foreach ($targets as $target) {
[1855] Fix | Delete
elFinder::checkAborted();
[1856] Fix | Delete
[1857] Fix | Delete
if (($volume = $this->volume($target)) != false
[1858] Fix | Delete
&& (($tmb = $volume->tmb($target)) != false)) {
[1859] Fix | Delete
$result['images'][$target] = $tmb;
[1860] Fix | Delete
}
[1861] Fix | Delete
}
[1862] Fix | Delete
return $result;
[1863] Fix | Delete
}
[1864] Fix | Delete
[1865] Fix | Delete
/**
[1866] Fix | Delete
* Download files/folders as an archive file
[1867] Fix | Delete
* 1st: Return srrsy contains download archive file info
[1868] Fix | Delete
* 2nd: Return array contains opened file pointer, root itself and required headers
[1869] Fix | Delete
*
[1870] Fix | Delete
* @param array command arguments
[1871] Fix | Delete
*
[1872] Fix | Delete
* @return array
[1873] Fix | Delete
* @throws Exception
[1874] Fix | Delete
* @author Naoki Sawada
[1875] Fix | Delete
*/
[1876] Fix | Delete
protected function zipdl($args)
[1877] Fix | Delete
{
[1878] Fix | Delete
$targets = $args['targets'];
[1879] Fix | Delete
$download = !empty($args['download']);
[1880] Fix | Delete
$h404 = 'HTTP/1.x 404 Not Found';
[1881] Fix | Delete
$CriOS = isset($_SERVER['HTTP_USER_AGENT'])? (strpos($_SERVER['HTTP_USER_AGENT'], 'CriOS') !== false) : false;
[1882] Fix | Delete
[1883] Fix | Delete
if (!$download) {
[1884] Fix | Delete
//1st: Return array contains download archive file info
[1885] Fix | Delete
$error = array(self::ERROR_ARCHIVE);
[1886] Fix | Delete
if (($volume = $this->volume($targets[0])) !== false) {
[1887] Fix | Delete
if ($dlres = $volume->zipdl($targets)) {
[1888] Fix | Delete
$path = $dlres['path'];
[1889] Fix | Delete
register_shutdown_function(array('elFinder', 'rmFileInDisconnected'), $path);
[1890] Fix | Delete
if (count($targets) === 1) {
[1891] Fix | Delete
$name = basename($volume->path($targets[0]));
[1892] Fix | Delete
} else {
[1893] Fix | Delete
$name = $dlres['prefix'] . '_Files';
[1894] Fix | Delete
}
[1895] Fix | Delete
$name .= '.' . $dlres['ext'];
[1896] Fix | Delete
$uniqid = uniqid();
[1897] Fix | Delete
if(ZEND_THREAD_SAFE){
[1898] Fix | Delete
set_transient("zipdl$uniqid", basename($path),MINUTE_IN_SECONDS);
[1899] Fix | Delete
} else {
[1900] Fix | Delete
$this->session->set('zipdl' . $uniqid, basename($path));
[1901] Fix | Delete
}
[1902] Fix | Delete
$result = array(
[1903] Fix | Delete
'zipdl' => array(
[1904] Fix | Delete
'file' => $CriOS? basename($path) : $uniqid,
[1905] Fix | Delete
'name' => $name,
[1906] Fix | Delete
'mime' => $dlres['mime']
[1907] Fix | Delete
)
[1908] Fix | Delete
);
[1909] Fix | Delete
return $result;
[1910] Fix | Delete
}
[1911] Fix | Delete
$error = array_merge($error, $volume->error());
[1912] Fix | Delete
}
[1913] Fix | Delete
return array('error' => $error);
[1914] Fix | Delete
} else {
[1915] Fix | Delete
// 2nd: Return array contains opened file session key, root itself and required headers
[1916] Fix | Delete
[1917] Fix | Delete
// Detect Chrome on iOS
[1918] Fix | Delete
// It has access twice on downloading
[1919] Fix | Delete
$CriOSinit = false;
[1920] Fix | Delete
if ($CriOS) {
[1921] Fix | Delete
$accept = isset($_SERVER['HTTP_ACCEPT'])? $_SERVER['HTTP_ACCEPT'] : '';
[1922] Fix | Delete
if ($accept && $accept !== '*' && $accept !== '*/*') {
[1923] Fix | Delete
$CriOSinit = true;
[1924] Fix | Delete
}
[1925] Fix | Delete
}
[1926] Fix | Delete
// data check
[1927] Fix | Delete
if (count($targets) !== 4 ||
[1928] Fix | Delete
($volume = $this->volume($targets[0])) == false ||
[1929] Fix | Delete
!($file = $CriOS ? $targets[1] : ( ZEND_THREAD_SAFE ? get_transient( "zipdl$targets[1]" ) : $this->session->get( 'zipdl' . $targets[1] ) ) )) {
[1930] Fix | Delete
return array('error' => 'File not found', 'header' => $h404, 'raw' => true);
[1931] Fix | Delete
}
[1932] Fix | Delete
$path = $volume->getTempPath() . DIRECTORY_SEPARATOR . basename($file);
[1933] Fix | Delete
// remove session data of "zipdl..."
[1934] Fix | Delete
if(ZEND_THREAD_SAFE){
[1935] Fix | Delete
delete_transient("zipdl$targets[1]");
[1936] Fix | Delete
} else {
[1937] Fix | Delete
$this->session->remove('zipdl' . $targets[1]);
[1938] Fix | Delete
}
[1939] Fix | Delete
if (!$CriOSinit) {
[1940] Fix | Delete
// register auto delete on shutdown
[1941] Fix | Delete
$GLOBALS['elFinderTempFiles'][$path] = true;
[1942] Fix | Delete
}
[1943] Fix | Delete
if ($volume->commandDisabled('zipdl')) {
[1944] Fix | Delete
return array('error' => 'File not found', 'header' => $h404, 'raw' => true);
[1945] Fix | Delete
}
[1946] Fix | Delete
if (!is_readable($path) || !is_writable($path)) {
[1947] Fix | Delete
return array('error' => 'File not found', 'header' => $h404, 'raw' => true);
[1948] Fix | Delete
}
[1949] Fix | Delete
// for HTTP headers
[1950] Fix | Delete
$name = $targets[2];
[1951] Fix | Delete
$mime = $targets[3];
[1952] Fix | Delete
[1953] Fix | Delete
$filenameEncoded = rawurlencode($name);
[1954] Fix | Delete
if (strpos($filenameEncoded, '%') === false) { // ASCII only
[1955] Fix | Delete
$filename = 'filename="' . $name . '"';
[1956] Fix | Delete
} else {
[1957] Fix | Delete
$ua = $_SERVER['HTTP_USER_AGENT'];
[1958] Fix | Delete
if (preg_match('/MSIE [4-8]/', $ua)) { // IE < 9 do not support RFC 6266 (RFC 2231/RFC 5987)
[1959] Fix | Delete
$filename = 'filename="' . $filenameEncoded . '"';
[1960] Fix | Delete
} elseif (strpos($ua, 'Chrome') === false && strpos($ua, 'Safari') !== false && preg_match('#Version/[3-5]#', $ua)) { // Safari < 6
[1961] Fix | Delete
$filename = 'filename="' . str_replace('"', '', $name) . '"';
[1962] Fix | Delete
} else { // RFC 6266 (RFC 2231/RFC 5987)
[1963] Fix | Delete
$filename = 'filename*=UTF-8\'\'' . $filenameEncoded;
[1964] Fix | Delete
}
[1965] Fix | Delete
}
[1966] Fix | Delete
[1967] Fix | Delete
$fp = fopen($path, 'rb');
[1968] Fix | Delete
$file = fstat($fp);
[1969] Fix | Delete
$result = array(
[1970] Fix | Delete
'pointer' => $fp,
[1971] Fix | Delete
'header' => array(
[1972] Fix | Delete
'Content-Type: ' . $mime,
[1973] Fix | Delete
'Content-Disposition: attachment; ' . $filename,
[1974] Fix | Delete
'Content-Transfer-Encoding: binary',
[1975] Fix | Delete
'Content-Length: ' . $file['size'],
[1976] Fix | Delete
'Accept-Ranges: none',
[1977] Fix | Delete
'Connection: close'
[1978] Fix | Delete
)
[1979] Fix | Delete
);
[1980] Fix | Delete
// add cache control headers
[1981] Fix | Delete
if ($cacheHeaders = $volume->getOption('cacheHeaders')) {
[1982] Fix | Delete
$result['header'] = array_merge($result['header'], $cacheHeaders);
[1983] Fix | Delete
}
[1984] Fix | Delete
return $result;
[1985] Fix | Delete
}
[1986] Fix | Delete
}
[1987] Fix | Delete
[1988] Fix | Delete
/**
[1989] Fix | Delete
* Required to output file in browser when volume URL is not set
[1990] Fix | Delete
* Return array contains opened file pointer, root itself and required headers
[1991] Fix | Delete
*
[1992] Fix | Delete
* @param array command arguments
[1993] Fix | Delete
*
[1994] Fix | Delete
* @return array
[1995] Fix | Delete
* @throws elFinderAbortException
[1996] Fix | Delete
* @author Dmitry (dio) Levashov
[1997] Fix | Delete
*/
[1998] Fix | Delete
protected function file($args)
[1999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function