hanaalkadri / educom-webshop-basis

0 stars 0 forks source link

Deze code heeft een Resource Leak #23

Open JeroenHeemskerk opened 1 year ago

JeroenHeemskerk commented 1 year ago

In de code hieronder https://github.com/hanaalkadri/educom-webshop-basis/blob/04dc111e0d495bf9f73f9bd95bd64c36478dbf88/register.php#L76-L107 Heb je op regel 98 een return deze wordt gedaan ZONDER dat de file wordt afgesloten. Hetzelfde zou zijn als je een exceptie zou gooien omdat een regel niet op te breken is in 4 stukken.

Het gevolg is dat het systeem de link naar de file open houdt en op een gegeven moment geen file meer kan benaderen omdat er eerst een file 'gesloten' moet worden. Dit is bekend als een resource leak.

Om dit op te lossen moet je een try-finally patroon gebruiken, alle code na de fopen zet je in een try-block en in de finally zet je de fclose.

     // 1. open user file 
     $userFile = @fopen("users/users.txt", "r"); 
     // 1a.  is de file is niet gevonden 
     if ($userFile == false) { 
     //    T => throw Exception 
        throw new Exception("user file not found"); 
     //    F => ga verder 
     }
     try { 
        // 2. lees een regel 
        fgets($userFile); 
        // ... other code

      } finally {
        fclose($userFile);
      }