Pages :
(reprise du message précédent)

C'est préférable !

Chez nous, il est 19h30, alors je vais rejoindre mes charentaises.

Je te tiens au courant.

A plus
Bonjour,

J'ai trouvé un site expliquant l'exécution périodique d'un script : Site.

N'aimant pas les sources trop complexes, j'ai donc opté pour une script php qui rafraîchit périodiquement les playlist's :

(Votre éditeur refuse de prendre le code en php !)

<?php
	(Autres fonctions)
	$test = false;
	$marche = 1;
	$fichier_marche = "./marche";
	$file = fopen($fichier_marche,"w");
	fwrite($file,"ErySoft 2010");
	fclose($file);
	while($marche == 1)
	{
		$nom_fichier = "./compteur.txt";
		if (!file_exists($nom_fichier)) {$nombre = 0;}
		else
		{
			$file = fopen($nom_fichier,"r");
			$nombre = fgets($file,100);
			fclose($file);
		}
		$nombre += 1;
		$file = fopen($nom_fichier,"w");
		fwrite($file,$nombre);
		fclose($file);
		if ($test == true) {sleep(15);}
		else
		{
			playlist_alice_cooper();
			playlist_angel_city();
			playlist_david_bowie();
			playlist_elo();
			playlist_foreigner();
			playlist_green_day();
			playlist_king_crimson();
			playlist_procol_harum();
			playlist_sahb();
			sleep(3600);
		}
		if (!file_exists($fichier_marche)) {$marche = 0;}
	}
	echo("Termine");
?>


En mettant la variable $test à true, j'ai pu tester le bon fonctionnement de cette source. Le premier essai a été une catastrophe, puisque je n'avais pas mis la possibilité de sortir de la boucle (while(1)). J'ai dû aller sur le site d'hébergement pour arrêter le code qui tournait en boucle. J'avais supprimer le fichier via le ftp, mais celui-ci continuait de tourner, et d'incrémenter le compteur. Aurais-tu une explication à me donner ? Je suppose que l'application tournait en RAM, mais dans ce cas, comment la stopper ? J'ai dû supprimer le répertoire en bidouillant le CHMOD. Smiley biggol
Modifié par erysoft (10 Sep 2010 - 16:33)
Modérateur
À mon avis, le serveur devrait arrêter par lui-même l'exécution des scripts après une période de temps (timeout). En tout cas, c'est le cas en Coldfusion.

Comme je suis en vacances, je n'ai pas vraiment la tête à analyser ton code en détails, mais est-ce que je me trompe ou bien tu fais une boucle infinie pour mettre à jour continuellement tes playlists? Si c'est le cas, je conseillerais plutôt de le faire avec des tâches planifiées (voir CRON). Je serais plutôt étonné que le serveur PHP fasse persister une boucle qui ne se termine théoriquement jamais.

Je ne suis pas développeur PHP (mais Coldfusion), alors je ne sais pas trop comment le serveur se comporte vraiment, ni comment arrêter manuellement l'exécution d'un script. Mais en tout cas, je peux te dire que je ne ferais pas la mise à jour des playlists de cette manière. Smiley cligne
Modifié par Tony Monast (14 Sep 2010 - 02:52)
Bonjour,

En effet, c'est la cas. Le serveur interrompt l'exécution vers 3h00 du matin, heure Française. J'ai écrit un mail à l'hébergeur, mais il ne semble pas intéressé par le problème Smiley fache .

J'ai lu l'article au sujet des CRON ... j'avoue que cela reste assez obscure. Après maintes essais, je pense que l'extraction du lien à la demande, reste la meilleure solution. Mais j'ai toujours besoin d'un proxy à cause des sécurités du sandbox (flash).

Si tu me parles de Coldfusion, c'est du chinois pour moi Smiley biggol . Je connais l'assembleur, le Pascal, le PLM80, le VB6, le C, l'html, le javascript, le php, l'actionscript flash, un peu le css ... alors parfois, je me mélange les pinceaux Smiley eyecrazy .

Profite bien de tes vacances, j'ai le temps. Smiley cligne
Modérateur
erysoft a écrit :
Bonjour,
En effet, c'est la cas. Le serveur interrompt l'exécution vers 3h00 du matin, heure Française. J'ai écrit un mail à l'hébergeur, mais il ne semble pas intéressé par le problème Smiley fache .


Comme je le mentionnais, il serait plutôt étonnant qu'on puisse faire tourner en boucle un script PHP sans risque que celui-ci s'arrête. Techniquement, c'est sans doute possible en configurant le serveur en conséquence, mais d'une façon ou d'une autre, je ne trouve pas ça pertinent de faire une boucle pour exécuter toujours le même script. Une tâche planifiée reste ce qu'il y a de mieux.

Concernant ton hébergeur, il est possible qu'à 3h00 du matin il fasse de la maintenance (backup, mises à niveau, redémarrage), ce qui pourrait expliquer l'arrêt du script à cette heure précise.

Si j'étais hébergeur, je m'assurerais aussi que les scripts ne s'exécutent pas indéfiniment comme tu essayes de le faire, alors il est possible aussi qu'ils ne s'intéressent pas à ton problème qui n'en ai pas forcément un. Smiley cligne

