web-ft/index.php
2019-10-23 15:38:13 +02:00

105 lines
4.1 KiB
PHP

<?php
// Load configuration
include 'conf/config.php';
// Delete directory recursively
function delTree($dir) {
$files = array_diff(scandir($dir), array('.','..'));
foreach ($files as $file) {
(is_dir("$dir/$file")) ? delTree("$dir/$file") : unlink("$dir/$file");
}
return rmdir($dir);
}
// Check if file have to be deleted
$data_dir = array_diff(scandir(_DATA_DIR), array('..', '.', '.gitkeep'));
foreach ($data_dir as $data_dir_content)
{
$data_conf = json_decode(file_get_contents(_DATA_DIR . "/" . $data_dir_content . "/info.json"),true);
if ($data_conf['expire'] < time())
{
delTree(_DATA_DIR . "/" . $data_dir_content);
}
}
// Upload File
if ($_SERVER['REQUEST_METHOD'] === 'PUT')
{
$rnd_data = mt_rand(10000,99999);
$filesize = 0 ;
mkdir(_DATA_DIR . "/" . $rnd_data);
$info_json = new stdClass();
$info_json->expire = time() + (7 * 24 * 60 * 60);
if ($_GET['name'])
{
$info_json->name = $_GET['name'];
}
file_put_contents(_DATA_DIR . "/" . $rnd_data . "/info.json", json_encode($info_json));
$putdata = fopen("php://input", "r");
$fp = fopen(_DATA_DIR . "/" . $rnd_data . "/file", "w");
while ($data = fread($putdata, 1024) and $filesize < _SIZE_LIMIT )
{
$filesize += 1024 ;
fwrite($fp, $data);
}
fclose($putdata);
fclose($fp);
if ($filesize < _SIZE_LIMIT )
{
print(_HTTP_PROTO . '://' . _HTTP_DOMAIN . _HTTP_PATH . 'index.php?id=' . $rnd_data );
}
else
{
delTree(_DATA_DIR . "/" . $rnd_data);
print("File size exceeded (Max " . _SIZE_LIMIT . " bytes)");
}
}
// Informations for user
if ($_SERVER['REQUEST_METHOD'] === 'GET')
{
if ($_GET['id'])
{
if (is_dir(_DATA_DIR . "/" . $_GET['id']))
{
$data_conf = json_decode(file_get_contents(_DATA_DIR . "/" . $_GET['id'] . "/info.json"),true);
if ($data_conf['name'])
{
$filename = $data_conf['name'];
}
else
{
$filename = "file";
}
$file = _DATA_DIR . "/" . $_GET['id'] . "/file" ;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header('Content-Length: ' . filesize($file));
header("Content-disposition: attachment; filename=\"" . $filename . "\"");
readfile($file);
}
else
{
http_response_code(404);
}
}
else
{
if (stristr($_SERVER["HTTP_USER_AGENT"], 'curl') or stristr($_SERVER["HTTP_USER_AGENT"], 'Wget'))
{
print("To upload file, use # curl --upload-file my_file " . _HTTP_PROTO . '://' . _HTTP_DOMAIN . _HTTP_PATH . "index.php\n");
}
else
{
include("front.php" );
}
}
}
?>