JeuWeb - Crée ton jeu par navigateur
[Résolu] include_once() - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] include_once() (/showthread.php?tid=199)

Pages : 1 2


[Résolu] include_once() - Ludvig - 01-07-2008

Hello

j'utilise pas mal beaucoup include_once mais dépuis que j'ai déménagé mon jeu (d'un linux à un WAMP) j'ai une erreur :

Code PHP :
<?php 
Fatal error
: Call to undefined function getTileTimeGrid() in C:/wamp/www/jeu/comp/do/getSemiRandomDirection.php on line 9
(enfin c'est des backslashes et pas de "/" mais voila)


Le truc c'est que j'utilise ce procedé vraiment souvent pour charger un fonction quand j'en ai besoin et sur l'ancien serveur ça marchait nickel...


J'ai évidemment cette ligne là :
Code PHP :
<?php 
include_once 'comp/do/getTileTimeGrid.php';
dans le fichier /getSemiRandomDirection.php


J'imagine que (comme d'hab) les specs php ont changé mais comment
savoir si il y a des erreurs sur les includes, enfin des erreurs qui
entraine des erreurs comme ça ou bien si quelqu'un a une idée je suis
carrément preneur...


Merci à eux qui savent, et à ceux qui s'intéressent !

/Lud
ps. la fonction qu'il ne trouve pas est la suivante :
Code PHP :
<?php 
function getTileTimeGrid($x1,$y1,$x2,$y2,$zpos,$dpos,$walktype,$extrawalkcost=0)



RE: include_once - Bladrak - 02-07-2008

Hello !

Est-ce que tu peux spécifier la version de PHP du serveur ? Ça a pas mal changé entre la 4 et la 5.
Sinon, tu peux essayer de regarder dans la doc officielle. Pour include_once j'ai ça : http://fr2.php.net/manual/fr/function.include-once.php

Avec entre autres ce changement en passage à PHP 5 :
Citation :Ce comportement a changé en PHP 5 - le chemin est normalisé d'abord, donc, le fichier C:\PROGRA~1\A.php est reconnu comme étant identique au fichier C:\Program Files\a.php et le fichier ne sera inclus qu'une seule fois.

Au vu des PATH utilisés, j'aurais fait appel à la fonction :
Code :
require_once(dirname(__FILE__).'/getTileTimeGrid.php') or die ('Fichier introuvable');
dirname(__FILE__) te renvoie le chemin relatif de l'endroit où est situé le fichier dans lequel est située cette fonction, sans le nom du fichier (grosso-modo le repertoire parent). Ça améliorera la portabilité de ton code.
Après je préfère require_once surtout pour des raisons d'habitudes mais ça chacun son choix Wink


RE: include_once - keke - 02-07-2008

En remplacant :
Code :
include_once 'comp/do/getTileTimeGrid.php';
par
Code :
include_once './comp/do/getTileTimeGrid.php';

Ca donne quoi ?


RE: include_once - Ludvig - 02-07-2008

Merci pour ces réponses, je vais potasser les docs et essayer le modif de KeKe ce soir


RE: include_once - QuentinC - 02-07-2008

Rremarque troublante : la fonction qu'il ne trouve pas se situe dans ce fichier inclus, si j'ai bien compris. Tu n'as que le message d'erreur comme quoi la fonction n'existe pas, ou bien tu as aussi l'erreur comme quoi le fichier n'a pas pu être inclus ? Parce que si tu ne l'as pas, c'est bizarre, ça signifierait que le fichier a été parsé mais qu'il y a eu un problème après. Sinon ben c'est simplement mauvais chemin, mais je trouve ça un peu bizarre parce que personnellement je n'ai jamais été embêté entre / et \ en passant de easyphp ou wamp aux divers hébergements que j'ai déjà eu jusqu'à maintenant.


RE: include_once - Ludvig - 02-07-2008

Pire encore (enfin si je me souviens bien), si je change le include_once
contre un include alors le serveur couine parce que la fonction est déjà déclaré...


RE: include_once - Bladrak - 02-07-2008

T'as essayé avec un require_once ?


RE: include_once - QuentinC - 02-07-2008

Citation :Pire encore (enfin si je me souviens bien), si je change le include_once
contre un include alors le serveur couine parce que la fonction est déjà déclaré...

Dans ce cas j'ai peut-être une idée. A utiliser en dernier recours parce que je ne suis pas sûr que ce soit très optimisé... le lieux serait de placer des die à divers endroits pour voir si éventuellement ça plante au milieu du script.

Code :
<?php
if (!function_exists('testFunction')) {
function testFunction () {
// ... code ...
}
}
?>



RE: include_once - Ludvig - 02-07-2008

Alors là ...

J'était en train de tester tout les solutions proposés quand j'ai remarque "l'erreur" ...

Vous dévinerez jamais :grrr:

Pour les curieux je vous laisse le code avec l'horrible erreur, pour les autres le spoiler est plus bas.

Code PHP :
<?

include_once 'getTileWalktimeArray.php';
include_once
'getMapPart.php';

function
getTileTimeGrid($x1,$y1,$x2,$y2,$zpos,$dpos,$walktype,$extrawalkcost=0)
{
$arr=getMapPart($x1,$y1,$x2,$y2,$zpos,$dpos);
$at=getTileWalktimeArray($walktype);
for(
$u=$x1;$u<=$x2;$u++)
for(
$v=$y1;$v<=$y2;$v++)
$r[$u][$v]=$at[$arr[$u][$v]]+$extrawalkcost;
return(
$r);
}
?>
















Spoiler : (j'ai mis le texte en blanc, sélectionner pour voir le bug)
Citation :Le script commence avec un <? et pas avec un <?php ...

Merci à tout le monde quand même et espérons que ce truc tout con servira pour quelqu'un d'autre Smile

++

/Lud


RE: include_once - Bladrak - 02-07-2008

Pas mal Big Grin