Pour te simplifier la vie, et comme tu aimes bien te débrouiller et expérimenter des choses, tu pourrais te créer une tâche planifiée sur ton propre ordinateur à la maison, et cette tâche appellerait une page cachée sur ton site qui met à jour tes playlists. Évidemment, ton ordinateur devra rester en fonction toute la journée. Pour que ce soit plus fiable, tu peux coupler les deux solutions :

- Mise à jour à chaque heure de tes playlists avec une tâche planifiée sur ton propre ordinateur
- Mise à jour de la playlist à chaque utilisation, si celle-ci est expirée

Donc, si ton ordinateur est fermé, ton système de mise à jour continue de fonctionner sur demande.

Il reste qu'une tâche planifiée sur le serveur lui-même est préférable.

erysoft a écrit :
Mais j'ai toujours besoin d'un proxy à cause des sécurités du sandbox (flash).


Ma spécialité n'est pas le Flash, quoique je commence à me débrouiller assez bien avec Flex 3, mais de quoi parles-tu exactement lorsque tu parles du proxy et de la sécurité du sandbox de Flash? Je sais que si le site A contenant ton Flash essaye de récupérer des informations d'un fichier sur le site B, il faut placer un fichier crossdomain.xml sur le site B afin d'autoriser le site A à récupérer les informations. J'ai toutefois l'impression que tu parles d'autre chose?

erysoft a écrit :

Si tu me parles de Coldfusion, c'est du chinois pour moi Smiley biggol . Je connais l'assembleur, le Pascal, le PLM80, le VB6, le C, l'html, le javascript, le php, l'actionscript flash, un peu le css ... alors parfois, je me mélange les pinceaux Smiley eyecrazy .


C'est normal, je crois que nous ne sommes que deux sur Alsacreations.com à connaître et utiliser le Coldfusion. Les autres utilisent principalement PHP. Smiley ohwell

erysoft a écrit :

Profite bien de tes vacances, j'ai le temps. Smiley cligne


Oh que oui! Smiley biggrin
Modifié par Tony Monast (14 Sep 2010 - 14:25)
Tony Monast a écrit :
Ma spécialité n'est pas le Flash, quoique je commence à me débrouiller assez bien avec Flex 3, mais de quoi parles-tu exactement lorsque tu parles du proxy et de la sécurité du sandbox de Flash?


Je te rassure, moi non plus ! Avec Flex 3, il n'est pas possible d'inclure ou d'appeler le lien d'une page. Si je prends l'exemple suivant :

"http://cid-xxxxxxxxxxxxxxxx.office.live.com/self.aspx/Musique/David^_Bowie/David^_Bowie^_-^_Ziggy^_Stardust.mp3"

Cette dernière ne correspond pas à l'adresse directe du fichier mp3, mais à la page contenant celui-ci. Le sandbox de Flex 3 va refuser le cross-domain.

function chargement_page(page:String):void
{
	var adresse:URLRequest;
	if (etat_chargement_page == true) {return};
	etat_chargement_page = true;
	if (application_locale == true) {adresse = new URLRequest("http://" + page);}
	else {adresse = new URLRequest(proxy + page);}
	var chargeur:URLLoader  = new URLLoader();
	var format = URLLoaderDataFormat.TEXT;
	chargeur.addEventListener(Event.COMPLETE, fin_chargement_texte);
	chargeur.addEventListener(IOErrorEvent.IO_ERROR, erreur_chargement);
	chargeur.addEventListener(SecurityErrorEvent.SECURITY_ERROR, erreur_securite);
	chargeur.dataFormat = format;
	chargeur.load(adresse);
}


Voici ci-dessus, le code que j'utilise pour charger au format text/xml, le contenu d'une page. En mode développement, il n'y a pas de problème, mais une fois compilé, c'est une autre histoire. A ce que j'ai pu comprendre, il faut configurer les accès aux domaines utilisées, mais je n'ai pas vraiment compris comment faire. En utilisant un proxy, le sandbox ne déclenche pas une SECURITY_ERROR, puisqu'il n'a pas les moyens de tester l'adresse.

Par contre, le lien direct du fichier mp3 ne pose pas de problème.

function creation_son(url:String):void
{
	var requete:URLRequest = new URLRequest(url);
	texte_adresse.text = url;
	son.addEventListener(Event.COMPLETE, fin_chargement_zic);
	//son.addEventListener(Event.ID3, id3Handler);
	son.addEventListener(IOErrorEvent.IO_ERROR, erreur_chargement);
	son.addEventListener(ProgressEvent.PROGRESS, progression_chargement_zic);
	son.addEventListener(SecurityErrorEvent.SECURITY_ERROR, erreur_securite);
	son.load(requete);
	effet.volume = position_volume.width / 100;
	effet.pan = 0;
	creation_canal(0);
	timer_zic = new Timer(300);
	timer_zic.addEventListener(TimerEvent.TIMER, progression_ecoute_zic);
	timer_zic.start();
	etat_pret = true;
}


