Créer une barre de progression grâce à PHP 5.4

🏁 Pierre-Henry Soria 💡
🏁 Pierre-Henry Soria 💡Software Engineer 🚀 at pH7.me

Dans cet article, vous allez voir comment créer facilement une barre de progression en temps réel grâce aux nouvelles variables de session ajoutées à PHP 5.4 - https://github.com/pH-7/PHP5.4-Session-Upload-Progress-Bar - http://ph7.me - https://www.php.net/manual/fr/session.upload-progress.php

phpsolmag.org/fr46
POUR LES DÉBUTANTS
HORS SÉRI
A
snippet Perl ou installer l’extension PECL « uploadpro-
-
-
-
sentées dans le Tableau 1
session.upload_progress.freq et session.
upload_progress.min_freq
-
nul.
.
session.upload_progress.name
<input type=”hidden” name=”<?php echo ini_get(‘session.
upload_progress.name’);?>”
value=”NON_DE_VOTRE_SESSION” />
-
-
Créer une barre
de progression grâce
à PHP 5.4
La version de PHP 5.4 vient avec son lot de nouveautés et propose
désormais de suivre la progression d’un fichier en cours de
téléchargement grâce aux nouvelles directives et variables de session.
Dans cet article, nous allons donc apprendre à exploiter au mieux ces
nouvelles fonctionnalités. Nous allons également construire une micro-
applicationWeb pour le téléchargement et l’affichage d’images.
Cet article explique : Ce qu’il faut savoir :
-
centes le supporte).
Barre de progression
phpsolmag.org/fr 47HORS SÉRI
$_
SESSION[$sSessionKey][‘cancel_upload’] à la valeur TRUE.
-
-
. $_POST[ini_get(‘session.upload_progress.name’)]);
var_dump($_SESSION[$sSessionKey]);
-
fert.
Tableau 1. Nouvelles directives de session permettant de traquer la progression d’un fichier
Nom de la directive Description Valeur par défaut
session.upload _ progress.enabled
la variable super-global $ _ SESSION
On
session.upload _ progress.cleanup
téléchargement est terminé).
On
du téléchargement dans la variable super-global
$ _ SESSION
upload_progress_
session.upload _ progress.name
session.upload _ progress.freq 1%
session.upload _ progress.min _ freq 1
Listing 1. Données de progression stockées en session
<?php
$_SESSION[“upload_progress_NON_DE_VOTRE_SESSION”] = array(
“start_time” => 1234567890, // L’heure de la requête
“content_length” => 57343257, // Longueur du contenu POST
“bytes_processed” => 453489, // Quantité d’octets reçus et traités
“done” => false, // TRUE lorsque le gestionnaire POST a terminé avec succès, sinon FALSE
0 => array(
“name” => “image.png”,
“tmp_name” => “/tmp/phpHYOAod”,
“error” => 0,
“start_time” => 1234567890, // L’heure de début de requête
),
)
);
phpsolmag.org/fr48
POUR LES DÉBUTANTS
HORS SÉRI
Listing 2. Fichier index.php qui contient le formulaire
<?php
/**
* Check the version of PHP
*/
if (version_compare(phpversion(), ‘5.4.0’, ‘<’))
/**
* Check if “session upload progress” is enabled
*/
if (!intval(ini_get(‘session.upload_progress.enabled’)))
this script.’);
require_once ‘Upload.class.php’;
?>
<!DOCTYPE html>
<html lang=”en-US”>
<head>
<meta charset=”utf-8” />
<title>PHP 5.4 Session Upload Progress Bar Demo</title>
<meta name=”description” content=”PHP 5.4 Session Upload Progress Bar” />
<meta name=”keywords” content=”PHP, session, upload, progress bar” />
<meta name=”author” content=”Pierre-Henry Soria” />
<link rel=”stylesheet” href=”./static/css/common.css” />
</head>
<div id=”container”>
<header>
</header>
<!-- Debug Mod --> <!-- <form action=”upload.php?show_transfer=on” method=”post” id=”upload_form”
enctype=”multipart/form-data” target=”result_frame”> -->
<form action=”upload.php” method=”post” id=”upload_form” enctype=”multipart/form-data” target=”result_
frame”>
<legend>Upload Images</legend>
<input type=”hidden” name=”<?php echo ini_get(‘session.upload_progress.name’);?>” value=”<?php
accept=”image/*” required=”required” />
“CTRL” key.</em></small></label>
<button type=”submit” id=”upload”>Upload!</button>
<button type=”reset” id=”cancel”>Cancel Upload</button>
<!-- Progress bar here -->
<div id=”upload_progress” class=”hidden center progress”>
<div class=”bar”></div>
</div>
</form>
<footer>
</footer>
Barre de progression
phpsolmag.org/fr 49HORS SÉRI
error du tableau $_FILES -
nie à .
Utiliser AJAX pour une progression
en temps réel
-
le serveurs.
ainsi que l’attribut multiple (disponible depuis HTML5)
addFile()
for. Voir Listing 4.
accept
image/* -
-
-
bilité hidden pour qu’elle ne soit pas visible par défaut.
Par la suite, nous allons la rendre visible pendant le
de la page.
<form action=”upload.php?show_transfer=on”
method=”post” id=”upload_form”
enctype=”multipart/form-data” target=”result_frame”>
-
-
$_SESSION et
$_FILES
-
upload()
progress()
-
cancel() -
fadeOut()
faire disparaitre la barre de progression.
progress()
upload()
show()
resetProgressBar() est utili-
sée par upload() et cancel() pour réinitialiser la barre de
progression à 0%
oMe faisant ap-
pel à la variable this
</div>
<script>
$(‘#upload’).click(function() {
(new UploadBar).upload();
});
$(‘#cancel’).click(function() {
(new UploadBar).cancel();
});
</script>
</html>
phpsolmag.org/fr50
POUR LES DÉBUTANTS
HORS SÉRI
Listing 3. upload.php
<?php
require_once ‘Upload.class.php’;
/**
* using the var_dump PHP function.
* Otherwise it sends the image to the server and displays with information about the image.
*/
echo (new Upload)->$sMethod();
Listing 4. Classe Upload.class.php
<?php
class Upload
{
private $_sMsg, $_sUploadDir, $_sProgressKey;
private $_aErrFile = [
the HTML form.’,
UPLOAD_ERR_NO_TMP_DIR => ‘Missing a temporary folder.’,
];
public function __construct()
{
if (‘’ === session_id()) session_start();
$this->_sUploadDir = ‘./uploads/’;
/**
// You can also retrieve the session this way.
upload_progress.name’)]);
*/
}
/**
* @return integer Percentage increase.
*/
public function progress()
{
if(!empty($_SESSION[$this->_sProgressKey]))
{
$aData = $_SESSION[$this->_sProgressKey];
$iProcessed = $aData[‘bytes_processed’];
Barre de progression
phpsolmag.org/fr 51HORS SÉRI
$iLength = $aData[‘content_length’];
$iProgress = ceil(100*$iProcessed / $iLength);
}
else
{
$iProgress = 100;
}
return $iProgress;
}
/**
*/
public function addFile()
{
if(!empty($_FILES))
{
$this->_sMsg = ‘’;
foreach($_FILES as $sKey => $aFiles)
{
for($i = 0, $iNumFiles = count($aFiles[‘tmp_name’]); $i < $iNumFiles; $i++)
{
/**
* Assign values of array in simple variables.
*/
$iErrCode = $aFiles[‘error’][$i];
$sFileName = $aFiles[‘name’][$i];
$sTmpFile = $aFiles[‘tmp_name’][$i];
$sFileDest = $this->_sUploadDir . $sFileName;
$sTypeFile = $aFiles[‘type’][$i];
/**
*/
{
if($iErrCode == UPLOAD_ERR_OK)
{
‘’, $sTypeFile) . ‘<br />’;
$this->_sMsg .= ‘<a href=”’ . $sFileDest . ‘” title=”Click here to see the original
}
else
{
}
}
else
{
phpsolmag.org/fr52
POUR LES DÉBUTANTS
HORS SÉRI
}
}
}
}
else
{
}
return $this;
}
/**
*/
public function show()
{
ob_start();
var_dump($_FILES);
echo ‘</pre>’;
var_dump($_SESSION);
echo ‘</pre>’;
$this->_sMsg = ob_get_clean();
return $this;
}
/**
*
*/
public function cancel()
{
if (!empty($_SESSION[$this->_sProgressKey]))
$_SESSION[$this->_sProgressKey][‘cancel_upload’] = true;
return $this;
}
/**
*
* @param integer $iStatus, 1 = success, 0 = error
*/
{
}
/**
*
* @return string
*/
public function __toString()
{
return $this->_sMsg;
}
}
Barre de progression
phpsolmag.org/fr 53HORS SÉRI
Listing 5. Classe UploadBar.class.js pour récupérer les informations sur la progression en AJAX
function UploadBar()
{
this.upload = function()
{
this.resetProgressBar();
// Submit the form
$(‘#upload_form’).submit();
setTimeout(function() {oMe.progress()}, 1500);
};
this.cancel = function()
{
{
console.log(‘Upload cancelled’);
});
this.resetProgressBar();
$(‘#upload_progress’).delay(2000).fadeOut();
};
this.progress = function()
{
{
var sPercentage = iPercentage + ‘%’;
$(‘#upload_progress’).show();
$(‘#upload_progress .bar’).html(sPercentage);
$(‘#upload_progress .bar’).width(sPercentage);
if(iPercentage < 100)
setTimeout(function() {oMe.progress()}, 500);
});
};
this.resetProgressBar = function()
{
$(‘#upload_progress .bar’).html(‘0%’);
$(‘#upload_progress .bar’).width(‘0%’);
};
}
phpsolmag.org/fr54
POUR LES DÉBUTANTS
HORS SÉRI
-
Listing 6. Fichier download_progress.ajax.php
<?php
require_once ‘Upload.class.php’;
$sParameter = (!empty($_POST[‘param’])) ? strip_
$oUpload = new Upload;
switch($sParameter)
{
echo $oUpload->progress();
break;
$oUpload->cancel();
break;
}
Figure 1. Fichier en cours de téléchargement...
Conclusion
de session ainsi que les variables de session générées
servir.
http://github.com/pH-7/PHP5.4-Session-Upload-Progress-Bar – La
totalité du code source abordée dans cet article,
http://github.com/pH-7/PHP5.4-Session-Upload-Progress-Bar/blob/
master/static/css/common.css
http://php.net/manual/fr/session.upload-progress.php – La docu-
mentation officielle à propos de la progression d’un télécharge-
ment en session,
http://php.net/manual/fr/session.configuration.php – La liste des
différentes directives de session,
http://jquery.com -
uverez également une documentation très riche et en français.
Figure2.Barredeprogressiongénéréeàl’aidedePHP5.4etdejQuery
PIERRE-HENRY SORIA
Pierre-Henry Soria travaille dans le développement Web depuis plu-
sieurs années. Il se spécialise sur l’accessibilité, le référencement ain-
si que la sécurité et les techniques possibles pour éviter les intrusions
et les failles de sécurité. Il travaille également sur les parseurs et ana-
lyseurs lexicaux et syntaxiques en langages de bas niveaux. Il peut
être contacté par email à : phenrysoria@gmail.com
Dépannage
$_SESSION -
-

Recommended

Pots de Miel, Honeypot informatique - Sécurité informatique by
Pots de Miel, Honeypot informatique - Sécurité informatiquePots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatique🏁 Pierre-Henry Soria 💡
8.9K views9 slides
Chap2 by
Chap2Chap2
Chap2vangogue
459 views15 slides
De legacy à symfony by
De legacy à symfonyDe legacy à symfony
De legacy à symfonyEtienne Lachance
125 views40 slides
File manager authentification by
File manager authentificationFile manager authentification
File manager authentificationBabacar Ndoye
432 views7 slides
Formulaires Symfony2 - Cas pratiques et explications by
Formulaires Symfony2 - Cas pratiques et explicationsFormulaires Symfony2 - Cas pratiques et explications
Formulaires Symfony2 - Cas pratiques et explicationsAlexandre Salomé
1.3K views51 slides
Développement d’extensions WordPress by
Développement d’extensions WordPressDéveloppement d’extensions WordPress
Développement d’extensions WordPressChi Nacim
1.5K views59 slides

More Related Content

What's hot

Tuto atelier securisation_site_web by
Tuto atelier securisation_site_webTuto atelier securisation_site_web
Tuto atelier securisation_site_websahar dridi
537 views16 slides
Trucs et astuces pour rendre votre application Windows Phone 8 plus visible by
Trucs et astuces pour rendre votre application Windows Phone 8 plus visibleTrucs et astuces pour rendre votre application Windows Phone 8 plus visible
Trucs et astuces pour rendre votre application Windows Phone 8 plus visibleMicrosoft
1.1K views85 slides
Introduction à Sinatra by
Introduction à SinatraIntroduction à Sinatra
Introduction à SinatraRémi Prévost
1.3K views138 slides
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013 by
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013Ghilas BELHADJ
3.2K views82 slides
PHP 7 et Symfony 3 by
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3Eddy RICHARD
3.1K views34 slides
Authentification sociale en angular 1.pptx by
Authentification sociale en angular 1.pptxAuthentification sociale en angular 1.pptx
Authentification sociale en angular 1.pptxMickael ROLO
637 views36 slides

What's hot(20)

Tuto atelier securisation_site_web by sahar dridi
Tuto atelier securisation_site_webTuto atelier securisation_site_web
Tuto atelier securisation_site_web
sahar dridi537 views
Trucs et astuces pour rendre votre application Windows Phone 8 plus visible by Microsoft
Trucs et astuces pour rendre votre application Windows Phone 8 plus visibleTrucs et astuces pour rendre votre application Windows Phone 8 plus visible
Trucs et astuces pour rendre votre application Windows Phone 8 plus visible
Microsoft1.1K views
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013 by Ghilas BELHADJ
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013
Ghilas BELHADJ3.2K views
PHP 7 et Symfony 3 by Eddy RICHARD
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
Eddy RICHARD3.1K views
Authentification sociale en angular 1.pptx by Mickael ROLO
Authentification sociale en angular 1.pptxAuthentification sociale en angular 1.pptx
Authentification sociale en angular 1.pptx
Mickael ROLO637 views
10 façons de casser son site WordPress ... et de le réparer ! by Boiteaweb
10 façons de casser son site WordPress ... et de le réparer !10 façons de casser son site WordPress ... et de le réparer !
10 façons de casser son site WordPress ... et de le réparer !
Boiteaweb22.5K views
Création de themes WordPress by Chi Nacim
Création de themes WordPressCréation de themes WordPress
Création de themes WordPress
Chi Nacim4.9K views
Persona: un système d'identité pour le Web by Francois Marier
Persona: un système d'identité pour le WebPersona: un système d'identité pour le Web
Persona: un système d'identité pour le Web
Francois Marier1.1K views
Quoi de neuf dans Zend Framework 1.10 ? by Mickael Perraud
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
Mickael Perraud1.5K views
Creation de-themes-wp by Chi Nacim
Creation de-themes-wpCreation de-themes-wp
Creation de-themes-wp
Chi Nacim7.1K views
Creation de template_joomla_2.5_-_v_1.0 by Faiz Morchid
Creation de template_joomla_2.5_-_v_1.0Creation de template_joomla_2.5_-_v_1.0
Creation de template_joomla_2.5_-_v_1.0
Faiz Morchid1.9K views
Epitech securite-2012.key by Damien Seguy
Epitech securite-2012.keyEpitech securite-2012.key
Epitech securite-2012.key
Damien Seguy708 views
Comment créer des hooks dans vos développements WordPress - WP Tech 2015 by Boiteaweb
Comment créer des hooks dans vos développements WordPress - WP Tech 2015Comment créer des hooks dans vos développements WordPress - WP Tech 2015
Comment créer des hooks dans vos développements WordPress - WP Tech 2015
Boiteaweb9K views
WordPress en tant que CMS by Chi Nacim
WordPress en tant que CMSWordPress en tant que CMS
WordPress en tant que CMS
Chi Nacim1.5K views
jQuery — fonctionnalités avancées by Rémi Prévost
jQuery — fonctionnalités avancéesjQuery — fonctionnalités avancées
jQuery — fonctionnalités avancées
Rémi Prévost4.3K views

Similar to Créer une barre de progression grâce à PHP 5.4

Atelier WordPress: Création d&rsquo;extension WordPress by
Atelier WordPress: Création d&rsquo;extension WordPressAtelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressIZZA Samir
1.1K views23 slides
php2 : formulaire-session-PDO by
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
1.9K views25 slides
démonstration code source site web ecole.docx by
démonstration code source site web ecole.docxdémonstration code source site web ecole.docx
démonstration code source site web ecole.docxVincentBweka
18 views9 slides
Des tests modernes pour Drupal by
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour DrupalChristophe Villeneuve
1.6K views47 slides
Php 7.4 2020-01-28 - afup by
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afupJulien Vinber
24 views49 slides
Meet up symfony 11 octobre 2016 - Les formulaire by
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireJulien Vinber
127 views22 slides

Similar to Créer une barre de progression grâce à PHP 5.4(20)

Atelier WordPress: Création d&rsquo;extension WordPress by IZZA Samir
Atelier WordPress: Création d&rsquo;extension WordPressAtelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPress
IZZA Samir1.1K views
php2 : formulaire-session-PDO by Abdoulaye Dieng
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
Abdoulaye Dieng1.9K views
démonstration code source site web ecole.docx by VincentBweka
démonstration code source site web ecole.docxdémonstration code source site web ecole.docx
démonstration code source site web ecole.docx
VincentBweka18 views
Meet up symfony 11 octobre 2016 - Les formulaire by Julien Vinber
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaire
Julien Vinber127 views
ZendFramework2 - Présentation by julien pauli
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
julien pauli1.3K views
PHP 5.3, PHP Next by SQLI
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
SQLI2.8K views
Application web php5 html5 css3 bootstrap by Bassem ABCHA
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
Bassem ABCHA4.6K views
11. Autorisations.pptx by ZinebJbilou
11. Autorisations.pptx11. Autorisations.pptx
11. Autorisations.pptx
ZinebJbilou7 views
Drupalcamp Nantes - Adapter Drupal by Artusamak
Drupalcamp Nantes - Adapter DrupalDrupalcamp Nantes - Adapter Drupal
Drupalcamp Nantes - Adapter Drupal
Artusamak693 views
Introduction à Symfony2 by Hugo Hamon
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
Hugo Hamon15.2K views
Html5 2 by TECOS
Html5 2Html5 2
Html5 2
TECOS331 views
Migration PHP4-PHP5 by julien pauli
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
julien pauli2.7K views
Pratique de javascript KOUAMI DJOMO by Julio Djomo
Pratique de javascript KOUAMI DJOMOPratique de javascript KOUAMI DJOMO
Pratique de javascript KOUAMI DJOMO
Julio Djomo79 views
Quelle place pour le framework Rails dans le développement d'application web by 5pidou
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
5pidou594 views
Tester les applications Zend Framework by Mickael Perraud
Tester les applications Zend FrameworkTester les applications Zend Framework
Tester les applications Zend Framework
Mickael Perraud889 views
WP CLI : le couteau suisse du développeur by benjamingossetpro
WP CLI : le couteau suisse du développeurWP CLI : le couteau suisse du développeur
WP CLI : le couteau suisse du développeur
benjamingossetpro545 views

Créer une barre de progression grâce à PHP 5.4

  • 1. phpsolmag.org/fr46 POUR LES DÉBUTANTS HORS SÉRI A snippet Perl ou installer l’extension PECL « uploadpro- - - - sentées dans le Tableau 1 session.upload_progress.freq et session. upload_progress.min_freq - nul. . session.upload_progress.name <input type=”hidden” name=”<?php echo ini_get(‘session. upload_progress.name’);?>” value=”NON_DE_VOTRE_SESSION” /> - - Créer une barre de progression grâce à PHP 5.4 La version de PHP 5.4 vient avec son lot de nouveautés et propose désormais de suivre la progression d’un fichier en cours de téléchargement grâce aux nouvelles directives et variables de session. Dans cet article, nous allons donc apprendre à exploiter au mieux ces nouvelles fonctionnalités. Nous allons également construire une micro- applicationWeb pour le téléchargement et l’affichage d’images. Cet article explique : Ce qu’il faut savoir : - centes le supporte).
  • 2. Barre de progression phpsolmag.org/fr 47HORS SÉRI $_ SESSION[$sSessionKey][‘cancel_upload’] à la valeur TRUE. - - . $_POST[ini_get(‘session.upload_progress.name’)]); var_dump($_SESSION[$sSessionKey]); - fert. Tableau 1. Nouvelles directives de session permettant de traquer la progression d’un fichier Nom de la directive Description Valeur par défaut session.upload _ progress.enabled la variable super-global $ _ SESSION On session.upload _ progress.cleanup téléchargement est terminé). On du téléchargement dans la variable super-global $ _ SESSION upload_progress_ session.upload _ progress.name session.upload _ progress.freq 1% session.upload _ progress.min _ freq 1 Listing 1. Données de progression stockées en session <?php $_SESSION[“upload_progress_NON_DE_VOTRE_SESSION”] = array( “start_time” => 1234567890, // L’heure de la requête “content_length” => 57343257, // Longueur du contenu POST “bytes_processed” => 453489, // Quantité d’octets reçus et traités “done” => false, // TRUE lorsque le gestionnaire POST a terminé avec succès, sinon FALSE 0 => array( “name” => “image.png”, “tmp_name” => “/tmp/phpHYOAod”, “error” => 0, “start_time” => 1234567890, // L’heure de début de requête ), ) );
  • 3. phpsolmag.org/fr48 POUR LES DÉBUTANTS HORS SÉRI Listing 2. Fichier index.php qui contient le formulaire <?php /** * Check the version of PHP */ if (version_compare(phpversion(), ‘5.4.0’, ‘<’)) /** * Check if “session upload progress” is enabled */ if (!intval(ini_get(‘session.upload_progress.enabled’))) this script.’); require_once ‘Upload.class.php’; ?> <!DOCTYPE html> <html lang=”en-US”> <head> <meta charset=”utf-8” /> <title>PHP 5.4 Session Upload Progress Bar Demo</title> <meta name=”description” content=”PHP 5.4 Session Upload Progress Bar” /> <meta name=”keywords” content=”PHP, session, upload, progress bar” /> <meta name=”author” content=”Pierre-Henry Soria” /> <link rel=”stylesheet” href=”./static/css/common.css” /> </head> <div id=”container”> <header> </header> <!-- Debug Mod --> <!-- <form action=”upload.php?show_transfer=on” method=”post” id=”upload_form” enctype=”multipart/form-data” target=”result_frame”> --> <form action=”upload.php” method=”post” id=”upload_form” enctype=”multipart/form-data” target=”result_ frame”> <legend>Upload Images</legend> <input type=”hidden” name=”<?php echo ini_get(‘session.upload_progress.name’);?>” value=”<?php accept=”image/*” required=”required” /> “CTRL” key.</em></small></label> <button type=”submit” id=”upload”>Upload!</button> <button type=”reset” id=”cancel”>Cancel Upload</button> <!-- Progress bar here --> <div id=”upload_progress” class=”hidden center progress”> <div class=”bar”></div> </div> </form> <footer> </footer>
  • 4. Barre de progression phpsolmag.org/fr 49HORS SÉRI error du tableau $_FILES - nie à . Utiliser AJAX pour une progression en temps réel - le serveurs. ainsi que l’attribut multiple (disponible depuis HTML5) addFile() for. Voir Listing 4. accept image/* - - - bilité hidden pour qu’elle ne soit pas visible par défaut. Par la suite, nous allons la rendre visible pendant le de la page. <form action=”upload.php?show_transfer=on” method=”post” id=”upload_form” enctype=”multipart/form-data” target=”result_frame”> - - $_SESSION et $_FILES - upload() progress() - cancel() - fadeOut() faire disparaitre la barre de progression. progress() upload() show() resetProgressBar() est utili- sée par upload() et cancel() pour réinitialiser la barre de progression à 0% oMe faisant ap- pel à la variable this </div> <script> $(‘#upload’).click(function() { (new UploadBar).upload(); }); $(‘#cancel’).click(function() { (new UploadBar).cancel(); }); </script> </html>
  • 5. phpsolmag.org/fr50 POUR LES DÉBUTANTS HORS SÉRI Listing 3. upload.php <?php require_once ‘Upload.class.php’; /** * using the var_dump PHP function. * Otherwise it sends the image to the server and displays with information about the image. */ echo (new Upload)->$sMethod(); Listing 4. Classe Upload.class.php <?php class Upload { private $_sMsg, $_sUploadDir, $_sProgressKey; private $_aErrFile = [ the HTML form.’, UPLOAD_ERR_NO_TMP_DIR => ‘Missing a temporary folder.’, ]; public function __construct() { if (‘’ === session_id()) session_start(); $this->_sUploadDir = ‘./uploads/’; /** // You can also retrieve the session this way. upload_progress.name’)]); */ } /** * @return integer Percentage increase. */ public function progress() { if(!empty($_SESSION[$this->_sProgressKey])) { $aData = $_SESSION[$this->_sProgressKey]; $iProcessed = $aData[‘bytes_processed’];
  • 6. Barre de progression phpsolmag.org/fr 51HORS SÉRI $iLength = $aData[‘content_length’]; $iProgress = ceil(100*$iProcessed / $iLength); } else { $iProgress = 100; } return $iProgress; } /** */ public function addFile() { if(!empty($_FILES)) { $this->_sMsg = ‘’; foreach($_FILES as $sKey => $aFiles) { for($i = 0, $iNumFiles = count($aFiles[‘tmp_name’]); $i < $iNumFiles; $i++) { /** * Assign values of array in simple variables. */ $iErrCode = $aFiles[‘error’][$i]; $sFileName = $aFiles[‘name’][$i]; $sTmpFile = $aFiles[‘tmp_name’][$i]; $sFileDest = $this->_sUploadDir . $sFileName; $sTypeFile = $aFiles[‘type’][$i]; /** */ { if($iErrCode == UPLOAD_ERR_OK) { ‘’, $sTypeFile) . ‘<br />’; $this->_sMsg .= ‘<a href=”’ . $sFileDest . ‘” title=”Click here to see the original } else { } } else {
  • 7. phpsolmag.org/fr52 POUR LES DÉBUTANTS HORS SÉRI } } } } else { } return $this; } /** */ public function show() { ob_start(); var_dump($_FILES); echo ‘</pre>’; var_dump($_SESSION); echo ‘</pre>’; $this->_sMsg = ob_get_clean(); return $this; } /** * */ public function cancel() { if (!empty($_SESSION[$this->_sProgressKey])) $_SESSION[$this->_sProgressKey][‘cancel_upload’] = true; return $this; } /** * * @param integer $iStatus, 1 = success, 0 = error */ { } /** * * @return string */ public function __toString() { return $this->_sMsg; } }
  • 8. Barre de progression phpsolmag.org/fr 53HORS SÉRI Listing 5. Classe UploadBar.class.js pour récupérer les informations sur la progression en AJAX function UploadBar() { this.upload = function() { this.resetProgressBar(); // Submit the form $(‘#upload_form’).submit(); setTimeout(function() {oMe.progress()}, 1500); }; this.cancel = function() { { console.log(‘Upload cancelled’); }); this.resetProgressBar(); $(‘#upload_progress’).delay(2000).fadeOut(); }; this.progress = function() { { var sPercentage = iPercentage + ‘%’; $(‘#upload_progress’).show(); $(‘#upload_progress .bar’).html(sPercentage); $(‘#upload_progress .bar’).width(sPercentage); if(iPercentage < 100) setTimeout(function() {oMe.progress()}, 500); }); }; this.resetProgressBar = function() { $(‘#upload_progress .bar’).html(‘0%’); $(‘#upload_progress .bar’).width(‘0%’); }; }
  • 9. phpsolmag.org/fr54 POUR LES DÉBUTANTS HORS SÉRI - Listing 6. Fichier download_progress.ajax.php <?php require_once ‘Upload.class.php’; $sParameter = (!empty($_POST[‘param’])) ? strip_ $oUpload = new Upload; switch($sParameter) { echo $oUpload->progress(); break; $oUpload->cancel(); break; } Figure 1. Fichier en cours de téléchargement... Conclusion de session ainsi que les variables de session générées servir. http://github.com/pH-7/PHP5.4-Session-Upload-Progress-Bar – La totalité du code source abordée dans cet article, http://github.com/pH-7/PHP5.4-Session-Upload-Progress-Bar/blob/ master/static/css/common.css http://php.net/manual/fr/session.upload-progress.php – La docu- mentation officielle à propos de la progression d’un télécharge- ment en session, http://php.net/manual/fr/session.configuration.php – La liste des différentes directives de session, http://jquery.com - uverez également une documentation très riche et en français. Figure2.Barredeprogressiongénéréeàl’aidedePHP5.4etdejQuery PIERRE-HENRY SORIA Pierre-Henry Soria travaille dans le développement Web depuis plu- sieurs années. Il se spécialise sur l’accessibilité, le référencement ain- si que la sécurité et les techniques possibles pour éviter les intrusions et les failles de sécurité. Il travaille également sur les parseurs et ana- lyseurs lexicaux et syntaxiques en langages de bas niveaux. Il peut être contacté par email à : phenrysoria@gmail.com Dépannage $_SESSION - -