Sur plusieurs forums, je me suis aiidé pour créer un hébergeur de fichiers
J'ai repris l'idée de MEGAUPLOAD qui héberge les fichiers sur la forme XXXXXXXX // 8 caractères
donc pour accéder au lien, on y va pas /?d=XXXXXXXXX
Il est également enregistré sous cette forme, sans extension
Après pour l'extension, c'est enregistré dans la base de données
Donc le fichier change de nom lors du téléchargement
donc image.png ou autre
Le problème est que pour tous fichiers textes que je télécharge, ça me met le code source de la page.
et pour les images, Windows me dit qu'il ne peut ouvrir l'image ou vidéo.
Un peu de code pour mieux comprendre
public static function Generate()
{
$characters = array("A", "B", "C", "D", "E", "F","G", "H", "I", "J", "K", "L","M",
"N", "O", "P", "Q", "R","S", "T", "U", "V", "W", "X","Y","Z", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$pass_rand = array_rand($characters, 8);
$pass = "";
foreach ($pass_rand as $i)
{
$pass .= $characters[$i];
}
return $pass;
}
public function Upload($file, $filename, $description, $size, $f)
{
if (LOGGED_IN)
{
$username = USER_NAME;
}
else
{
$username = '';
}
$folder = "files/" . $f;
if (!file_exists($folder))
{
if (move_uploaded_file($file, $folder))
{
dbquery("INSERT INTO files (file_name,file_size,description,repertory,username)
VALUES ('" . $filename . "','" . $size . "','" . $description . "','" . $f . "','" . $username . "')");
return true;
}
}
return false;
}
function Convert($bytes, $to = 'mo')
{
if ($bytes >= 1024*1024*1024)
{
return round(($bytes / 1024)/1024/1024, 2) ." GB";
}
elseif ($bytes >= 1024*1024)
{
return round(($bytes / 1024)/1024, 2) ." MB";
}
elseif ($bytes >= 1024)
{
return round(($bytes / 1024), 2) ." KB";
}
else { return $bytes ." Bytes"; }
}
La page qui télécharge le fichier
$result = dbquery("SELECT * FROM files WHERE repertory = '" . filter($_GET['d']) . "'");
if (mysql_num_rows($result) >= 1)
{
while ($d = mysql_fetch_assoc($result))
{
$file_name = $d['file_name'];
$size = $d['file_size'];
$description = $d['description'];
$repertory = $d['repertory'];
}
define('FILE_EXIST', true);
}
else
{
echo "<div id='error'>Le fichier n'est présentement pas disponible</div>";
define('FILE_EXIST', false);
}
switch(strrchr(basename($file_name), ".")) {
case ".gz": $type = "application/x-gzip"; break;
case ".tgz": $type = "application/x-gzip"; break;
case ".zip": $type = "application/zip"; break;
case ".pdf": $type = "application/pdf"; break;
case ".png": $type = "image/png"; break;
case ".gif": $type = "image/gif"; break;
case ".jpg": $type = "image/jpeg"; break;
case ".txt": $type = "text/plain"; break;
case ".htm": $type = "text/html"; break;
case ".html": $type = "text/html"; break;
default: $type = "application/octet-stream"; break;
}
if (FILE_EXIST)
{
if (isset($_POST['premium']) && $users->GetUserVar(USER_ID, 'rank') >= 2 || isset($_POST['submit']))
{
if (file_exists("files/" . $repertory))
{
header("Content-disposition: attachment; filename= $file_name");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: $type \n"); // Surtout ne pas enlever le \n
header("Content-Length: ". filesize("files/" . $repertory));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
flush();
readfile("files/" . $repertory);
exit();
}
}
else if (isset($_POST['premium']) && !$users->GetUserVar(USER_ID, 'rank') >= 2)
{
header('Location: premium.php');
exit;
}
Désolé si plusieurs postes du même style ont été postés, mais j'aimerai que l'on m'éclairci-ce.Merci d'avance pour votre aide.
Vous pouvez essayer l'UPLOAD sur http://www.visualdevelopment.fr