Fichier texte non créé sur le serveur

Résolu/Fermé
filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024 - 25 mars 2018 à 12:00
filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024 - 26 mars 2018 à 00:17
Bonjour à tous,

Je travaille actuellement sur une nouvelle version de mon site. J'ai donc pour cela modifié un module joomla pour pouvoir faire la géolocalisation html et afficher les horaires des prières en fonction de la position. J'ai créé également une liste déroulante pour pouvoir changer la méthode de calcul et donc rafraîchir les horaires des prières.

J'ai testé tout cela en local sur mon pc et tout marchait nickel pas de pb. Je l'ai mis maintenant sur un site en ligne temporaire. Et là la géolocalisation fonctionne correctement mais pas la liste déroulante. Je me suis rendu compte que normalement j'ai une deuxième page php qui doit créer un fichier texte avec les coordonnées de position et en fait ce fichier texte n'est pas créé.

Je vais essayer d'expliquer :

J'ai une page php page1.php qui calcule les prières et affiche les horaires des prières. Dans cette page, j'ai mis du javascript pour pouvoir faire la géolocalisation et renvoyer les données (en ajax) au serveur via une page2.php qui recalcule les horaires et les renvoie sur la page1 pour l'affichage.
De même sur la page1.php il y a une fonction javascript qui se déclenche au changement dans la liste de déroulante. Dans cette fonction, je renvoie également les données (en ajax) au serveur via une page2.php qui recalcule les horaires. Par contre la page2.php crée normalement un fichier txt qui permet de stocker les coordonnées de la position. Et c'est là, où il y a un souci, le fichier txt ne se crée pas.

Voici le code de création du fichier txt de la page2.php :

$list = (isset($_GET["list"])) ? $_GET["list"] : NULL;
$filename2 = './modules/mod_islamic_prayer_time_pro/coordonnees2.txt';
$monfichier2 = fopen($filename2, 'a+');
fputs($monfichier2, $list."\r\n");
fclose($monfichier2);


Pour info, j'ai essayé de créer ce fichier directement dans la page1.php, et là le fichier est bien créé. Je ne vois pas pourquoi ça fonctionne dans la page1.php et que ça ne fonctionne pas dans la page2.php.

La seule différence est que la page2.php est appelée par l'ajax. Mais en local sur mon poste ça fonctionnait très bien.

Pourriez-vous m'aider s'il vous plait ?

Je vous remercie par avance.
A voir également:

8 réponses

yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
Modifié le 25 mars 2018 à 12:18
bonjour,
comment es-tu certain qu'il n'y a pas un problème plus tôt dans page2?
je suggère de provisoirement remplacer l'ensemble de page2 par:
$list = "bonjour";
$filename2 = './modules/mod_islamic_prayer_time_pro/coordonnees2.txt';
$monfichier2 = fopen($filename2, 'a+');
fputs($monfichier2, $list."\r\n");
fclose($monfichier2);
0
filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024
25 mars 2018 à 12:42
Bonjour,

J'ai essayé de mettre que votre code mais ça ne fonctionne pas non plus. Le fichier n'est pas créé.

Je suis sûr qu'il n'y a que la création du fichier qui pose souci, car la première fois (lors du chargement de la page avec géolocalisation), on passe bien dans la page2.php pour rafraîchir les horaires des prières à l'écran => Ca ça fonctionne bien par contre même lors du chargement normalement je crée un autre fichier coordonnnees.txt mais ce fichier n'est pas créé non plus !!

Je ne vois vraiment pas pourquoi il n'est pas créé.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
25 mars 2018 à 15:43
tu as un problème avec la creation du fichier, avec l'ouverture du fichier, ou pour écrire dans le fichier?
0
filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024
25 mars 2018 à 15:47
Je serais tenté de dire les 3.
J’ai essayé de créer le fichier, il ne se crée pas!
J’ai essayé de créer le fichier à la main avant et ensuite d’essayer d’écrire dedans en php et même chose je n’y arrive pas non plus, le fichier reste vide!

J’ai franchement du mal à comprendre!! J’ai meme essayer de mettre tous les droits sur le fichier et même chose!

