Javascript:
//Simplifiquei o JS, baseado na versão do @vmartins, muito mais enxuta
document.getElementById('texto').onkeyup = function() {
count = this.value.split("\n").length;
document.getElementById('contador').innerHTML = count;
document.getElementById('linhas').value = count;
}
HTML:
<form action="" method="post">
<textarea id="texto" name="texto" onKeyup="updateLineCount()" rows="10"></textarea><br>
<input type="hidden" id="linhas" name="linhas" value="0">
Linhas: <span id="contador"></span>
</form>
See demo on SQL Fiddle
Note: row count will be sent in a hidden field , to answer the question, however, it is best to retell via PHP, and not send the value as it can be modified manually and / or simulated.
PHP:
(we are not using the hidden HTML field, but rather "retelling" via PHP)
<?php
$texto = $_POST('texto');
$linhas = explode("\n", $texto);
$conta = count($linhas);
//... se for mostrar as linhas individualmente,
// pode iterar a array $linhas aqui ...
echo $conta;
?>