11496 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
sous environnement joomla 2.5 et en cours de mise en place d'un menu basé sur doc.xml écrit à la volée sur premiere connexion de session puis récupéré pour écriture de menu... Tout fonctionne parfaitement en local (MAMP). Lors de la mise en ligne, mon serveur n'en veut plus et me renvoie des erreurs si je lui envoie

file_put_contents("".$this->baseurl."/templates/template_xxx/arbo.xml",$xml);


il me répond :
Warning: file_put_contents() [function.file-put-contents]: Unable to access /nouveau/templates/template_xxx/arbo.xml in /home/clients/xxx.com/http/nouveau/templates/template_xxx/index.php on line 170

Warning: file_put_contents(/nouveau/templates/template_xxx/arbo.xml) [function.file-put-contents]: failed to open stream: No such file or directory in /home/clients/xxx.com/http/nouveau/templates/template_xxx/index.php on line 170.

Si je lui donne
file_put_contents("templates/template_xxx/arbo.xml",$xml);

ou pire
file_put_contents("http:www.xxx.com/templates/template_xxx/arbo.xml",$xml);

idem

Comment puis-je faire en sorte qu'il reconnaisse les dossier et fonctionne en ligne comme il le fait en local?
Bonjour,

Alors je ne m'y connais pas trop en Joomla, en revanche ton problème est en fait au niveau de l'url. Effectivement, les chemins absolus tels que http://www.tonsite.com/home/template etc... sont à bannir.

En fait il faudrait que tu regardes sur ton serveur l'arborescence de ton site pour voir si par erreur tu ne l'aurai pas inclue dans un sous dossier tel que tonsite.com/home/tonprojet/template... cela arrive parfois lors d'une mauvaise manip FTP. après as tu essayer l'url relative:

file_put_contents("../templates/template_xxx/arbo.xml",$xml);


ça peut être suffisant, à essayer Smiley cligne

Tiens nous au courant
Salut Peter,
merci de ta réponse, en effet, il devait bien y avoir un truc dans mes urls qui cognait. J'ai revérifier mais n'ai rien vu de bug, j'ai donc essayé de le mettre directement au meme niveau que mon index sans chemin relatif et cela fonctionne... ?... Bref, par contre, il s'est mis maintenant a me mettre des erreurs sur mes foreach

...
$string=file_get_contents("arbo.xml");
$data = new SimpleXMLElement($string);
for ($i = 0; $i <= $_SESSION['RootCategories']; $i++) {
	$menu .= '<li><a href="index.php/component/virtuemart/'.$data->category[$i]->slug.'">'.$data->category[$i]->name;
	$menu .= '<ul class="menuderoulant2">';
   	foreach ($data->category[$i]->catlevel1 as $item){

...


me renvoie

Warning: Invalid argument supplied for foreach() in...

Ce que j'ai du mal à discerner est que
1 - la meme page fonctionne parfaitement en local
2 - le message de warning n'empeche pas le code de s'executer correctement puisque juste en dessous de mon abominable message d'erreur, mon menu s'affiche tout à fait bien!...

Un idée?
Je pense que c'est encore un problème d'url, as tu vérifié ton arborescence au niveau de ton serveur?
Si en local cela fonctionne mais sur le serveur y a deux solutions:
1/ tu utilises des url absolues au lieu d'url relatives
2/ il peut y avoir une configuration différente de ton php.ini entre ton local et ton serveur.

Pour ton erreure du foreach, à mon avis c'est ta variable $string qui bug. c'est toujours un problème file_get_content("arbo.xml")

peux tu me donner ton arborescence de ton site sur le serveur pour voir s'il y a pas une erreure?
En te relisant, il est vrai que l'arborescence sur le site en ligne et le local est un peu différente. Le local a une arborescence normale, le "en ligne" est une refonte de site, il est a l'heure actuelle en second rideau du vieux site : le nouveau site (celui qui renvoie les erreurs) est hébergé dans un dossier temporaire /nouveau/... en attendant qu'il soit 100% opérationnel.

En ce qui concenre le dossier arbo, il ne me renvoie plus d'erreur depuis que je l'ai mis au niveau de mon index (aka xxx.com/nouveau/index.php).

Les messages de warning sur foreach continuent malgré le changement d'url en $string=file_get_contents("http://www.xxx.com/nouveau/arbo.xml");
Comme je te le disais plus haut évite les URL absolue comme "http://www.xxx.com/nouveau/arbo.xml", le jour ou ton site sera opérationnel et que tu le déplacera il faudra réécrire toutes les url, il vaut mieux un chemin relatif. ex "./arbo.xml"

as tu essayé d'utiliser le include_path qui existe depuis PHP 5 ? ce qui donnerai:

$string= file_get_contents('./arbo.xml',FILE_USE_INCLUDE_PATH);

Si ton php est d'une version antérieure tu peux toujours faire:

$string= file_get_contents('./arbo.xml',true);
Bon, donc, après recherche, paraitrait que;

...En fait ce message survient quand le programme rentre dans une boucle (foreach) qui veut parcourir un tableau (souvent le résultat d'une requête) qui est vide (Invalid argument supplied).

Un programmeur consciencieux (pointilleux ?) aurait d'abord testé si le tableau était vide avant de rentrer dans le foreach, mais il y a des tas de langages qui ne se formalisent pas pour si peu alors ce n'est pas tout à fait dans les moeurs.

D'autant que c'est juste un avertissement, et pas une erreur et que le programme fonctionne très bien comme ça.

D'autant que Joomla préconise que l'affichage des erreurs soit désactivé (cf dans l'admin : Aide, Infos système, Paramètres PHP).

suivant http://forum.joomla.fr/showthread.php?108640-Le-fameux-Warning-Invalid-argument-supplied-for-foreach%28%29

Donc un soucis récurrent sous joomla qui préconniserait éventuellement de mettre "Afficher les erreurs : on au lieu de off" lors de l'installation du systeme joomla. Le soucis est que d'un autre coté, certains plug ins ou module pourraient en avoir besoin...
Smiley biggrin
+ impossible de changer les dossiers php.ini une fois installé...
Smiley lol
Bref, je me suis servi d'un bout de code sur le htaccess directement et cela ne m'affiche plus les warnings... Un peu l'impression de mettre un pansement sur une plaie ouverte mais le résultat est la.

Merci Peter pour ton intervention qui m'aura permis de relire entre et sur les lignes.