J’avoue je suis à court d’idée!
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
25 mars 2018 à 15:58
si tu crées un page avec ceci, qu'obtiens-tu?
<?php
$list = "bonjour";
$dossier= "./modules/mod_islamic_prayer_time_pro";
if (is_dir ($dossier)){
    $filename2 =  $dossier . '/coordonnees2.txt';
    $monfichier2 = fopen($filename2, 'a+');
    if ($monfichier2){
        $ecrit=fwrite($monfichier2, $list."\r\n");
	if ($ecrit){
		echo $ecrit . " car ecrits";
	}
	else{
		echo "fwite NOK";
	}
        fclose($monfichier2);
    }
    else{
        echo "fopen NOK";
	print_r ($monfichier2);
	var_dump ($monfichier2);
    }
}
else{
    echo "ceci n'est pas un dossier: ".$dossier;
}
?>
0
filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024
25 mars 2018 à 17:06
Je viens bien essayer ça mais le problème qui se pose est que ma page2.php n'est censé renvoyer que du texte au format json afin d'être exploité par la page1.php

J'avais déjà essayé de faire des echo dans la page2.php mais le problème c'est que je ne vois jamais le résultat. Dans la page1.php quand je fais : un message affiche du vide alors que la console affiche vide également.

var tmp = req2.responseText;
console.log(req2.responseText);
alert(tmp);


N'y a t-il pas un moyen de débugger ?

Ou alors peut-être que je fais mal quelque chose (même certainement) mais je ne sais pas quoi.

Merci pour votre aide.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
25 mars 2018 à 17:46
si tu mets le code que je propose dans une nouvelle page php, il suffit de l’appeler à partir d'un navigateur.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
25 mars 2018 à 18:18
pour débugger la page2, il suffit de l’appeler à partir du navigateur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024
25 mars 2018 à 17:33
pour compléter mes propos voici le code que j'utilises :

template :
 
<label for="list">Méthode de calcul :</label>
	<select name="list" id="list" onchange="update();">
		<option value="1">Muslim World League</option>
		<option value="2">Islamic Society of North America</option>
		<option value="3">Egyptian General Authority of Survey</option>
		<option value="4">Umm Al-Qura University, Makkah</option>
		<option value="5">University of Islamic Sciences, Karachi</option>
		<option value="6">Institute of Geophysics, University of Tehran</option>
		<option value="7">Shia Ithna-Ashari, Leva Institute, Qum</option>
		<option value="8">Gulf Region</option>
		<option value="9">Kuwait</option>
		<option value="10">Qatar</option>
		<option value="11">Majlis Ugama Islam Singapura, Singapore</option>
		<option value="12" selected="selected">Union Organization islamic de France</option>
		<option value="13">Diyanet İşleri Başkanlığı, Turkey</option>
	</select>


page1.php, fonction update() :

 
function update()
{
          var elt,val,opt;
          elt=document.getElementById('list');
          val=elt.value;
          if(val!=='')
          {
                  alert('Vous avez sélectionnez l\'élement '+val);	
                  const req2 = new XMLHttpRequest();
	          req2.overrideMimeType("text/plain");
		  req2.onreadystatechange = function(event) {
			//XMLHttpRequest.DONE === 4
			if (this.readyState === XMLHttpRequest.DONE) {
			if (this.status === 200) 
			{
			     alert("OK");
			     var tmp = req2.responseText;
			     console.log(req2.responseText);
			     alert(tmp);
			     var json = JSON.parse(req2.responseText);
			     if (json.fajr == null){
    			         // Ne rien faire.
			     }
			     else 
			     {
				    var list = document.getElementById("modiptultimer");
				    var items = list.getElementsByTagName("li");
				    for(var i = 0, size = items.length; i< size; i++)
				    {
    				         if (i==0) 
    					 {
    						items[i].innerHTML = "Fajr: " + json.fajr;
    					 }
    					 if (i==1) 
    					{
    					        items[i].innerHTML = "Chourouk: " + json.shourouk;
    					}
    					if (i==2) 
    					{
    						items[i].innerHTML = "Duhr: " + json.dohr;
    					}
    					if (i==3) 
    					{
    						items[i].innerHTML = "Asr: " + json.asr;
    					}
    					if (i==4) 
    					{
    						items[i].innerHTML = "Maghrib: " + json.maghreb;
    					}
    					if (i==5) 
    					{
    						items[i].innerHTML = "Ishaa: " + json.isha;
    					}
				}			
			}
		} 
		else {
				alert("Status de la réponse: %d (%s)", this.status, this.statusText);
		}
	}
        }; 
 
	req2.open("GET", "./modules/mod_islamic_prayer_time_pro/page2.php" + "?list=" + val, true);
	req2.send(null);	
}
}


