par
civodul88 » 01 mars 2012, 17:36
Bonjour

;
Je tente de mettre en place une page telechargement.php qui me permet de vérifier l'authentification du membre, de spécifier un chemin autre que la racine du site, qui enregistre les actions dans un fichier txt.
Tout fonctionne correctement pour les petits fichiers, mais lorsque je tente de récupérer un gros fichier le script plante à la moitier du telechargement et j'ai un message d'erreur qui me dis qu'il est impossible de trouver le chemin spécifier.
Je cherche depuis un bon moment une solution un peu partout sur la toile, mais malheureusement sans succès,
c'est pourquoi je me tourne vers vous pour un petit coup de pouce .
voici mon code
<?php
//control des sessions
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Allow direct file download (hotlinking)?
// Empty - allow hotlinking
// If set to nonempty value (Example: example.com) will only allow downloads when referrer contains this text
define('ALLOWED_REFERRER', '');
// Download folder, i.e. folder where you keep all files for download.
// MUST end with slash (i.e. "/" )
define('BASE_DIR','C:\chemin de mon repertoire /');
// log downloads? true/false
define('LOG_DOWNLOADS',true);
// log file name
define('LOG_FILE','downloads.log');
// Allowed extensions list in format 'extension' => 'mime type'
// If myme type is set to empty string then script will try to detect mime type
// itself, which would only work if you have Mimetype or Fileinfo extensions
// installed on server.
$allowed_ext = array (
// archives
'zip' => 'application/zip',
'rar' => 'application/rar',
'bz2' => 'application/bz2',
'iso' => 'application/iso',
// documents
'pdf' => 'application/pdf',
'doc' => 'application/msword',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
// executables
'exe' => 'application/octet-stream',
// images
'gif' => 'image/gif',
'png' => 'image/png',
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
// audio
'mp3' => 'audio/mpeg',
'wav' => 'audio/x-wav',
// video
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'mov' => 'video/quicktime',
'avi' => 'video/x-msvideo'
);
####################################################################
### DO NOT CHANGE BELOW
####################################################################
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
if ($user->data['user_id'] == ANONYMOUS)
{
echo
'<b style="color:blue;">Bonjour Anonymous,</b><br /><b style="color:red;">veuillez vous inscrire sur le forum pour acceder au téléchargement de ce fichier. Merci!
<a href="http://forum.civodul88.fr">http://forum.civodul88.fr</a></b>';
}
else
{
echo '<b style="color:blue;">bonjour
'. $user->data['username_clean'].', Vous avez été authentifier en tant que membre du forum. Merci.</b><br />';
// Si hotlinking pas permis, alors faire que les pirates pense qu'il ya des problèmes de serveur
if (ALLOWED_REFERRER !== ''
&& (!isset($_SERVER['HTTP_REFERER']) || strpos(strtoupper($_SERVER['HTTP_REFERER']),strtoupper(ALLOWED_REFERRER)) === false)
) {
die("Erreur interne du serveur. S'il vous plaît contactez votre administrateur systéme. ");
}
// Assurez-vous que l'exécution du programme n'est en pas pause
// Set durée maximale d'exécution du script, en secondes (0 signifie aucune limite)
set_time_limit(0);
if (!isset($_GET['f']) || empty($_GET['f'])) {
die("S'il vous plaît spécifier le nom de fichier à télécharger.");
}
// Null solution piratage d'octets
if (strpos($_GET['f'], "\0") !== FALSE) die('');
// Obtenir le nom de fichier réel.
// Suppression de toute information de chemin pour éviter le piratage en ajoutant chemin d'accès relatif, etc
$fname = basename($_GET['f']);
// Vérifier si le fichier existe
// Check in des sous-dossiers aussi
function find_file ($dirname, $fname, &$file_path) {
$dir = opendir($dirname);
while ($file = readdir($dir)) {
if (empty($file_path) && $file != '.' && $file != '..') {
if (is_dir($dirname.'/'.$file)) {
find_file($dirname.'/'.$file, $fname, $file_path);
}
else {
if (file_exists($dirname.'/'.$fname)) {
$file_path = $dirname.'/'.$fname;
return;
}
}
}
}
} // trouver le fichier
// obtenir le chemin complet du fichier (y compris les sous-dossiers)
$file_path = '';
find_file(BASE_DIR, $fname, $file_path);
if (!is_file($file_path)) {
die('<b style="color:red;">Le fichier n´existe pas. Veuillez prendre contact avec l´administrateur du forum.</b><br /><a href="http://forum.civodul88.fr">http://forum.civodul88.fr</a>');
}
// taille du fichier en octets
$fsize = filesize($file_path);
// extension du fichier
$fext = strtolower(substr(strrchr($fname,"."),1));
// vérifier si l'extension a permis
if (!array_key_exists($fext, $allowed_ext)) {
die("type de fichier non autorisé.");
}
// get mime type
if ($allowed_ext[$fext] == '') {
$mtype = '';
// mime type is not set, get from server settings
if (function_exists('mime_content_type')) {
$mtype = mime_content_type($file_path);
}
else if (function_exists('finfo_file')) {
$finfo = finfo_open(FILEINFO_MIME); // return mime type
$mtype = finfo_file($finfo, $file_path);
finfo_close($finfo);
}
if ($mtype == '') {
$mtype = "application/force-download";
}
}
else {
// Récupère le mime type défini par admin
$mtype = $allowed_ext[$fext];
}
// Browser will try to save file with this filename, regardless original filename.
// You can override it if needed.
if (!isset($_GET['fc']) || empty($_GET['fc'])) {
$asfname = $fname;
}
else {
// remove some bad chars
$asfname = str_replace(array('"',"'",'\\','/'), '', $_GET['fc']);
if ($asfname === '') $asfname = 'NoName';
}
// set headers
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: $mtype");
header("Content-Disposition: attachment; filename=\"$asfname\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);
// download
//@readfile($file_path);
$file = @fopen($file_path,"rb");
if ($file) {
while(!feof($file)) {
print(fread($file));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
}
// log downloads
if (!LOG_DOWNLOADS) die();
$f = @fopen(LOG_FILE, 'a+');
if ($f) {
@fwrite($f, $user->data['username_clean']." ('/_\') ". date("m.d.Y g:ia")." ('/_\') ".$_SERVER['REMOTE_ADDR']." ('/_\') ".$fname."\r\n");
@fclose($f);
}
}
?>
merci a vous de me vennir en aide

Bonjour ;) ;
Je tente de mettre en place une page telechargement.php qui me permet de vérifier l'authentification du membre, de spécifier un chemin autre que la racine du site, qui enregistre les actions dans un fichier txt.
Tout fonctionne correctement pour les petits fichiers, mais lorsque je tente de récupérer un gros fichier le script plante à la moitier du telechargement et j'ai un message d'erreur qui me dis qu'il est impossible de trouver le chemin spécifier.
Je cherche depuis un bon moment une solution un peu partout sur la toile, mais malheureusement sans succès,
c'est pourquoi je me tourne vers vous pour un petit coup de pouce .
voici mon code
[php]
<?php
//control des sessions
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Allow direct file download (hotlinking)?
// Empty - allow hotlinking
// If set to nonempty value (Example: example.com) will only allow downloads when referrer contains this text
define('ALLOWED_REFERRER', '');
// Download folder, i.e. folder where you keep all files for download.
// MUST end with slash (i.e. "/" )
define('BASE_DIR','C:\chemin de mon repertoire /');
// log downloads? true/false
define('LOG_DOWNLOADS',true);
// log file name
define('LOG_FILE','downloads.log');
// Allowed extensions list in format 'extension' => 'mime type'
// If myme type is set to empty string then script will try to detect mime type
// itself, which would only work if you have Mimetype or Fileinfo extensions
// installed on server.
$allowed_ext = array (
// archives
'zip' => 'application/zip',
'rar' => 'application/rar',
'bz2' => 'application/bz2',
'iso' => 'application/iso',
// documents
'pdf' => 'application/pdf',
'doc' => 'application/msword',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
// executables
'exe' => 'application/octet-stream',
// images
'gif' => 'image/gif',
'png' => 'image/png',
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
// audio
'mp3' => 'audio/mpeg',
'wav' => 'audio/x-wav',
// video
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'mov' => 'video/quicktime',
'avi' => 'video/x-msvideo'
);
####################################################################
### DO NOT CHANGE BELOW
####################################################################
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
if ($user->data['user_id'] == ANONYMOUS)
{
echo
'<b style="color:blue;">Bonjour Anonymous,</b><br /><b style="color:red;">veuillez vous inscrire sur le forum pour acceder au téléchargement de ce fichier. Merci!
<a href="http://forum.civodul88.fr">http://forum.civodul88.fr</a></b>';
}
else
{
echo '<b style="color:blue;">bonjour
'. $user->data['username_clean'].', Vous avez été authentifier en tant que membre du forum. Merci.</b><br />';
// Si hotlinking pas permis, alors faire que les pirates pense qu'il ya des problèmes de serveur
if (ALLOWED_REFERRER !== ''
&& (!isset($_SERVER['HTTP_REFERER']) || strpos(strtoupper($_SERVER['HTTP_REFERER']),strtoupper(ALLOWED_REFERRER)) === false)
) {
die("Erreur interne du serveur. S'il vous plaît contactez votre administrateur systéme. ");
}
// Assurez-vous que l'exécution du programme n'est en pas pause
// Set durée maximale d'exécution du script, en secondes (0 signifie aucune limite)
set_time_limit(0);
if (!isset($_GET['f']) || empty($_GET['f'])) {
die("S'il vous plaît spécifier le nom de fichier à télécharger.");
}
// Null solution piratage d'octets
if (strpos($_GET['f'], "\0") !== FALSE) die('');
// Obtenir le nom de fichier réel.
// Suppression de toute information de chemin pour éviter le piratage en ajoutant chemin d'accès relatif, etc
$fname = basename($_GET['f']);
// Vérifier si le fichier existe
// Check in des sous-dossiers aussi
function find_file ($dirname, $fname, &$file_path) {
$dir = opendir($dirname);
while ($file = readdir($dir)) {
if (empty($file_path) && $file != '.' && $file != '..') {
if (is_dir($dirname.'/'.$file)) {
find_file($dirname.'/'.$file, $fname, $file_path);
}
else {
if (file_exists($dirname.'/'.$fname)) {
$file_path = $dirname.'/'.$fname;
return;
}
}
}
}
} // trouver le fichier
// obtenir le chemin complet du fichier (y compris les sous-dossiers)
$file_path = '';
find_file(BASE_DIR, $fname, $file_path);
if (!is_file($file_path)) {
die('<b style="color:red;">Le fichier n´existe pas. Veuillez prendre contact avec l´administrateur du forum.</b><br /><a href="http://forum.civodul88.fr">http://forum.civodul88.fr</a>');
}
// taille du fichier en octets
$fsize = filesize($file_path);
// extension du fichier
$fext = strtolower(substr(strrchr($fname,"."),1));
// vérifier si l'extension a permis
if (!array_key_exists($fext, $allowed_ext)) {
die("type de fichier non autorisé.");
}
// get mime type
if ($allowed_ext[$fext] == '') {
$mtype = '';
// mime type is not set, get from server settings
if (function_exists('mime_content_type')) {
$mtype = mime_content_type($file_path);
}
else if (function_exists('finfo_file')) {
$finfo = finfo_open(FILEINFO_MIME); // return mime type
$mtype = finfo_file($finfo, $file_path);
finfo_close($finfo);
}
if ($mtype == '') {
$mtype = "application/force-download";
}
}
else {
// Récupère le mime type défini par admin
$mtype = $allowed_ext[$fext];
}
// Browser will try to save file with this filename, regardless original filename.
// You can override it if needed.
if (!isset($_GET['fc']) || empty($_GET['fc'])) {
$asfname = $fname;
}
else {
// remove some bad chars
$asfname = str_replace(array('"',"'",'\\','/'), '', $_GET['fc']);
if ($asfname === '') $asfname = 'NoName';
}
// set headers
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: $mtype");
header("Content-Disposition: attachment; filename=\"$asfname\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);
// download
//@readfile($file_path);
$file = @fopen($file_path,"rb");
if ($file) {
while(!feof($file)) {
print(fread($file));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
}
// log downloads
if (!LOG_DOWNLOADS) die();
$f = @fopen(LOG_FILE, 'a+');
if ($f) {
@fwrite($f, $user->data['username_clean']." ('/_\') ". date("m.d.Y g:ia")." ('/_\') ".$_SERVER['REMOTE_ADDR']." ('/_\') ".$fname."\r\n");
@fclose($f);
}
}
?>[/php]
merci a vous de me vennir en aide :oops: