ID: 12689
Updated by: derick
Reported By: [EMAIL PROTECTED]
Old Status: Feedback
Status: Closed
Bug Type: Scripting Engine problem
Operating System: Microsoft Windows NT
PHP Version: 4.0.4pl1
New Comment:

No feedback, so closing.

Derick

Previous Comments:
------------------------------------------------------------------------

[2001-08-10 16:15:59] [EMAIL PROTECTED]

status -> feedback

------------------------------------------------------------------------

[2001-08-10 15:53:51] [EMAIL PROTECTED]

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 09:50:02] [EMAIL PROTECTED]

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

?>


------------------------------------------------------------------------



Edit this bug report at http://bugs.php.net/?id=12689&edit=1


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to