Code : Tout sélectionner
<input type="file" name="fichier" multiple="multiple" />Code : Tout sélectionner
<input type="file" name="fichier" multiple />
Dans mon exemple j'utilise : multiple="true" car c'est la syntaxe indiquée dans la doc mozilla bien que j'ai eu naturellement tendance à mettre multiple="multiple" ce qui fonctionne d'ailleurs tout aussi bien.Beh en même temps il y a pas 36 tests.![]()
Code : Tout sélectionner
<input type="file" name="fichier" multiple="multiple" />Aucun des deux ne fonctionnait.Code : Tout sélectionner
<input type="file" name="fichier" multiple />
<?php
// Appel de la classe
require('Classe_Upload.php');
//Si on travaille en utf-8
header('Content-type: text/html; charset=UTF-8');
// Déclaration de la classe avec envoi des paramètres (cf doc)
$form = new Telechargement ('PHOTO','envoi_file','photo','get_form_1');
// option : contrôle que le fichier est une image de type gif, jpg, jpeg ou png (et retourne ses dimensions dans le tableau des résultats - tableau non exploité dans l'exemple ci-dessous)
$form->Set_Controle_dimImg ();
//option pour renommer le fichier en mode incrémentiel si un fichier de même nom existe déjà sur le serveur
$form->Set_Renomme_fichier ('incr');
//Téléchargement sans traitement php supplémentaire -> on spécifie un rechargement de la page suite au téléchargement en indiquant un argument non nul ex 'reload' dans la fonction d'Upload.
$form->Upload ('reload');
// Enregistrement des messages de contrôle
$messages_form = $form->Get_Tab_message ();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/JavaScript">
<!--
function Attente_Load(id_attente)// écrit patientez durant le téléchargement
{
var id_attente = document.getElementById(id_attente);
if (id_attente)
{
id_attente.innerHTML = 'Patientez...';
id_attente.style.fontWeight="bold";
id_attente.style.fontSize="1.5em";
}
}
function Add_Load_File(id_content_file) // Ajoute un champ de téléchargement
{
var content_file = document.getElementById(id_content_file);
var tab = content_file ? content_file.getElementsByTagName('input') : new Array();
if(tab.length > 0)
{
var input = tab[0].cloneNode(true);
input.value = '';
content_file.appendChild(input);
}
}
-->
</script>
<style type="text/css">
body {
font-family:Arial, Helvetica, sans-serif;
font-size:1em;
}
p, input, form {
margin:0;
padding:0;
}
#bord_form {
width:700px;
margin:auto;
border:5px double #999999;
padding-top:1em;
padding-bottom:1em;
}
#content_form {
width:650px;
margin:auto;
font-size:0.8em;
}
.info p {
margin-top:0.3em;
}
#form_file {
text-align:right;
}
#form_file p {
margin-top:1.5em;
}
#form_file #champ_file input {
margin-top:0.3em;
padding:0;
height:1.8em;
width:100%;
}
#form_file #add_load_file {
font-size:0.85em;
text-decoration:underline;
cursor:pointer;
}
#form_file #envoyer {
width:8em;
height:2.5em;
font-weight:bold;
}
#message_tele {
margin-top:1em;
}
</style>
</head>
<body>
<div id = "bord_form">
<div id = "content_form">
<div class = "info">
<p>Fichiers autorisés "jpg", "jpeg", "gif", "png".</p>
<p>Taille maximum de fichier autorisée par le serveur = <?php echo ini_get('upload_max_filesize').'o'?>. Total maximum pour l'ensemble <?php echo ini_get('post_max_size').'o'?>.</p>
</div>
<form id = "form_file" enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?get_form_1=1'?>" method = "post" onsubmit = "Attente_Load('message_tele')">
<p id = "champ_file"><input type = "file" name = "photo[]" size="90" multiple = "multiple" /></p>
<p id = "add_load_file" onclick = "Add_Load_File('champ_file')">Ajouter un champ de téléchargement</p>
<p><input type = "submit" name = "envoi_file" value = "Envoyez" id = "envoyer" /></p>
</form>
<div id = "message_tele" class = "info">
<?php if (isset($messages_form))
foreach ($messages_form as $num)
{
foreach ($num as $value)
echo '<p>- '.htmlspecialchars($value).'</p>';
}
?>
</div>
</div>
</div>
</body>
Note : (pour les visiteurs qui commencent à lire les topics par la fin) <?php
// Mise en place d'une connexion basique
$conn_id = ftp_connect($ftp_server);
// Identification avec un nom d'utilisateur et un mot de passe
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// Vérification de la connexion
if ((!$conn_id) || (!$login_result)) {
echo "La connexion FTP a échoué !";
echo "Tentative de connexion au serveur $ftp_server pour l'utilisateur $ftp_user_name";
exit;
} else {
echo "Connexion au serveur $ftp_server, pour l'utilisateur $ftp_user_name";
}
// Chargement d'un fichier
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);
// Vérification du status du chargement
if (!$upload) {
echo "Le chargement FTP a échoué!";
} else {
echo "Chargement de $source_file vers $ftp_server en tant que $destination_file";
}
// Fermeture du flux FTP
ftp_close($conn_id);
?>
Mon but est d'intégrer ce code à la classe classe_upload.php (je sais pas encore exactement où) mais avant tout pensez-vous qu'il y a un intérêt à intégrer le ftp pour améliorer la performance?
Aucun puisque tu dois charger les fichiers dans le formulaire.mais avant tout pensez-vous qu'il y a un intérêt à intégrer le ftp pour améliorer la performance?
Merci
J'ai mozilla Firefox 3.6.13 au boulot et cela ne fonctionne pas.
Réponse un peu tardive - à peine plus d'un anBeh en même temps il y a pas 36 tests.![]()
Code : Tout sélectionner
<input type="file" name="fichier" multiple="multiple" />Aucun des deux ne fonctionnait.Code : Tout sélectionner
<input type="file" name="fichier" multiple />
Code : Tout sélectionner
<input type="file" name="fichier[]" multiple="multiple" />
<?php
// Appel de la classe
require('Classe_Upload.php');
//Si on travaille en utf-8
header('Content-type: text/html; charset=UTF-8');
// Déclaration de la classe avec envoi des paramètres (cf doc)
$form = new Telechargement ('PHOTO','envoi_file','photo','get_form_1');
// option : contrôle que le fichier est une image de type gif, jpg, jpeg ou png (et retourne ses dimensions dans le tableau des résultats)
$form->Set_Controle_dimImg ();
//option pour renommer le fichier en mode incrémentiel si un fichier de même nom existe déjà sur le serveur
$form->Set_Renomme_fichier ('incr');
//Téléchargement sans traitement php supplémentaire -> on spécifie un rechargement de la page suite au téléchargement en indiquant un argument non nul ex 'reload' dans la fonction d'Upload.
$form->Upload ('reload');
// Enregistrement des messages de contrôle
$messages_form = $form->Get_Tab_message ();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<title>Classe Upload php et barre de progression avec jquery et php >= 5.4</title>
<!--Chargement de la librairie jquery-->
<script src = "Scripts/jquery.js" type="text/javascript"></script>
<!--Chargement des fichiers jquery nécessaires à l'affichage de la barre de progression-->
<script src="Scripts/jquery.ui.core.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.ui.widget.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.ui.progressbar.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="librairie/ui-lightness/jquery-ui-1.8.23.custom.css"/>
<script type="text/JavaScript">
<!--
function Add_Load_File(id_content_file) // Ajoute un champ de téléchargement
{
var content_file = document.getElementById(id_content_file);
var tab = content_file ? content_file.getElementsByTagName('input') : new Array();
if(tab.length > 0)
{
var input = tab[0].cloneNode(true);
input.value = '';
content_file.appendChild(input);
}
}
$(function() // Message "patientez" puis affichage de la progression texte et graphique
{
var echec = 0;
function Upload_progress (session_name)
{
$.ajax({
dataType: "json",
type: "POST",
url: "upload_progression_ajax.php",
data: 'session_progress='+session_name,
success: function(result)
{
var ratio = parseInt(result['ratio']);
var temps_restant = result['temps_restant'];
var etat = parseInt(result['etat']);
var version_php = parseInt(result['php']);
if (version_php == 1)
{
if(temps_restant != 'nd')
{
echec = 0;
$("#message_tele").text(ratio+'% effectués, temps restant approximatif : '+temps_restant);
if ($.isFunction($("#progressbar").progressbar))
{
$("#progressbar").progressbar({value: ratio});
}
if(etat == 0)
{
setTimeout(function() {Upload_progress (session_name);}, 2000);
}
}
else
{
echec++;
if(echec > 1)
{
window.location.reload(true);
}
else
{
setTimeout(function() {Upload_progress (session_name);}, 2000);
}
}
}
}
});
}
var input_session = $("#session_progression");
var session_name = input_session.attr("data-prefix")+input_session.val();
$("#form_file").on("submit",function(){
$("#message_tele").html('<span style="font-weight:bold">Veuillez patienter...</span>');
setTimeout(function() {Upload_progress (session_name);}, 2000);
});
});
-->
</script>
<style type="text/css">
/*pour avoir une barre de progression animée. Attention l'image "pbar-ani.gif" n'est pas par défaut dans "ui-lightness/images", je l'ai copiée dans ce dossier depuis "development-bundle\demos\progressbar\images"*/
.ui-progressbar .ui-progressbar-value {
background-image: url(librairie/ui-lightness/images/pbar-ani.gif);
}
</style>
<style type="text/css">
body {
font-family:Arial, Helvetica, sans-serif;
font-size:1em;
}
p, input, form {
margin:0;
padding:0;
}
#bord_form {
width:700px;
margin:auto;
border:5px double #999999;
padding-top:1em;
padding-bottom:1em;
}
#content_form {
width:650px;
margin:auto;
font-size:0.8em;
}
.info p {
margin-top:0.3em;
}
#form_file {
text-align:right;
}
#form_file p {
margin-top:1.5em;
}
#form_file #champ_file input {
margin-top:0.3em;
padding:0;
height:1.8em;
width:100%;
}
#form_file #add_load_file {
font-size:0.85em;
text-decoration:underline;
cursor:pointer;
}
#form_file #envoyer {
width:8em;
height:2.5em;
font-weight:bold;
}
#message_tele {
margin-top:1em;
}
#progressbar {
margin-top:1em;
width:45%;
height:1em;
}
</style>
</head>
<body>
<div id = "bord_form">
<div id = "content_form">
<div class = "info">
<p>Fichiers autorisés "jpg", "jpeg", "gif", "png".</p>
<p>Taille maximum de fichier autorisée par le serveur = <?php echo ini_get('upload_max_filesize').'o'?>. Total maximum pour l'ensemble <?php echo ini_get('post_max_size').'o'?>.</p>
</div>
<form id = "form_file" enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?get_form_1=1'?>" method = "post">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $form->Return_Octets(ini_get('upload_max_filesize'))?>" />
<input id = "session_progression" type = "hidden" data-prefix = "<?php echo ini_get("session.upload_progress.prefix"); ?>" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="<?php echo uniqid()?>" />
<p id = "champ_file"><input type = "file" name = "photo[]" size="90" multiple = "multiple" /></p>
<p id = "add_load_file" onClick="Add_Load_File('champ_file')">Ajouter un champ de téléchargement</p>
<p><input type = "submit" name = "envoi_file" value = "Envoyez" id = "envoyer" /></p>
</form>
<div id = "progressbar"></div>
<div id = "message_tele" class = "info">
<?php if (isset($messages_form))
foreach ($messages_form as $num)
{
foreach ($num as $value)
echo '<p>- '.htmlspecialchars($value).'</p>';
}
?>
</div>
</div>
</div>
</body>
<?php
header('Content-type: text/html; charset=UTF-8');
session_start();
$ses_p = isset($_POST['session_progress']) ? $_POST['session_progress'] : null;
if(isset($ses_p,$_SESSION[$ses_p],$_SESSION[$ses_p]['done'],$_SESSION[$ses_p]['bytes_processed'],$_SESSION[$ses_p]['content_length'],$_SESSION[$ses_p]['start_time']))
{
$start_time = $_SESSION[$ses_p]['start_time']; // heure de début
$content_length = $_SESSION[$ses_p]['content_length']; // Longueur du contenu POST
$bytes_processed = $_SESSION[$ses_p]['bytes_processed']; // Quantité d'octets reçus et traités
$done = $_SESSION[$ses_p]['done']; // true lorsque le gestionnaire POST a terminé, avec succès ou non
$done = empty($done)? 0 : 1;
$time_now = time();
$time_diff = $time_now - $start_time;
$bytes_diff = $content_length - $bytes_processed;
$vitesse = $bytes_processed/$time_diff;
$prevision_time = $bytes_diff/$vitesse;
$heures = floor($prevision_time/3600);
$reste = $prevision_time%3600;
$minutes = floor($reste/60);
$reste = $reste%60;
$time = array('h'=>$heures,'min'=>$minutes,'s'=>$reste);
$time = array_filter($time);
$time = array_map('intval',$time);
$temps_restant = '';
foreach($time as $key => $value) $temps_restant .= $value.$key.' ';
// Temps nécessaire (ici 6 secondes) avant d'envoyer la valeur du temps restant sinon sur une période trop courte la valeur calculée n'est pas significative.
$temps_restant = $time_diff < 6 ? 'calcul en cours' : $temps_restant;
$ratio_bytes = intval(round($bytes_processed/$content_length*100));
$tab_json = array('ratio'=>$ratio_bytes,'temps_restant'=>$temps_restant,'etat'=>$done,'php'=>1);
}
else // si la condition précédente n'est pas remplie c'est probablement que le post dépasse la valeur maximale autorisée par le serveur ou que la version de php < 5.4 ou que le fichier est déjà téléchargé et la variable de session effacée car nettoyée par session.upload_progress.cleanup.
{
$version_php_ok = version_compare(PHP_VERSION, '5.4.0') >= 0 ? 1: 0;
$tab_json = array('ratio'=>0,'temps_restant'=>'nd','etat'=>1,'php'=>$version_php_ok);
}
echo json_encode($tab_json);
?>
Faites des tests sur des fichiers d'au moins 1 méga afin que les informations de téléchargement aient le temps de s'afficher.