Uczę sie php od jakiegoś czasu i ostatnio zabrałem sie za książkę heliona o php i sql, mam problem z funkcją fopen. Gdy dodałem do przykładowego skryptu instrukcje flock w celu unikniecia jednoczesnego zapisu skrypt nie działa jak powinien. Gdy plik nie istnieje jest tworzony ale jeżeli jest pusty wpisy nie są dodawane. Wystarczy ze wpisze do niego choć jeden znak lub pominę funkcje flock i wszystko działa jak należy. Czy ktoś jest w stanie wytłumaczyć mi dlaczego tak sie dzieje? Oto kod :

$ilosc = 0;
$wartosc = 0.00;

    $ilosc = $ilosccdr + $ilosccdrw + $iloscdvdr;
    if ($ilosc == 0 )
    {
        echo '<font color=red>';
        echo 'Nie zamuwiłeś żadnych płyt!<br>';
        echo'</font>';
    }
    else
    {
   @ $wp = fopen("$DOCUMENT_ROOT/lekcja1/zamowienia/zamowienia.txt", 'ab');
     flock($wp, LOCK_SH);//blokada zapisu
   if (!$wp)
   {
    echo'<p><h2>Zamówienie nie może zostać aktualnie przyjęte z powodów tecnicznych<br>
    Proszę sprubować póżniej!</h2><p></body></html>';
    exit;
    }
    echo'<p>zamówienie przyjęte o';
    echo $data;
    echo'</p>';
    echo'<br><br>';
    echo'<p>zamówina ilosc płyt:<p>';
    echo $ilosccdr.' CD-R <br>';
    echo $ilosccdrw.' CD-RW<br>';
    echo $iloscdvdr.' DVD-R<br>';

echo 'Zamówionych płyt:  '.$ilosc.'<br>';

    $wartosc = $ilosccdr * CENACDR
    + $ilosccdrw * CENACDRW
    + $iloscdvdr * CENADVDR;

echo 'Cena Netto: '.number_format($wartosc, 2).' PLN<br>';

$stawkavat = 0.22;
$wartosc = $wartosc * (1 + $stawkavat);
echo 'Cena brutto: '.number_format($wartosc, 2).' PLN<br>';
echo 'na adres: '.$adres;
$ciagwyjsciowy = $data. "\t"  .$ilosccdr." CD-R \t" .$ilosccdrw." CD-RW \t".$iloscdvdr. " DVD-R \t" .$wartosc." PLN \t" .$adres. "\n";
fwrite($wp, $ciagwyjsciowy);
flock($wp, LOCK_UN);//zwolnienie
fclose($wp);

}

?>