php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #12689 Problem while returning from a function
Submitted: 2001-08-10 09:50 UTC Modified: 2001-09-22 11:51 UTC
From: cmid at cmid dot fr Assigned:
Status: Closed Package: Scripting Engine problem
PHP Version: 4.0.4pl1 OS: Microsoft Windows NT
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: cmid at cmid dot fr
New email:
PHP Version: OS:

 

 [2001-08-10 09:50 UTC] cmid at cmid dot fr
I've got a problem with a little function in a test script :
I want to return a string value, that exists before returning from the function. And when I try to get back this string out of the function, the value found is 0 (zero), and definitly not the one echoed in the function...

You can see below the bugged script (you will have to suppress comments to run it) , with some 'echo' to localise the problem, the csv file I tried to analyse, the output obtained in my browser, and finally, a few lines commenting the problem...

PHP version is 4.04pl1, running with an Apache server, on a NT4 system.

<?

// Here is the script

/*
$file="D:\\wwwroot\\e_learning\\ftp\\ga_ln_en_en.csv";
$langue="en";
//list($nbl,$abv,$idls)=get_langues();
$abv=array("fr","en","de");
		// Ouverture du fichier
		if(isset($file))
		{
			function get_line($f_p)
			{
				if(feof($f_p))
					return "";
				else
					{$str=addslashes(fgets($f_p,4096));echo "<BR>getline : $str";return $str;}
//					return addslashes(fgets($f_p,4096));
			}
			
			
			// le deroulement de cette fonction part du principe qu'il n'y a pas d'erreur dans le csv
			// NB on pourrait se passer des numeros de chapitres et de pages dans le csv...
			function analine($lin,$tofind,&$obj,&$att,&$lan,$par=-1)
			{
				GLOBAL $langue, $abv;
				
				$match=explode(";",$lin);
				if(preg_match("/^\b$tofind\b/i",$match[0]))
				{
					$count=count($match);
					switch($tofind)
					{
						case "cours" :
							// c'est la premiere ligne qu'on doit analyser (les tableaux sont vides).
							$obj[0]=array("page_form",-1);
							$att[0][-1]=array("titre","language",0);
							$att[0][-2]=array("desc","language",0);
							$att[0][0]=array("page_form","text",$langue);
							$att[0][2]=array("page_form","text","...");
							$att[0][3]=array("page_form","text","");
							
							$l=3;
							foreach($abv as $ab)
							{
								// titre
								$arr_ti["$ab"] = $match[$l++];
								// description
								$arr_de["$ab"] = $match[$l++];
							}
							$lan[0]=$arr_ti;
							$lan[1]=$arr_de;
							// on renvoie 0, a savoir l'increment de l'objet ajoute dans 'obj[]'
							return 0;
							// du coup le 'break' ne sert a rien, si ce n'est impressionner le foules sur des rythmes endiables
							break;
						case "chapitre" :
							$cl=count($lan);
							$obj[$match[1]]=array("chapitre",$par);
							$att[$match[1]][0]=array("chapitre","text",$match[1]);
							$att[$match[1]][-1]=array("titre","language",$cl);
							$att[$match[1]][-2]=array("desc","language",$cl+1);
							
							$l=3;
							foreach($abv as $ab)
							{
								// titre
								$arr_ti["$ab"] = $match[$l++];
								// description
								$arr_de["$ab"] = $match[$l++];
							}
							$lan[$cl]=$arr_ti;
							$lan[$cl+1]=$arr_de;
							return $match[1];
							// du fait du return, le 'break' ne sert a rien, si ce n'est impressionner le foules sur des rythmes endiables
							break;
						case "page" :
							$cl=count($lan);
							$obj[$match[1]]=array("page",$par);
							$att[$match[1]][1]=array("fichier","text",$match[2]);
							$att[$match[1]][0]=array("page","text",$match[1]);
							$att[$match[1]][-1]=array("titre","language",$cl);
							$att[$match[1]][-2]=array("desc","language",$cl+1);
							
							$l=3;
							foreach($abv as $ab)
							{
								// titre
								$arr_ti["$ab"] = $match[$l++];
								// description
								$arr_de["$ab"] = $match[$l++];
							}
							$lan[$cl]=$arr_ti;
							$lan[$cl+1]=$arr_de;
							return $match[1];
							// du fait du return, le 'break' ne sert a rien, si ce n'est impressionner le foules sur des rythmes endiables
							break;
						case "duree" :
							$att[0][1]=array("page_form","text",$match[1]);
							return 0;
							break;
						default :
							return -1;
					}
				}
				else
					return -1;
			}
			
			//Ouverture du fichier
			$fp = fopen($file,"r");
			$obj=$att=$lan=array();
			while($line=get_line($fp))
			{
				if($inc=analine($line,"cours",&$obj,&$att,&$lan)>=0)
				{
					$notnext=false;
					$nobreak=true;
					while($nobreak && ($not_next || $line=get_line($fp)))
					{
echo "<BR>ligne $line<BR>";
						// test pour eviter de bloquer indefiniment sur la meme ligne
						if($notnext)
							$notnext=false;
						// cours constitue de pages
						if(analine($line,"page",&$obj,&$att,&$lan,$inc)>=0)
						{
							// on recupere les pages suivantes
							while($line=get_line($fp) && analine($line,"page",&$obj,&$att,&$lan,$inc)>=0)
							{echo "<BR>ligne $line<BR>";}
							if(analine($line,"duree",&$obj,&$att,&$lan)>=0)
								// on peut quitter la boucle, car on est sense avoir fini
								// l'analyse du cours
								$nobreak=false;
//							else
//							{}// pas de duree, on peut prevoir un message d'erreur
						}
						// cours constitue de chapitres
						elseif($incc=analine($line,"chapitre",&$obj,&$att,&$lan,$inc)>=0)
						{
							// on recupere les pages du chapitre
							while($line=get_line($fp) && analine($line,"page",&$obj,&$att,&$lan,$incc)>=0)
							{echo "<BR>ligne $line<BR>";}
echo "<BR>ligne $line<BR>";
							if(analine($line,"duree",&$obj,&$att,&$lan)<0)
								// soit on pointe sur une nouvelle ligne de chapitre,
								// soit on est tombe sur un os...
								$notnext=true;
							else
								// on peut quitter la boucle, car on est sense avoir fini
								// l'analyse du cours
								$nobreak=false;
						}
					}
					// si on a trouve une duree, on peut s'arreter la
					if(!$nobreak)
						break;
				}
			}
			// on a fini l'analyse
			print_r($obj);
			print_r($att);
			print_r($lan);
*/		}