Voici maintenant le code de page2.php :

 
$list = (isset($_GET["list"])) ? $_GET["list"] : NULL;
if ($list)
{
// LECTURE DU FICHIER coordonnees.txt => Mais impossible de le lire et récupérer les données
$monfichier = fopen($filename, 'r+');
while(!feof($monfichier))
{
	$latitude = fgets($monfichier);
	$longitude = fgets($monfichier);
}
 
//CALCUL DES PRIERES
$url = "https://api.aladhan.com/v1/timings/".$TimeStamp."?latitude=".trim($latitude)."&longitude=".trim($longitude)."&method=".$list;		
 
// POUR TESTER LA CREATION DU FICHIER => Mais ne fonctionne pas
$filename2 = './modules/mod_islamic_prayer_time_pro/coordonnees2.txt';
$monfichier2 = fopen($filename2, 'a+');
fputs($monfichier2, $url."\r\n");
fputs($monfichier2, $list."\r\n");
 
$data = @file_get_contents($url);
$jsondata = json_decode($data,true);
if(is_array($jsondata) && $jsondata['status'] == "OK")
{
	$fajr = $jsondata['data']['timings']['Fajr'];
	$shourouk = $jsondata['data']['timings']['Sunrise'];
	$dohr = $jsondata['data']['timings']['Dhuhr'];
	$asr = $jsondata['data']['timings']['Asr'];
	$maghreb = $jsondata['data']['timings']['Maghrib'];
	$isha = $jsondata['data']['timings']['Isha'];
}
// PREPARATION ENVOI DONNEES JSON
        $tableau = array();
	$tableau['fajr'] = $fajr;
	$tableau['shourouk'] = $shourouk;
	$tableau['dohr'] = $dohr;
	$tableau['asr'] = $asr;
	$tableau['maghreb'] = $maghreb;
	$tableau['isha'] = $isha;           
	echo json_encode($tableau);


J'espère qu'avec tout cela vous pourrez voir quelque chose parce que là franchement je désespère (sachant qu'en local ça fonctionne) !!

Merci d'avance pour votre aide.
0
filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024
25 mars 2018 à 17:52
Désolé je n'avais pas compris qu'il fallait créer une nouvelle page.

J'ai fait le test et j'obtiens ceci :

ceci n'est pas un dossier: ./modules/mod_islamic_prayer_time_pro
0
filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024
25 mars 2018 à 20:10
Merci pour votre aide, effectivement le chemin du fichier était incorrect.
J'arrive maintenant à créer et écrire dans le fichier donc merci encore.

Par contre je n'arrive pas à lire le contenu du fichier, pourtant j'ai utilisé le code que vous m'avez donné :
$dossier= $_SERVER['DOCUMENT_ROOT'].'/islam/modules/mod_islamic_prayer_time_pro';
if (is_dir ($dossier))
{
	$filename =  $dossier.'/coordonnees.txt';
	$monfichier = fopen($filename, 'r+');
	if ($monfichier)
	{
                while(!feof($monfichier))
		{
			$latitude = fgets($monfichier);
			$longitude = fgets($monfichier);
		}
		fclose($monfichier);
	}
	else
	{
        	echo "fopen NOK";
		print_r ($monfichier);
		var_dump ($monfichier);
    	}
}
else{
	echo "ceci n'est pas un dossier: ".$dossier;
}


Pourriez vous m'aider également pour la lecture du fichier ?

Merci beaucoup.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
25 mars 2018 à 20:39
"je n'arrive pas à lire le contenu du fichier": message d'erreur, résultat inattendu?
comme tu ne fais rien avec $latitude et $longitude, comment peux-tu savoir que la lecture ne fonctionne pas?
0
filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024
25 mars 2018 à 20:54
Je n’ai ni message d’erreur ni résultat inattendu!
J’ai juste essayer de mettre les valeurs dans un fichier texte pour voir ce qu’elles valaient et elles sont vides!

Ces variables me servent à passer les coordonnées dans l’Api Aladhin pour le calcul des prières! (Quand on passe par la lise déroulante) et justement les horaires des prières en changeant la méthode de calcul ne sont pas rafraîchis à l’écran!!
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024
25 mars 2018 à 20:58
comme tu ne fais rien avec $latitude et $longitude, comment peux-tu savoir que la lecture ne fonctionne pas?
pourquoi ne pas faire echo des deux?
0
filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024
25 mars 2018 à 21:10
Je vais faire le test en inscrivant l’URL de l’Api où je passe la latitude et la longitude pour voir si ils sont vides ou non!

Mais vu qu’en inscrivant dans un fichier texte j’ai des valeurs vides, je pense avoir la même réponse.

Les Echo ne fonctionnent pas car le résultat attendu est du json!
0
filiplarlibe Messages postés 28 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 21 avril 2024
26 mars 2018 à 00:17
Merci pour votre aide tout fonctionne désormais.
Le problème de lecture était en fait dû à un problème d'écriture de la latitude et longitude dans le fichier.

Tout fonctionne désormais. Merci encore pour votre aide.
0