Bonsoir, je sollicite votre appui pour l'optimisation d'un code que j'utilise pour afficher le contenu d'un dossier MP3.
Le code permet d'écouter aussi le MP3 en ligne et de le télécharger.
Mon problème est que je suis confronté presque chaque jour à un problème de "limite de mémoire" sur le site.
L'hebergeur (obambu.com) me suggère d’optimiser mes codes php pour gagner en mémoire.
Mon code qui affiche le contenu du dossier:
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
$dir_nom = '.'; // dossier listé (pour lister le répertoire courant : $dir_nom = '.'  --> ('point')
$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
$fichier= array(); // on déclare le tableau contenant le nom des fichiers
$dossier= array(); // on déclare le tableau contenant le nom des dossiers
$nb_fichier = 0;
 
while($element = readdir($dir)) {
    if($element != '.' && $element != '..') {
        if (!is_dir($dir_nom.'/'.$element)) {
            $extension = pathinfo($element, PATHINFO_EXTENSION);
            if (($extension == 'mp3')||($extension == 'MP3')) {
                $fichier[] = $element;
            }
        } else {
            $dossier[] = $element;
        }
    }
}
closedir($dir);
 
if(!empty($fichier)){
rsort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
// on compte le nombre de pages nécessaires
$nfichier = 20;$nombre_pages = ceil(count($fichier) / $nfichier);
$page_actuelle = isset($_GET['page']) ? intval($_GET['page']) : 1;
 
// on decoupe le tableau contenant les fichiers au niveau de la page qu'on veut 
$fichier = array_slice($fichier, ($page_actuelle - 1) * $nfichier, $nfichier);
	echo "<p id=\"titre\">Liste des MP3 </p>";
	foreach($fichier as $lien) {
		// On enlève l'extension du fichier et les 5 première caractère
		$vowels = array("-","_","%","@");
		$onvowels = array(" ","-","'","'");
$sanstiret = str_replace($vowels, $onvowels, "$lien");
		$simplenom = substr($sanstiret, 5);
		$pos_point = strpos($simplenom, '.');
$nomdufichier_sans_extension = substr($simplenom, 0, $pos_point);
// FIN DE LA COUPURE DE L'EXTENSION	
		$nb_fichier++; // On incrémente le compteur de 1
			echo "<li><a href=\"audio.php?telecharge=$lien\">$nomdufichier_sans_extension</a></li>";
			echo "<center><audio controls preload=\"none\"> <source src=\"$lien\"/></audio><br/></center>";
				$nom_file = "../../../compteurs/$lien.txt"; 
				if (file_exists($nom_file)) {  
				echo "<a href=\"audio.php?telecharge=$lien\">Téléchargé </a>"; 
				include("../../../compteurs/$lien.txt"); 
				} 
				else {   
				echo "<a href=\"audio.php?telecharge=$lien\">Téléchargé </a>0 fois<br/> "; } 
 
 
		}
 
	if( $page_actuelle <= 1 && $nombre_pages == 1 )
    echo '';
	else 
echo'Liste des Pages:';
// on met un lien pour chaque page, le lien donne le numéro de page a afficher
for ($i = 1; $i <= $nombre_pages; $i ++) {
if( $page_actuelle <= 1 && $nombre_pages == 1 )
    echo ' ';
	else 
echo'<a href="?page=' . $i . '" class="page">'  . $i .  '</a>';
}
echo"</center>";
$precedent = $page_actuelle-1;
$suite = $page_actuelle+1;
echo'<br>';
 
if( $page_actuelle <= 1 && $nombre_pages != 1 ) // Si la page actuel n'est pas supérieur à 1  
echo '<p align="right"><a href="?page=' . $suite . '">Suivant</a></p>'; 
 
else if( $page_actuelle ==  $nombre_pages && $nombre_pages != 1 ) // Si on n'est pas à la dernière page 
echo '<p align="left"><a href="?page=' . $precedent . '">Précedent</a></p>';
 
else if( $page_actuelle <= 1 && $nombre_pages == 1 ) // Si c'est une seule page  
echo '';
 
else // Si on est ni au premier ni au dernier
echo '
<center>
<table border="0" width="100%">
    <tr>
        <td width="30%"><a href="?page=' . $precedent . '">Précedent</a></td>
        <td width="40%">&nbsp;</td>
        <td align="right" width="30%"><a href="?page=' . $suite . '">Suivant</a></td>
    </tr>
</table>
</center>'; 
 
 }	
 
	if(!empty($dossier)) {
	sort($dossier); // pour le tri croissant, rsort() pour le tri décroissant
	echo "<p id=\"titre\">Liste des autres dossier de la même catégorie</p> \n\n";
 
		foreach($dossier as $lien){
			echo "<li><a href=\"$dir_nom/$lien/\">$lien</a></li>";
		}
 
}	
?>
Que puis-je changer dans ce code ci-dessus pour gagner en mémoire php sur mon serveur mutualisé


Le code qui reçois la variable pour les téléchargements dans le ficher audio.php est:

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
<?php
//recuperation de ma variable 
$chemin = ($_GET['telecharge']); 
$nom_file = "../../../compteurs/$chemin.txt";
$texte = "1";
if (file_exists($nom_file)) {
$monfichier = fopen('../../../compteurs/'.$chemin.'.txt', 'r+');
$telec = fgets($monfichier); // On lit la première ligne (nombre de téléchargement)
$telec++; // On incrémente la variable 
fseek($monfichier, 0); // On remet le pointeur au début du fichier
fputs($monfichier, $telec); // On écrit la nouvel valeur dans le fichier" cpt.txt"
fclose($monfichier);
}
else {
// création du fichier
$f = fopen($nom_file, "wb");
// écriture
fputs($f, $texte );
// fermeture
fclose($f);
}
 
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($chemin));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($chemin));
readfile($chemin);
exit;
?>
à noter que ce code ne permet pas de morceler le fichier pour le téléchargement or si j'enlève le "audio.php?telecharge=" les fichier se télécharge avec fonction reprise et en plusieurs morceaux (avec internet download manager).
Comment faire pour que mon fichier audio.php autorise le téléchargement en morceau avec fonction reprise?
Merci!

Ci-joint une image de la saturation de mon serveur
Nom : site sature.jpg
Affichages : 240
Taille : 113,2 Ko