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
public static function getStreamByUrl($data, $redirectLimit = 5)
[5000] Fix | Delete
{
[5001] Fix | Delete
if (isset($data['target'])) {
[5002] Fix | Delete
$data = array(
[5003] Fix | Delete
'cnt' => 0,
[5004] Fix | Delete
'url' => $data['target'],
[5005] Fix | Delete
'headers' => isset($data['headers']) ? $data['headers'] : array(),
[5006] Fix | Delete
'postData' => isset($data['postData']) ? $data['postData'] : array(),
[5007] Fix | Delete
'cookies' => array(),
[5008] Fix | Delete
);
[5009] Fix | Delete
}
[5010] Fix | Delete
if ($data['cnt'] > $redirectLimit) {
[5011] Fix | Delete
return false;
[5012] Fix | Delete
}
[5013] Fix | Delete
$dlurl = $data['url'];
[5014] Fix | Delete
$data['url'] = '';
[5015] Fix | Delete
$headers = $data['headers'];
[5016] Fix | Delete
[5017] Fix | Delete
if ($dlurl) {
[5018] Fix | Delete
$url = parse_url($dlurl);
[5019] Fix | Delete
$ports = array(
[5020] Fix | Delete
'http' => '80',
[5021] Fix | Delete
'https' => '443',
[5022] Fix | Delete
'ftp' => '21'
[5023] Fix | Delete
);
[5024] Fix | Delete
$url['scheme'] = strtolower($url['scheme']);
[5025] Fix | Delete
if (!isset($url['port']) && isset($ports[$url['scheme']])) {
[5026] Fix | Delete
$url['port'] = $ports[$url['scheme']];
[5027] Fix | Delete
}
[5028] Fix | Delete
if (!isset($url['port'])) {
[5029] Fix | Delete
return false;
[5030] Fix | Delete
}
[5031] Fix | Delete
$cookies = array();
[5032] Fix | Delete
if ($data['cookies']) {
[5033] Fix | Delete
foreach ($data['cookies'] as $d => $c) {
[5034] Fix | Delete
if (strpos($url['host'], $d) !== false) {
[5035] Fix | Delete
$cookies[] = $c;
[5036] Fix | Delete
}
[5037] Fix | Delete
}
[5038] Fix | Delete
}
[5039] Fix | Delete
[5040] Fix | Delete
$transport = ($url['scheme'] === 'https') ? 'ssl' : 'tcp';
[5041] Fix | Delete
$query = isset($url['query']) ? '?' . $url['query'] : '';
[5042] Fix | Delete
if (!($stream = stream_socket_client($transport . '://' . $url['host'] . ':' . $url['port']))) {
[5043] Fix | Delete
return false;
[5044] Fix | Delete
}
[5045] Fix | Delete
[5046] Fix | Delete
$body = '';
[5047] Fix | Delete
if (!empty($data['postData'])) {
[5048] Fix | Delete
$method = 'POST';
[5049] Fix | Delete
if (is_array($data['postData'])) {
[5050] Fix | Delete
$body = http_build_query($data['postData']);
[5051] Fix | Delete
} else {
[5052] Fix | Delete
$body = $data['postData'];
[5053] Fix | Delete
}
[5054] Fix | Delete
} else {
[5055] Fix | Delete
$method = 'GET';
[5056] Fix | Delete
}
[5057] Fix | Delete
[5058] Fix | Delete
$sends = array();
[5059] Fix | Delete
$sends[] = "$method {$url['path']}{$query} HTTP/1.1";
[5060] Fix | Delete
$sends[] = "Host: {$url['host']}";
[5061] Fix | Delete
foreach ($headers as $header) {
[5062] Fix | Delete
$sends[] = trim($header, "\r\n");
[5063] Fix | Delete
}
[5064] Fix | Delete
$sends[] = 'Connection: Close';
[5065] Fix | Delete
if ($cookies) {
[5066] Fix | Delete
$sends[] = 'Cookie: ' . implode('; ', $cookies);
[5067] Fix | Delete
}
[5068] Fix | Delete
if ($method === 'POST') {
[5069] Fix | Delete
$sends[] = 'Content-Type: application/x-www-form-urlencoded';
[5070] Fix | Delete
$sends[] = 'Content-Length: ' . strlen($body);
[5071] Fix | Delete
}
[5072] Fix | Delete
$sends[] = "\r\n" . $body;
[5073] Fix | Delete
[5074] Fix | Delete
stream_set_timeout($stream, 300);
[5075] Fix | Delete
fputs($stream, join("\r\n", $sends) . "\r\n");
[5076] Fix | Delete
[5077] Fix | Delete
while (($res = trim(fgets($stream))) !== '') {
[5078] Fix | Delete
// find redirect
[5079] Fix | Delete
if (preg_match('/^Location: (.+)$/i', $res, $m)) {
[5080] Fix | Delete
$data['url'] = $m[1];
[5081] Fix | Delete
}
[5082] Fix | Delete
// fetch cookie
[5083] Fix | Delete
if (strpos($res, 'Set-Cookie:') === 0) {
[5084] Fix | Delete
$domain = $url['host'];
[5085] Fix | Delete
if (preg_match('/^Set-Cookie:(.+)(?:domain=\s*([^ ;]+))?/i', $res, $c1)) {
[5086] Fix | Delete
if (!empty($c1[2])) {
[5087] Fix | Delete
$domain = trim($c1[2]);
[5088] Fix | Delete
}
[5089] Fix | Delete
if (preg_match('/([^ ]+=[^;]+)/', $c1[1], $c2)) {
[5090] Fix | Delete
$data['cookies'][$domain] = $c2[1];
[5091] Fix | Delete
}
[5092] Fix | Delete
}
[5093] Fix | Delete
}
[5094] Fix | Delete
// is seekable url
[5095] Fix | Delete
if (preg_match('/^(Accept-Ranges|Content-Range): bytes/i', $res)) {
[5096] Fix | Delete
elFinder::$seekableUrlFps[(int)$stream] = true;
[5097] Fix | Delete
}
[5098] Fix | Delete
}
[5099] Fix | Delete
if ($data['url']) {
[5100] Fix | Delete
++$data['cnt'];
[5101] Fix | Delete
fclose($stream);
[5102] Fix | Delete
[5103] Fix | Delete
return self::getStreamByUrl($data, $redirectLimit);
[5104] Fix | Delete
}
[5105] Fix | Delete
[5106] Fix | Delete
return $stream;
[5107] Fix | Delete
}
[5108] Fix | Delete
[5109] Fix | Delete
return false;
[5110] Fix | Delete
}
[5111] Fix | Delete
[5112] Fix | Delete
/**
[5113] Fix | Delete
* Gets the fetch cookie file for curl.
[5114] Fix | Delete
*
[5115] Fix | Delete
* @return string The fetch cookie file.
[5116] Fix | Delete
*/
[5117] Fix | Delete
public function getFetchCookieFile()
[5118] Fix | Delete
{
[5119] Fix | Delete
$file = '';
[5120] Fix | Delete
if ($tmpDir = $this->getTempDir()) {
[5121] Fix | Delete
$file = $tmpDir . '/.elFinderAnonymousCookie';
[5122] Fix | Delete
}
[5123] Fix | Delete
return $file;
[5124] Fix | Delete
}
[5125] Fix | Delete
[5126] Fix | Delete
/**
[5127] Fix | Delete
* Call curl_exec() with supported redirect on `safe_mode` or `open_basedir`
[5128] Fix | Delete
*
[5129] Fix | Delete
* @param resource $curl
[5130] Fix | Delete
* @param array $options
[5131] Fix | Delete
* @param array $headers
[5132] Fix | Delete
* @param array $postData
[5133] Fix | Delete
*
[5134] Fix | Delete
* @throws \Exception
[5135] Fix | Delete
* @return mixed
[5136] Fix | Delete
* @author Naoki Sawada
[5137] Fix | Delete
*/
[5138] Fix | Delete
public static function curlExec($curl, $options = array(), $headers = array(), $postData = array())
[5139] Fix | Delete
{
[5140] Fix | Delete
$followLocation = (!ini_get('safe_mode') && !ini_get('open_basedir'));
[5141] Fix | Delete
if ($followLocation) {
[5142] Fix | Delete
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
[5143] Fix | Delete
}
[5144] Fix | Delete
[5145] Fix | Delete
if ($options) {
[5146] Fix | Delete
curl_setopt_array($curl, $options);
[5147] Fix | Delete
}
[5148] Fix | Delete
[5149] Fix | Delete
if ($headers) {
[5150] Fix | Delete
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
[5151] Fix | Delete
}
[5152] Fix | Delete
[5153] Fix | Delete
$result = curl_exec($curl);
[5154] Fix | Delete
[5155] Fix | Delete
if (!$followLocation && $redirect = curl_getinfo($curl, CURLINFO_REDIRECT_URL)) {
[5156] Fix | Delete
if ($stream = self::getStreamByUrl(array('target' => $redirect, 'headers' => $headers, 'postData' => $postData))) {
[5157] Fix | Delete
$result = stream_get_contents($stream);
[5158] Fix | Delete
}
[5159] Fix | Delete
}
[5160] Fix | Delete
[5161] Fix | Delete
if ($result === false) {
[5162] Fix | Delete
if (curl_errno($curl)) {
[5163] Fix | Delete
throw new \Exception('curl_exec() failed: ' . curl_error($curl));
[5164] Fix | Delete
} else {
[5165] Fix | Delete
throw new \Exception('curl_exec(): empty response');
[5166] Fix | Delete
}
[5167] Fix | Delete
}
[5168] Fix | Delete
[5169] Fix | Delete
curl_close($curl);
[5170] Fix | Delete
[5171] Fix | Delete
return $result;
[5172] Fix | Delete
}
[5173] Fix | Delete
[5174] Fix | Delete
/**
[5175] Fix | Delete
* Return bool that current request was aborted by client side
[5176] Fix | Delete
*
[5177] Fix | Delete
* @return boolean
[5178] Fix | Delete
*/
[5179] Fix | Delete
public static function aborted()
[5180] Fix | Delete
{
[5181] Fix | Delete
if ($file = self::$abortCheckFile) {
[5182] Fix | Delete
(version_compare(PHP_VERSION, '5.3.0') >= 0) ? clearstatcache(true, $file) : clearstatcache();
[5183] Fix | Delete
if (!is_file($file)) {
[5184] Fix | Delete
// GC (expire 12h)
[5185] Fix | Delete
list($ptn) = explode('elfreq', $file);
[5186] Fix | Delete
self::GlobGC($ptn . 'elfreq*', 43200);
[5187] Fix | Delete
return true;
[5188] Fix | Delete
}
[5189] Fix | Delete
}
[5190] Fix | Delete
return false;
[5191] Fix | Delete
}
[5192] Fix | Delete
[5193] Fix | Delete
/**
[5194] Fix | Delete
* Return array ["name without extention", "extention"] by filename
[5195] Fix | Delete
*
[5196] Fix | Delete
* @param string $name
[5197] Fix | Delete
*
[5198] Fix | Delete
* @return array
[5199] Fix | Delete
*/
[5200] Fix | Delete
public static function splitFileExtention($name)
[5201] Fix | Delete
{
[5202] Fix | Delete
if (preg_match('/^(.+?)?\.((?:tar\.(?:gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(?:gz|bz2)|[a-z0-9]{1,10})$/i', $name, $m)) {
[5203] Fix | Delete
return array((string)$m[1], $m[2]);
[5204] Fix | Delete
} else {
[5205] Fix | Delete
return array($name, '');
[5206] Fix | Delete
}
[5207] Fix | Delete
}
[5208] Fix | Delete
[5209] Fix | Delete
/**
[5210] Fix | Delete
* Gets the memory size by imageinfo.
[5211] Fix | Delete
*
[5212] Fix | Delete
* @param array $imgInfo array that result of getimagesize()
[5213] Fix | Delete
*
[5214] Fix | Delete
* @return integer The memory size by imageinfo.
[5215] Fix | Delete
*/
[5216] Fix | Delete
public static function getMemorySizeByImageInfo($imgInfo)
[5217] Fix | Delete
{
[5218] Fix | Delete
$width = $imgInfo[0];
[5219] Fix | Delete
$height = $imgInfo[1];
[5220] Fix | Delete
$bits = isset($imgInfo['bits']) ? $imgInfo['bits'] : 24;
[5221] Fix | Delete
$channels = isset($imgInfo['channels']) ? $imgInfo['channels'] : 3;
[5222] Fix | Delete
return round(($width * $height * $bits * $channels / 8 + Pow(2, 16)) * 1.65);
[5223] Fix | Delete
}
[5224] Fix | Delete
[5225] Fix | Delete
/**
[5226] Fix | Delete
* Auto expand memory for GD processing
[5227] Fix | Delete
*
[5228] Fix | Delete
* @param array $imgInfos The image infos
[5229] Fix | Delete
*/
[5230] Fix | Delete
public static function expandMemoryForGD($imgInfos)
[5231] Fix | Delete
{
[5232] Fix | Delete
if (elFinder::$memoryLimitGD != 0 && $imgInfos && is_array($imgInfos)) {
[5233] Fix | Delete
if (!is_array($imgInfos[0])) {
[5234] Fix | Delete
$imgInfos = array($imgInfos);
[5235] Fix | Delete
}
[5236] Fix | Delete
$limit = self::getIniBytes('', elFinder::$memoryLimitGD);
[5237] Fix | Delete
$memLimit = self::getIniBytes('memory_limit');
[5238] Fix | Delete
$needs = 0;
[5239] Fix | Delete
foreach ($imgInfos as $info) {
[5240] Fix | Delete
$needs += self::getMemorySizeByImageInfo($info);
[5241] Fix | Delete
}
[5242] Fix | Delete
$needs += memory_get_usage();
[5243] Fix | Delete
if ($needs > $memLimit && ($limit == -1 || $limit > $needs)) {
[5244] Fix | Delete
ini_set('memory_limit', $needs);
[5245] Fix | Delete
}
[5246] Fix | Delete
}
[5247] Fix | Delete
}
[5248] Fix | Delete
[5249] Fix | Delete
/**
[5250] Fix | Delete
* Decontaminate of filename
[5251] Fix | Delete
*
[5252] Fix | Delete
* @param String $name The name
[5253] Fix | Delete
*
[5254] Fix | Delete
* @return String Decontaminated filename
[5255] Fix | Delete
*/
[5256] Fix | Delete
public static function filenameDecontaminate($name)
[5257] Fix | Delete
{
[5258] Fix | Delete
// Directory traversal defense
[5259] Fix | Delete
if (DIRECTORY_SEPARATOR === '\\') {
[5260] Fix | Delete
$name = str_replace('\\', '/', $name);
[5261] Fix | Delete
}
[5262] Fix | Delete
$parts = explode('/', trim($name, '/'));
[5263] Fix | Delete
$name = array_pop($parts);
[5264] Fix | Delete
return $name;
[5265] Fix | Delete
}
[5266] Fix | Delete
[5267] Fix | Delete
/**
[5268] Fix | Delete
* Execute shell command
[5269] Fix | Delete
*
[5270] Fix | Delete
* @param string $command command line
[5271] Fix | Delete
* @param string $output stdout strings
[5272] Fix | Delete
* @param int $return_var process exit code
[5273] Fix | Delete
* @param string $error_output stderr strings
[5274] Fix | Delete
* @param null $cwd cwd
[5275] Fix | Delete
*
[5276] Fix | Delete
* @return int exit code
[5277] Fix | Delete
* @throws elFinderAbortException
[5278] Fix | Delete
* @author Alexey Sukhotin
[5279] Fix | Delete
*/
[5280] Fix | Delete
public static function procExec($command, &$output = '', &$return_var = -1, &$error_output = '', $cwd = null)
[5281] Fix | Delete
{
[5282] Fix | Delete
[5283] Fix | Delete
static $allowed = null;
[5284] Fix | Delete
[5285] Fix | Delete
if ($allowed === null) {
[5286] Fix | Delete
if ($allowed = function_exists('proc_open')) {
[5287] Fix | Delete
if ($disabled = ini_get('disable_functions')) {
[5288] Fix | Delete
$funcs = array_map('trim', explode(',', $disabled));
[5289] Fix | Delete
$allowed = !in_array('proc_open', $funcs);
[5290] Fix | Delete
}
[5291] Fix | Delete
}
[5292] Fix | Delete
}
[5293] Fix | Delete
[5294] Fix | Delete
if (!$allowed) {
[5295] Fix | Delete
$return_var = -1;
[5296] Fix | Delete
return $return_var;
[5297] Fix | Delete
}
[5298] Fix | Delete
[5299] Fix | Delete
if (!$command) {
[5300] Fix | Delete
$return_var = 0;
[5301] Fix | Delete
return $return_var;
[5302] Fix | Delete
}
[5303] Fix | Delete
[5304] Fix | Delete
$descriptorspec = array(
[5305] Fix | Delete
0 => array("pipe", "r"), // stdin
[5306] Fix | Delete
1 => array("pipe", "w"), // stdout
[5307] Fix | Delete
2 => array("pipe", "w") // stderr
[5308] Fix | Delete
);
[5309] Fix | Delete
[5310] Fix | Delete
$process = proc_open($command, $descriptorspec, $pipes, $cwd, null);
[5311] Fix | Delete
[5312] Fix | Delete
if (is_resource($process)) {
[5313] Fix | Delete
stream_set_blocking($pipes[1], 0);
[5314] Fix | Delete
stream_set_blocking($pipes[2], 0);
[5315] Fix | Delete
[5316] Fix | Delete
fclose($pipes[0]);
[5317] Fix | Delete
[5318] Fix | Delete
$tmpout = '';
[5319] Fix | Delete
$tmperr = '';
[5320] Fix | Delete
while (feof($pipes[1]) === false || feof($pipes[2]) === false) {
[5321] Fix | Delete
elFinder::extendTimeLimit();
[5322] Fix | Delete
$read = array($pipes[1], $pipes[2]);
[5323] Fix | Delete
$write = null;
[5324] Fix | Delete
$except = null;
[5325] Fix | Delete
$ret = stream_select($read, $write, $except, 1);
[5326] Fix | Delete
if ($ret === false) {
[5327] Fix | Delete
// error
[5328] Fix | Delete
break;
[5329] Fix | Delete
} else if ($ret === 0) {
[5330] Fix | Delete
// timeout
[5331] Fix | Delete
continue;
[5332] Fix | Delete
} else {
[5333] Fix | Delete
foreach ($read as $sock) {
[5334] Fix | Delete
if ($sock === $pipes[1]) {
[5335] Fix | Delete
$tmpout .= fread($sock, 4096);
[5336] Fix | Delete
} else if ($sock === $pipes[2]) {
[5337] Fix | Delete
$tmperr .= fread($sock, 4096);
[5338] Fix | Delete
}
[5339] Fix | Delete
}
[5340] Fix | Delete
}
[5341] Fix | Delete
}
[5342] Fix | Delete
[5343] Fix | Delete
fclose($pipes[1]);
[5344] Fix | Delete
fclose($pipes[2]);
[5345] Fix | Delete
[5346] Fix | Delete
$output = $tmpout;
[5347] Fix | Delete
$error_output = $tmperr;
[5348] Fix | Delete
$return_var = proc_close($process);
[5349] Fix | Delete
[5350] Fix | Delete
} else {
[5351] Fix | Delete
$return_var = -1;
[5352] Fix | Delete
}
[5353] Fix | Delete
[5354] Fix | Delete
return $return_var;
[5355] Fix | Delete
[5356] Fix | Delete
}
[5357] Fix | Delete
[5358] Fix | Delete
/***************************************************************************/
[5359] Fix | Delete
/* callbacks */
[5360] Fix | Delete
/***************************************************************************/
[5361] Fix | Delete
[5362] Fix | Delete
/**
[5363] Fix | Delete
* Get command name of binded "commandName.subName"
[5364] Fix | Delete
*
[5365] Fix | Delete
* @param string $cmd
[5366] Fix | Delete
*
[5367] Fix | Delete
* @return string
[5368] Fix | Delete
*/
[5369] Fix | Delete
protected static function getCmdOfBind($cmd)
[5370] Fix | Delete
{
[5371] Fix | Delete
list($ret) = explode('.', $cmd);
[5372] Fix | Delete
return trim($ret);
[5373] Fix | Delete
}
[5374] Fix | Delete
[5375] Fix | Delete
/**
[5376] Fix | Delete
* Add subName to commandName
[5377] Fix | Delete
*
[5378] Fix | Delete
* @param string $cmd
[5379] Fix | Delete
* @param string $sub
[5380] Fix | Delete
*
[5381] Fix | Delete
* @return string
[5382] Fix | Delete
*/
[5383] Fix | Delete
protected static function addSubToBindName($cmd, $sub)
[5384] Fix | Delete
{
[5385] Fix | Delete
return $cmd . '.' . trim($sub);
[5386] Fix | Delete
}
[5387] Fix | Delete
[5388] Fix | Delete
/**
[5389] Fix | Delete
* Remove a file if connection is disconnected
[5390] Fix | Delete
*
[5391] Fix | Delete
* @param string $file
[5392] Fix | Delete
*/
[5393] Fix | Delete
public static function rmFileInDisconnected($file)
[5394] Fix | Delete
{
[5395] Fix | Delete
(connection_aborted() || connection_status() !== CONNECTION_NORMAL) && is_file($file) && unlink($file);
[5396] Fix | Delete
}
[5397] Fix | Delete
[5398] Fix | Delete
/**
[5399] Fix | Delete
* Call back function on shutdown
[5400] Fix | Delete
* - delete files in $GLOBALS['elFinderTempFiles']
[5401] Fix | Delete
*/
[5402] Fix | Delete
public static function onShutdown()
[5403] Fix | Delete
{
[5404] Fix | Delete
self::$abortCheckFile = null;
[5405] Fix | Delete
if (!empty($GLOBALS['elFinderTempFps'])) {
[5406] Fix | Delete
foreach (array_keys($GLOBALS['elFinderTempFps']) as $fp) {
[5407] Fix | Delete
is_resource($fp) && fclose($fp);
[5408] Fix | Delete
}
[5409] Fix | Delete
}
[5410] Fix | Delete
if (!empty($GLOBALS['elFinderTempFiles'])) {
[5411] Fix | Delete
foreach (array_keys($GLOBALS['elFinderTempFiles']) as $f) {
[5412] Fix | Delete
is_file($f) && is_writable($f) && unlink($f);
[5413] Fix | Delete
}
[5414] Fix | Delete
}
[5415] Fix | Delete
}
[5416] Fix | Delete
[5417] Fix | Delete
/**
[5418] Fix | Delete
* Garbage collection with glob
[5419] Fix | Delete
*
[5420] Fix | Delete
* @param string $pattern
[5421] Fix | Delete
* @param integer $time
[5422] Fix | Delete
*/
[5423] Fix | Delete
public static function GlobGC($pattern, $time)
[5424] Fix | Delete
{
[5425] Fix | Delete
$now = time();
[5426] Fix | Delete
foreach (glob($pattern) as $file) {
[5427] Fix | Delete
(filemtime($file) < ($now - $time)) && unlink($file);
[5428] Fix | Delete
}
[5429] Fix | Delete
}
[5430] Fix | Delete
[5431] Fix | Delete
} // END class
[5432] Fix | Delete
[5433] Fix | Delete
/**
[5434] Fix | Delete
* Custom exception class for aborting request
[5435] Fix | Delete
*/
[5436] Fix | Delete
class elFinderAbortException extends Exception
[5437] Fix | Delete
{
[5438] Fix | Delete
}
[5439] Fix | Delete
[5440] Fix | Delete
class elFinderTriggerException extends Exception
[5441] Fix | Delete
{
[5442] Fix | Delete
}
[5443] Fix | Delete
[5444] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function