Page 1 sur 2

Fonction qui ne renvoie rien

Posté : 20 oct. 2008, 13:19
par vieaiepie
Bonjour,

J'ai un petit ou plus gros soucis et je trouve pas de solution depuis plusieurs jours que je cherche.

J'ai une fonction: (extrait simple):

Code : Tout sélectionner

function mafonction($param) { $cpt=$param; $cpt=$cpt+1; echo "<br>***".$cpt."***"; return $cpt; }
Appeler de cette facon:

Code : Tout sélectionner

$retour=-1; $retour=mafonction(11); echo "<br>###".$retour."###";
J'ai bien l'affichage du echo qui se trouve avant le return dans la fonction :
***12***"
Mais l'echo à la sortie de la fonction donne:
###-1###
Les * et # etant mis pour bien différencier les echos.
Biensur, ma fonction ne fait pas que ca, elle est complexe, mais ca change rien au problème.

Avant, elle marchait tres bien, mais depuis que j'ai changé de serveur (je suis maintenant sur un kimsufi d'ovh) certaine fonctionne se comporte bizarement. Y'a t'il une configation de php particulier pour ca?

Merci à tous ceux qui prendront le temps de m'aider.

Posté : 20 oct. 2008, 13:34
par Victor BRITO
Simplifie ta fonction comme suit :
function mafonction ($param)
{
  return ++ $param;
}
que tu pourras appeler comme suit :
$retour = mafonction (11);
echo $retour;
Soit tu utilises un echo dans ta fonction (auquel cas faire un echo d'une fonction pareille est superflu) soit tu utilises return pour retourner quelque chose.

Posté : 20 oct. 2008, 13:51
par vieaiepie
Re

Le code joint est un code simple, mais la fonction n'a pas le but de faire un ++ , mais elle fait plein de truc.

J'ai d'autres fonction qui ne renvoie rien !!!


Tu dit "soit un echo, soit un return", tu veux dire si il y a un echo dans une fonction, le return ne se fait pas?

De plus, mes echos ici sont la que pour debuger et montrer que la fonction n'envoie pas la bonne vaaleur !!!!

Posté : 20 oct. 2008, 14:00
par Victor BRITO
Si tu as un echo dans une fonction, tu as besoin de faire un return, puisque la fonction retourne ce qui suit l'echo.
function foo ()
{
  echo 'bar';
}
foo (); // Affiche bar

Posté : 20 oct. 2008, 14:04
par vieaiepie
Si tu as un echo dans une fonction, tu as besoin de faire un return, puisque la fonction retourne ce qui suit l'echo.
Mais la, la fonction ne retourne pas ce qui suit l'echo puis que j'ai -1 !!!! :(

Je perds du temps sur un petit truc de rien du tout, vraiment, je ne comprend pas !!!

Ma fonction en fait crée des enregsitrement dans une bdd en fonction d'un fichier texte, et renvoie le nombre de "cas" traité !!!

puis en focntion du nombre , la suite n'excute pas la meme chose !! donc quand on a toujours -1 , ca plante la suite de mon fichier php !!!!! grrrrrrr snifffffffffffff

Posté : 20 oct. 2008, 14:15
par sadeq
Sans perdre du temps, voici la correction de ta fonction où l'erreur était tout simplement sur un $ mal placé dans l'instruction return:
function mafonction($param) {
  $cpt=$param;
  $cpt=$cpt+1;

  echo "<br>***".$cpt."***";
return $cpt;
}

Et pour appeler cette fonction :
$retour = mafonction(11);
echo "<br>### ".$retour." ###";
Remarque: Il faut savoir que la fonction peut à la fois afficher par un echo et retourner une valeur, il suffit qu'elle ait une instruction return.

Posté : 20 oct. 2008, 14:25
par vieaiepie
bonjour sadeq

Excuse moi, mais c'est un mauvais copier collé, le $ etant mis à la bonne place dans le code d'origine.

Posté : 20 oct. 2008, 18:53
par caroube
Il ne s'agit bien sûr pas d'un problème de syntaxe PHP comme semblent le croire un certain nombre des personnes qui ont cru comprendre ton problème et qui t'ont (gentiment) répondu à côté.

Là, ça sent le PHP mal compilé, mal installé ou mal configuré. Ca ne sent même pas un problème de php.ini parce que je vois pas pourquoi un retour de fonction se perdrait en route. Mais fais voir ton php.ini, on ne sait jamais. Et indique ta version de PHP.

Posté : 20 oct. 2008, 19:04
par zeus
Pour aller dans le sens de caroube, un script qui fonctionnait et qui ne fonctionne plus, c'est surement un soucis de configuration.

Et vu ce que tu nous donnes comme détails, ça ne semble pas un soucis de syntaxe.
Est-ce qu'il t'es possible de nous donner plus de détail sur le contenu de la fonction ? Je soupçonnes un soucis de configuration ou une différence de version de PHP.

Posté : 20 oct. 2008, 19:46
par vieaiepie
Bonsoir

Merci pour vos reponses, j'ai mieux l'impression d'etre comprise maintenant.

La version de phop est : PHP Version 4.4.2

Le php.ini (je pense pas que ca puisse venir de la !!!)


Code : Tout sélectionner

[PHP] engine = On short_open_tag = On asp_tags = Off precision = 12 y2k_compliance = On output_buffering = Off zlib.output_compression = Off implicit_flush = Off unserialize_callback_func= serialize_precision = 100 allow_call_time_pass_reference = On safe_mode = Off safe_mode_gid = Off safe_mode_include_dir = safe_mode_exec_dir = safe_mode_allowed_env_vars = PHP_ safe_mode_protected_env_vars = LD_LIBRARY_PATH disable_functions = disable_classes = expose_php = On max_execution_time = 30 ; Maximum execution time of each script, in seconds max_input_time = 60 ; Maximum amount of time each script may spend parsing request data memory_limit = 8M ; Maximum amount of memory a script may consume (8MB) error_reporting = E_ALL & ~E_NOTICE display_errors = on display_startup_errors = Off log_errors = Off log_errors_max_len = 1024 ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On track_errors = Off variables_order = "EGPCS" register_globals = Off register_argc_argv = On post_max_size = 8M gpc_order = "GPC" magic_quotes_gpc = On magic_quotes_runtime = Off magic_quotes_sybase = Off auto_prepend_file = auto_append_file = default_mimetype = "text/html" doc_root = user_dir = extension_dir = "./" enable_dl = On file_uploads = On upload_max_filesize = 2M allow_url_fopen = On default_socket_timeout = 60 [Syslog] define_syslog_variables = Off [mail function] SMTP = localhost sendmail_from = [email protected] [Java] [SQL] sql.safe_mode = Off [ODBC] ; Allow or prevent persistent links. odbc.allow_persistent = On ; Check that a connection is still valid before reuse. odbc.check_persistent = On ; Maximum number of persistent links. -1 means no limit. odbc.max_persistent = -1 ; Maximum number of links (persistent + non-persistent). -1 means no limit. odbc.max_links = -1 ; Handling of LONG fields. Returns number of bytes to variables. 0 means ; passthru. odbc.defaultlrl = 4096 ....
C'est en gros le php.ini par default du serveur. J'ai pas recompilé php, ni changer de version , c'est celle d'origine !!!

Posté : 21 oct. 2008, 09:46
par caroube
Sous quel OS tu tournes ? Windows ou Linux ? Et si sous Windows, avec Apache ou IIS ?
Est-ce qu'il s'agit d'une installation toute neuve ou d'une mise à jour ?
Dans le cas d'une mise à jour, est-ce qu'il n'y aurait pas un ancien fichier qui trainerait ailleurs, dans un autre répertoire (ex : j'ai eu des pbs de version une fois parce qu'il y avait un phpmysql.dll qui trainait dans windows/system32) ? Jette un coup d'oeil sur le path
Est-ce que tu as les mêmes problèmes avec le mode CGI et le mode ISAPI ? (pense à vérifier dans phpinfo que c'est le bon mode qui est actif, et éventuellement reboote)

Posté : 21 oct. 2008, 09:52
par vieaiepie
Bonjour Carouble

Voici les reponses a tes questions:
- Installation toute neuve
- OS: Linux Red hat

Deja rebooter mais ca change rien.

Je cherche depuis 3 mois et pour l'instant pas d'explication :s

Posté : 21 oct. 2008, 10:12
par sadeq
Et si tu postais ta fonction telle quelle, cà serait plus simple au lieu de tourner en rond.

Posté : 21 oct. 2008, 11:46
par caroube
@sadeq
Je crois qu'on a la fonction depuis le début. Et je crois aussi que ce n'est pas un problème de fonction ou de syntaxe PHP. Vieaiepie n'a pas l'air d'être une débutante en PHP qui ne sait pas faire la différence entre un echo et un return. Je pense aussi qu'il est temps de lire vraiment ce qu'elle pose comme question : une variable n'est pas modifiée par un return d'une fonction alors qu'elle devrait l'être. Et ceci n'est pas lié à une fonction particulière.

@vieaiepie
Est-ce que tu peux passer en mode CGI ou ISAPI ?
Et si tu mets la 4.4.9 ?
Et si tu mets une V5 ?

Posté : 21 oct. 2008, 13:14
par vieaiepie
Merci caroube de me prendre au sérieux. En effet, ce n'est pas un probleme de syntaxe, je developpe en php depuis maintenant 5 ans, la journée à mon boulot et le soir pour une asso qui a une gros site internet, et en plus, tous fonctionnait correctement avant de changer de serveur .
Si je questionne sur ce probleme, c'est que vraiment je ne trouve pas la solution, j'ai pas pour habitude de venir poster pour des problemes de syntaxes.

La fonction comme d'autres qui ne fonctionnent pa,s est bien trop complexe pour la poster, elle fait 300 lignes, alors inutile de rentrer dans les détails. Et en la limitant au quelques lignes ecrites ci-dessus , la fonction ne renvoie toujours rien !!!

Je vais voir ce soir pour passe en CGI ou ISAPI, et peut etre meme passer en php5. Je vous tiens au courant.

Marie.