Donc, dans la liste xml, je ne mets pas le préfixe "http://" aux liens, puisque le proxy s'occupe de récupérer le code text/xml en ajoutant ce préfixe, et en renvoyant au player le code de la page avec l'entête. Cela peut paraitre un peu tordu, mais c'est ainsi.

J'espère que tu vas me comprendre
Je te croyais en vacances !

En fait, je n'avais pas utilisé de fichier xml, mais j'avais incorporé le cross-domain directement dans la balise <objet>.

		<div align="center">
			<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="480" height="304" id="eryskyplayer" align="middle">
				<param name="allowScriptAccess" value="*" />
				<param name="allowFullScreen" value="false" />
				<param name="movie" value="./eryskyplayer.swf?liste=./liste.xml" />
				<param name="quality" value="high" />
				<param name="bgcolor" value="#ffffff" >
				<param name="flashvars" value="liste=./liste.xml">
				<embed src="./eryskyplayer.swf" quality="high" flashvars="liste=./liste.xml" bgcolor="#ffffff" width="480" height="304" name="eryskyplayer" align="middle" allowScriptAccess="*" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer_fr" />
			</object>
		</div>


Peut-être aurais-je dû changer le DOCTYPE
Modérateur
Je pense que tu n'as pas tout à fait compris le fonctionnement du fichier crossdomain.xml. Tu dois le mettre à la racine du site où les données se trouvent.

Disons que tu as les deux noms de domaine suivants : source.com et cible.com.

1. Sur source.com, tu mets ton fichier swf dans une page HTML.
2. Ton fichier swf va chercher des données sur cible.com
3. À la racine de cible.com, tu dois mettre un fichier crossdomain.xml qui autorise source.com à venir chercher les données via Flash.

Je t'invite à lire plus attentivement les tutoriaux sur crossdomain.xml.
Modifié par Tony Monast (14 Sep 2010 - 21:13)
Je n'avais pas lu l'article en entier, ce qui explique cela.

Je ferai des essais demain, mais je ne suis pas certain de pouvoir accéder à la racine des espaces.

A plus Smiley smile Smiley smile
Bonjour,

@ Tony

Je ne peux pas avoir accès à la racine du site de stockage de Skydrive, puisque c'est un portail. J'ai bien essayé de placer le fichier crossdomain dans le répertoire mère, mais une erreur de sécurité est détectée par le swf. Cette méthode doit fonctionner entre mes différents domaines, mais ce n'est pas le but recherché, puisque je sais déjà faire cela. Les flux crossdomain sont acceptés.

Pour palier cette sécurité, il était nécessaire d'utiliser un proxy. En plaçant le fichier crossdomain.xml sur la racine de mon espace, je peux maintenant appeler directement la liste.xml avec l'adresse absolue.

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="480" height="304" id="eryskyplayer" align="middle">
	<param name="allowScriptAccess" value="sameDomain" />
	<param name="allowFullScreen" value="false" />
	<param name="movie" value="http://monsite/eryskyplayer.swf" />
	<param name="quality" value="high" />
	<param name="bgcolor" value="#ffffff" />
	<param name="flashvars" value="liste=http://monsite/liste.xml&proxy=http://monsite/proxy.php" />
	<embed src="http://monsite/eryskyplayer.swf" quality="high" flashvars="liste=http://monsite/liste.xml&proxy=http://monsite/proxy.php" bgcolor="#ffffff" width="480" height="304" name="eryskyplayer" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer_fr" />
</object>


De même, je passe en paramètre l'adresse absolue du proxy qui me retourne le code de la page où ce trouve l'adresse directe du fichier mp3, ou flv.

Je pense que cela devrait fonctionner .... ou pas !
Modifié par erysoft (15 Sep 2010 - 11:56)
Le fichier crossdomain.xml n'est pas utile.

Voici le code qui fonctionne sur le portail de Blog.fr :

<object id="eryskyplayer" width="480" height="304" data="http://www.erysoft.fr/test/eryskyplayer/eryskyplayer.swf" type="application/x-shockwave-flash">
	<param name="align" value="middle" />
	<param name="allowScriptAccess" value="sameDomain" />
	<param name="allowFullScreen" value="false" />
	<param name="quality" value="high" />
	<param name="bgcolor" value="#ffffff" />
	<param name="flashvars" value="liste=http://www.erysoft.fr/test/eryskyplayer/liste.xml&proxy=http://www.erysoft.fr/test/eryskyplayer/as3xy.php" />
	<param name="src" value="http://www.erysoft.fr/test/eryskyplayer/eryskyplayer.swf" />
	<param name="name" value="eryskyplayer" />
	<param name="allowfullscreen" value="false" />
</object>


Et bien voilà la fin de ce projet. Pour ceux qui désirent utiliser cette méthode, je laisse l'adresse où vous pourrez trouver le kit complet.

ErySkyPlayer

Salut à tous.

Smiley biggol ErySoft Smiley biggol

J'avais oublié de mettre la nouvelle page en ligne. Maintenant, c'est opérationnel.
Modifié par erysoft (15 Sep 2010 - 17:51)
Pages :