/* There comes the content of the csv file I tried to analyse


Fichier correspondant;;;Fran?ais;;English;;;;;;;;;;;;
TYPE;ORDRE;FICHIER;TITRE;DESCRIPTION;TITLE;DESCRIPTION;;;;;;;;;;;
cours;;;;;Lotus Notes Getting Acquainted;Lotus Notes Getting Acquainted;;;;;;;;;;;
chapitre;1;;;;Introduction;Intoduction;;;;;;;;;;;
page;1;ecran_intro_module_acqua_en_en.swf;;;Introduction;Introduction;;;;;;;;;;;
chapitre;2;;;;Mail (GA-LN-01);The Mail database options;;;;;;;;;;;
page;2;dossiers_mail_en_en.swf;;;Managing folders;Managing folders;;;;;;;;;;;
page;3;simu_dossiers_mail_en_en.swf;;;Exercise;Simulation Exercise;;;;;;;;;;;
page;4;taille_base_mail_en_en.swf;;;Mail database size;The size of your Mail database;;;;;;;;;;;
page;5;notification_absence_en_en.swf;;;Out-of-office;Setting out-of-office mail;;;;;;;;;;;
page;6;qcm_notification_absence_en_en.swf;;;Exercise;Multiple Choice Questions;;;;;;;;;;;
page;7;options_notification_en_en.swf;;;Mail notification;Setting mail reception notifications;;;;;;;;;;;
page;8;message_telephonique_en_en.swf;;;Phone message;Creating a phone message;;;;;;;;;;;
page;9;archivage_en_en.swf;;;Archiving ;Archiving documents;;;;;;;;;;;
page;10;qcm_archivage_en_en.swf;;;Exercise;Multiple Choice Questions;;;;;;;;;;;
chapitre;3;;;;Databases (GA-LN-02);The Databases Options;;;;;;;;;;;
page;11;afficher_en_en.swf;;;General information;General information on a database;;
page;12;ouvrir_base_en_en.swf;;;Opening database;Opening and closing a database;;
page;13;les_vues_en_en.swf;;;The views;The views;;
page;14;select_les_vues_en_en.swf;;;Exercise;Graphical Multiple Choice Questions;;
page;15;creer_liens_en_en.swf;;;Creating links;Creating links;;
page;16;imprimer_database_en_en.swf;;;Printing a view;Printing a view, a document and a selection of documents;;
page;17;qcm_imprimer_database_en_en.swf;;;Exercise;Multiple Choice Questions;;
chapitre;4;;;;Calendar (GA-LN-04);The Calendar Options;;
page;18;ouvrir_afficher_agenda_en_en.swf;;;Opening Calendar;Opening the Calendar;;
page;19;creer_entrees_dans_agenda_en_en.swf;;;Calendar entries;Setting Calendar entries;;
page;20;simu_entree_en_en.swf;;;Exercise;Simulation Exercise;;
page;21;gerer_entrees_en_en.swf;;;Managing entries;Managing the Calendar entries;;
page;22;definir_preferences_agenda_en_en.swf;;;Preferences;Setting Calendar preferences;;
page;23;qcm_definir_preferences_agenda_en_en.swf;;;Exercise;Multiple Choice Questions;;
page;24;ouvrir_autre_agenda_en_en.swf;;;Other Calendars;Opening someone else's Calendar;;
page;25;imprimer_agenda_en_en.swf;;;Printing Calendar;Printing the Calendar;;
page;26;qcm_imprimer_agenda_en_en.swf;;;Exercise;Multiple Choice Questions;;
page;27;configurer_planning_disponibilite_en_en.swf;;;Free time schedule;Setting up your free time schedule;;
page;28;invitations_reunions_en_en.swf;;;Meeting invitation;Creating a meeting invitation;;
page;29;qcm_invitations_reunions_en_en.swf;;;Exercise;Multiple Choice Questions;;
page;30;ouvrir_afficher_base_taches_en_en.swf;;;Opening To Do;Opening the To Do database;;
page;31;creer_envoyer_taches_en_en.swf;;;To Do entries;Creating and working with To Do entries;;
page;32;imprimer_taches_en_en.swf;;;Printing entries;Printing To Do entries;;
page;33;creer_agenda_de_groupe_en_en.swf;;;Group calendar;Creating a group Calendar;;
page;34;deleguer_acces_agenda_en_en.swf;;;Delegating access;Delegating access to your Calendar;;
page;35;qcm_deleguer_acces_agenda_en_en.swf;;;Exercise;Multiple Choice Questions;;
duree;01h15;;;;;;;


// and finally the ouput I obtained with my script 


getline : Fichier correspondant;;;Fran?ais;;English;;;;;;;;;;;; 
getline : TYPE;ORDRE;FICHIER;TITRE;DESCRIPTION;TITLE;DESCRIPTION;;;;;;;;;;; 
getline : cours;;;;;Lotus Notes Getting Acquainted;Lotus Notes Getting Acquainted;;;;;;;;;;; 
getline : chapitre;1;;;;Introduction;Intoduction;;;;;;;;;;; 
ligne chapitre;1;;;;Introduction;Intoduction;;;;;;;;;;; 

getline : page;1;ecran_intro_module_acqua_en_en.swf;;;Introduction;Introduction;;;;;;;;;;; 
ligne 0

getline : chapitre;2;;;;Mail (GA-LN-01);The Mail database options;;;;;;;;;;; 
ligne chapitre;2;;;;Mail (GA-LN-01);The Mail database options;;;;;;;;;;; 

getline : page;2;dossiers_mail_en_en.swf;;;Managing folders;Managing folders;;;;;;;;;;; 
ligne 0

getline : page;3;simu_dossiers_mail_en_en.swf;;;Exercise;Simulation Exercise;;;;;;;;;;; 
ligne page;3;simu_dossiers_mail_en_en.swf;;;Exercise;Simulation Exercise;;;;;;;;;;; 

getline : page;4;taille_base_mail_en_en.swf;;;Mail database size;The size of your Mail database;;;;;;;;;;; 
ligne 1

getline : page;5;notification_absence_en_en.swf;;;Out-of-office;Setting out-of-office mail;;;;;;;;;;; 
getline : page;6;qcm_notification_absence_en_en.swf;;;Exercise;Multiple Choice Questions;;;;;;;;;;; 
ligne page;6;qcm_notification_absence_en_en.swf;;;Exercise;Multiple Choice Questions;;;;;;;;;;; 

getline : page;7;options_notification_en_en.swf;;;Mail notification;Setting mail reception notifications;;;;;;;;;;; 
ligne 1

getline : page;8;message_telephonique_en_en.swf;;;Phone message;Creating a phone message;;;;;;;;;;; 
getline : page;9;archivage_en_en.swf;;;Archiving ;Archiving documents;;;;;;;;;;; 
ligne page;9;archivage_en_en.swf;;;Archiving ;Archiving documents;;;;;;;;;;; 

getline : page;10;qcm_archivage_en_en.swf;;;Exercise;Multiple Choice Questions;;;;;;;;;;; 
ligne 1

getline : chapitre;3;;;;Databases (GA-LN-02);The Databases Options;;;;;;;;;;; 
getline : page;11;afficher_en_en.swf;;;General information;General information on a database;; 
ligne page;11;afficher_en_en.swf;;;General information;General information on a database;; 

getline : page;12;ouvrir_base_en_en.swf;;;Opening database;Opening and closing a database;; 
ligne 1

getline : page;13;les_vues_en_en.swf;;;The views;The views;; 
getline : page;14;select_les_vues_en_en.swf;;;Exercise;Graphical Multiple Choice Questions;; 
ligne page;14;select_les_vues_en_en.swf;;;Exercise;Graphical Multiple Choice Questions;; 

getline : page;15;creer_liens_en_en.swf;;;Creating links;Creating links;; 
ligne 1

getline : page;16;imprimer_database_en_en.swf;;;Printing a view;Printing a view, a document and a selection of documents;; 
getline : page;17;qcm_imprimer_database_en_en.swf;;;Exercise;Multiple Choice Questions;; 
ligne page;17;qcm_imprimer_database_en_en.swf;;;Exercise;Multiple Choice Questions;; 

getline : chapitre;4;;;;Calendar (GA-LN-04);The Calendar Options;; 
ligne 1

getline : page;18;ouvrir_afficher_agenda_en_en.swf;;;Opening Calendar;Opening the Calendar;; 
getline : page;19;creer_entrees_dans_agenda_en_en.swf;;;Calendar entries;Setting Calendar entries;; 
ligne page;19;creer_entrees_dans_agenda_en_en.swf;;;Calendar entries;Setting Calendar entries;; 

getline : page;20;simu_entree_en_en.swf;;;Exercise;Simulation Exercise;; 
ligne 1

getline : page;21;gerer_entrees_en_en.swf;;;Managing entries;Managing the Calendar entries;; 
getline : page;22;definir_preferences_agenda_en_en.swf;;;Preferences;Setting Calendar preferences;; 
ligne page;22;definir_preferences_agenda_en_en.swf;;;Preferences;Setting Calendar preferences;; 

getline : page;23;qcm_definir_preferences_agenda_en_en.swf;;;Exercise;Multiple Choice Questions;; 
ligne 1

getline : page;24;ouvrir_autre_agenda_en_en.swf;;;Other Calendars;Opening someone else\'s Calendar;; 
getline : page;25;imprimer_agenda_en_en.swf;;;Printing Calendar;Printing the Calendar;; 
ligne page;25;imprimer_agenda_en_en.swf;;;Printing Calendar;Printing the Calendar;; 

getline : page;26;qcm_imprimer_agenda_en_en.swf;;;Exercise;Multiple Choice Questions;; 
ligne 1

getline : page;27;configurer_planning_disponibilite_en_en.swf;;;Free time schedule;Setting up your free time schedule;; 
getline : page;28;invitations_reunions_en_en.swf;;;Meeting invitation;Creating a meeting invitation;; 
ligne page;28;invitations_reunions_en_en.swf;;;Meeting invitation;Creating a meeting invitation;; 

getline : page;29;qcm_invitations_reunions_en_en.swf;;;Exercise;Multiple Choice Questions;; 
ligne 1

getline : page;30;ouvrir_afficher_base_taches_en_en.swf;;;Opening To Do;Opening the To Do database;; 
getline : page;31;creer_envoyer_taches_en_en.swf;;;To Do entries;Creating and working with To Do entries;; 
ligne page;31;creer_envoyer_taches_en_en.swf;;;To Do entries;Creating and working with To Do entries;; 

getline : page;32;imprimer_taches_en_en.swf;;;Printing entries;Printing To Do entries;; 
ligne 1

getline : page;33;creer_agenda_de_groupe_en_en.swf;;;Group calendar;Creating a group Calendar;; 
getline : page;34;deleguer_acces_agenda_en_en.swf;;;Delegating access;Delegating access to your Calendar;; 
ligne page;34;deleguer_acces_agenda_en_en.swf;;;Delegating access;Delegating access to your Calendar;; 

getline : page;35;qcm_deleguer_acces_agenda_en_en.swf;;;Exercise;Multiple Choice Questions;; 
ligne 1

getline : duree;01h15;;;;;;; 
getline : 


*/
// As you can easily remark, the function that makes problem is 'get_line()' :

/*
getline : page;1;ecran_intro_module_acqua_en_en.swf;;;Introduction;Introduction;;;;;;;;;;; 
ligne 0
*/
// Those 2 lines above, are an example of the problem : there is actually a string found, but my function
// strangely returns 0

?>

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-08-10 15:53 UTC] jeroen@php.net
Shorter example please, if you want us to take a look at your problem, you will need to take the effort of making an as-short-as possible example.

From the summary: doesn't return; and/or return $return_value; work?
 [2001-08-10 16:15 UTC] alindeman@php.net
status -> feedback
 [2001-09-22 11:51 UTC] derick@php.net
No feedback, so closing.

Derick
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Tue May 06 06:01:29 2025 UTC