Bonjours à tous,
Je suis un novice en programmation et j'ai débuté avec PHP.
Je suis en train de développer une application FTP Client via un explorateur internet, 100% PHP.
Mon application permet de se connecter et de s'identifier au server FTP et d'accéder au répertoire de l'utilisateur.
Elle liste son répertoire et permet d'y naviguer.
J'ai inclus un formulaire pour télécharger les fichiers de l'utilisateur via checkbox et sumit button.
La première partie du téléchargement s'éffectue sur le server internet ou se situe mon application depuis le répertoire de l'utilisateur. Tous les fichiers y son correctements copiés.
La deuxième partie du téléchargement s'éffectue entre le server internet et l'utilisateur de l'application avec l'usage de "header".
Lorsque je télécharge un fichier, tous se passe correctement.
Lorsque je télécharge plusieurs fichiers, un seul fichier est téléchargé depuis le server internet avec le nom du premier fichier de la liste et le contenu du dernier.
Avec la batterie de test que j'ai passé sur mon code, j'en est dédui qu'il me faudrai créer peut'être une class d'objet pour permettre l'usage de la fonction header à travers une boucle. Car le problème vient avec ces headers, une fois envoyés, mon script s'arrète.
Voici la page de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 <?php //Allows header command to be used later on in script ob_start(); // Load the _POST session variables include('ftploadsessionvar.php'); $CurrentDirectory = $_SESSION['CurrentDirectory']; // Control if there is anything to download if (isset($_GET['downloadFileAndFolder'])) { // Download button action foreach ($_GET['downloadFileAndFolder'] as $FileAndFolderListed) { include('ftpconnection.php'); // Download the file from the FTP data server to the web server // Temporary download file webserver directory $downloadDirectory ='../bin/tmpdownloaddirectory/'; // Create a open temporary file on the web server $WebServerFileAndFolder = $downloadDirectory . $FileAndFolderListed; $LocalFileAndFolder = fopen($WebServerFileAndFolder, 'wb'); // Get the full path of the files and folder to the remote FTP server directory to download $FileAndFolderListedFullPath = $CurrentDirectory . '/' . $FileAndFolderListed; $FileAndFolderListedFullPath = substr($FileAndFolderListedFullPath, 1); // FTP download function $GetFileAndFolder = ftp_fget($FTPServerConnection, $LocalFileAndFolder, $FileAndFolderListedFullPath, FTP_BINARY); // ftp_fget -- Downloads a file from the FTP server and saves to an open file // Close FTP connection $FTPClose = ftp_close($FTPServerConnection); // Close the open file fclose($LocalFileAndFolder); } // HTTP Download from the web server to the web client function downloadHTTP ($WebServerFileAndFolder,$FileAndFolderListed) { global $WebServerFileAndFolder, $FileAndFolderListed; //echo $FileAndFolderListed;// test array header('Content-Disposition:attachment; filename=' . $FileAndFolderListed); header('Content-Type:application/force-download'); header('Content-Type:application/octet-stream'); header('Pragma: '); header('Cache-Control:must-revalidate, post-check=0, pre-check=0'); header('Expires:0'); header('Content-Transfer-Encoding:binary'); readfile($WebServerFileAndFolder);// readfile -- Outputs the file unlink($WebServerFileAndFolder); // unlink -- Deletes the file ob_flush(); exit; } foreach ($_GET['downloadFileAndFolder'] as $FileAndFolderListed) { //echo $FileAndFolderListed;//test array downloadHTTP ($WebServerFileAndFolder,$FileAndFolderListed); } } if(empty($FileAndFolderListed)) { // Go to the Remote file & folder server header('Location:ftpremotefolder.php'); exit; } ?>
Partager