Omerfd haklı. Kendisi en büyük böleni olur.
Ayrıca sizin kodunuz Asal sayılar için sonuç veremez. (Kendisi ve 1'e bölünmesi koşulunu kontrol edemezsiniz) Kendisi hariç en büyük bölenini bulacaksanız şunu deneyebilirsiniz:

<?php
    $sayi=131;
    for($i = intval(floor($sayi/2)); $i>=1; $i--)
    {
        
        if ($sayi % $i == 0)
        {
            if($i==1){
                echo $sayi .' bir asal sayıdır.<br />';
            }else{
                echo 'En büyük tam bölen: '.$i.'<br />';
                break;
            }
        }else{
            //İsteğe bağlı debug
            //echo '$sayi: '.$sayi .' - $i: '. $i. ' - $sayi % $i ='.$sayi % $i. '<br />';
        }
    }
Sizin kodunuzda denediğimde de max() çalışıyor.

<?php
    $sayi=120;
    for($i=2;$i<=$sayi/2;$i++)
        if ($sayi%$i==0)
            $bolenler[]=$i;
        
    echo 'En büyük bölen: '. max($bolenler);