Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/02/2011, 14h51   #1
Invité de passage
 
Inscription : juin 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 4
Points : 0
Points : 0
Par défaut Temps d'éxecution de la fonction copy

Bonjour,

Je vous explique un peu le contexte :
J'ai une page html (ne tournant qu'en local) contenant une balise audio.
J'aimerais copier un fichier du disque dur vers les répertoires accessibles par le code html pour permettre à cette balise audio de le lire.

Voilà ce que j'ai écrit :
Code :
1
2
3
4
5
6
7
8
<?php
	if(!copy('D:/Logiciels/aa.mp3','a/aa.mp3'))
		echo "erreur copy";
?>
 
<audio src="a/aa.mp3" controls="controls">
	fail
</audio>
Lorsque la fonction copy n'est pas présente et que je fait un copier/coller du fichier à la main, la balise audio fonctionne correctement.
Avec la fonction copy, la copie a bien lieu, mais la balise audio agit comme si le fichier n'existait pas.
J'ai tenté de mettre un sleep(1); après le if et la balise audio n'a plus de problème.

J'imagine que ça vient du fait que la fonction copy n'a pas terminé lorsque la balise audio tente de lire le fichier. D'après vous, c'est bien ça ?
Si oui, comment faire pour savoir quand la fonction copy a terminé ? Ou comment faire quelque chose de plus élégant que le sleep ?
Zagzdreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 15h20   #2
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 139
Points : 2 884
Points : 2 884
Etant donné que la balise audio est gérée du côté du navigateur, et qu'à ce moment précis le serveur a déjà finit son boulot, j'en conclu que ton problème n'a pas de rapport avec le temps d'exécution de la fonction copy (bien que tout ce que tu racontes laisse penser le contraire )

Aussi, ton code devrait s'imbriquer de cette manière :

Code :
1
2
3
4
5
6
7
8
 
<?php if(copy('D:/Logiciels/aa.mp3','a/aa.mp3')): ?>
 
<audio src="a/aa.mp3" controls="controls">
   Votre navigateur ne supporte pas la lecture de fichiers audio.
</audio>
 
<?php endif; ?>
Si la balise audio s'affiche cela signifie que la copie s'est bien déroulée.

Ou alors ya un truc que je pige pas !-)
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 15h37   #3
Invité de passage
 
Inscription : juin 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 4
Points : 0
Points : 0
Je me disais aussi que c'était bizarre comme explication ^^

J'ai testé le code que tu proposes.
La balise audio s'affiche mais les boutons restent grisés (comme dans mes tests), comme si le fichier n'était pas trouvé (j'ai aussi testé avec l'attribut autoplay, mais aucun son n'arrive).
Le fichier aa.mp3 est bien présent dans le répertoire a et j'arrive à l'ouvrir avec un lecteur audio.

Sinon j'utilise Wamp, je ne sais pas si ça peut être à l'origine d'un problème.
Zagzdreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 16h04   #4
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 139
Points : 2 884
Points : 2 884
Juste par curiosité, pourquoi est-ce que tu dois copier le fichier à chaque fois que tu veux afficher ta page ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?php 
$ok = TRUE;
if(!file_exists('a/aa.mp3'){
    $ok = copy('D:/Logiciels/aa.mp3','a/aa.mp3');
}
 
if($ok){
?>
<audio src="a/aa.mp3" controls="controls">
   Votre navigateur ne supporte pas la lecture de fichiers audio.
</audio>
<?php } ?>
Je ne pense pas que Wamp ait un rapport avec le souci.
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 17h39   #5
Invité de passage
 
Inscription : juin 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 4
Points : 0
Points : 0
Citation:
Envoyé par ThomasR Voir le message
Juste par curiosité, pourquoi est-ce que tu dois copier le fichier à chaque fois que tu veux afficher ta page ?
En fait j'ai un projet étudiant où je dois programmer un "media center" (enfin de quoi lire de la musique, des vidéos et visionner des photos) en utilisant les nouveautés de HTML5.
C'est un truc qui tournera uniquement en local.
Pour la musique, je veux pouvoir lire des chansons n'importe où sur le disque dur, le problème c'est qu'en HTML (et donc avec la balise audio) je n'ai pas accès à tout le disque dur. Comme php le peut, j'avais pensé copier la chanson que l'on souhaite lire dans un répertoire temporaire accessible au code HTML, qui serait vidé à la fin de la lecture.
Le bout de code que j'ai montré c'est juste un test, j'essaye de trouver une solution sur un exemple simple pour ensuite l'appliquer au projet.

J'ai testé ce que tu as proposé.
Au premier chargement (ou plutôt lorsque le fichier n'est pas encore dans le répertoire), pareil que précédemment (balise audio avec boutons grisés, mais en allant voir dans le répertoire le fichier a bien été copié).
Au deuxième chargement de la page (lorsque le fichier est déjà présent dans le répertoire), ça fonctionne. Même si comme avec le sleep, je ne comprends pas vraiment pourquoi ^^
Zagzdreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 21h40   #6
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 139
Points : 2 884
Points : 2 884
D'après moi tu devrais avoir tes fichiers médias directement dans le site web, et non pas en dehors. Il faut imaginer que ton application ne serait pas forcément sur ton ordinateur.

Les fichiers audio / vidéo ca pèse lourd, les copier puis les supprimer à chaque lecture d'une page par un internaute ca rend ton application très instable et non viable (ce qui pourrait être sujet à des critiques par tes profs).

Tu pourrais prévoir une partie admin où télécharger les fichiers, avec un outil simple à installer comme Plupload. Au pire n'en met que quelque uns pour la démo.
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 13h44   #7
Invité de passage
 
Inscription : juin 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 4
Points : 0
Points : 0
Merci d'avoir porté attention à mon problème en tout cas.

Le truc c'est que l'application n'est destinée à tourner qu'en local.
Mais je pense que je vais quand même faire comme tu dis, mettre les fichiers dans les dossiers du site avec la possibilité de rajouter des fichiers/dossiers directement depuis l'interface.
Zagzdreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h16.


 
 
 
 
Partenaires

Hébergement Web