Hola Pedro!
Todo bien viendo algunas observaciones
Quizás yendo en la línea tradicional te recomendaría que hagas la declaración de funciones en la parte inicial del código y luego hagas uso de las mismas. Esto es básicamente un criterio de "mantener el código ordenado evitando declarar y usar funciones en cualquier punto, sino tratar de hacerlo ordenadamente":
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title>
<meta charset="utf-8">
</head>
<body>
<?php
//PARTE DECLARATIVA
function escribirTresNumeros($n1, $n2, $n3) {
$n1 = $n1 . "\r\n";
$n2 = $n2 . "\r\n";
$n3 = $n3 ;
$fp = fopen('datosEjercicio.txt', 'a');
fputs($fp, $n1);
fputs($fp, $n2);
fputs($fp, $n3);
fclose($fp);
}
function obtenerSuma($nomArchivo){
$fp = fopen($nomArchivo, 'r');
$suma = 0;
while(!feof($fp)) {
$linea = fgets($fp);
$suma += $linea;
}
return $suma;
}
function obtenerArrNum($nomArchivo){
$fp = fopen($nomArchivo, 'r');
$i = 0;
while(!feof($fp)) {
$arrayNum[$i++] = fgets($fp);
}
return $arrayNum;
}
//PARTE EJECUTIVA
escribirTresNumeros(4, 8, 14);
echo 'En primer lugar se llamará a la función escribirTresNumeros, pasándole como parámetros (2, 8, 14).';
echo 'Allí se creará un archivo con nombre datosEjercicio.txt';
echo '<hr>Después llamaremos a la función obtenrSuma a la que pasaremos como parámetro el nombre del del archivo';
echo ' que se creó en la función escribirTresNumeros.';
echo 'El resultado de sumar los tres números del archivo datosEjercicio.txt es: ' . obtenerSuma('datosEjercicio.txt');
echo '<hr> Y por último llamaremos a la función obtenerArrNum, pasándole como parámetro el nombre del archivo';
echo ' que se creó en la función escribirTresNumeros. Y nos devolverá los datos que tenga dentro de un array.<br/>';
$arrayNuevo = obtenerArrNum('datosEjercicio.txt');
$msg = '<br/>El array que devuelve la función obtenerArrNum contiene: <br/>';
for($i=0; $i<count($arrayNuevo); $i++) {
$msg = $msg . 'En el índice ' . $i . ' tenemos como valor ' . $arrayNuevo[$i] . '<br/>';
}
echo $msg;
?>
</body>
</html>
En realidad es típico mantener las funciones en archivos externos, de modo que se pondría la instrucción de carga al principio del archivo para luego hacer uso de ellas.
El código no me funciona bien si lo ejecuto varias veces. Por ejemplo lo ejecuto una primera vez con escribirTresNumeros(2, 8, 14); y en el archivo de datos queda
2
8
14
Lo ejecuto una segunda vez con escribirTresNumeros(4, 8, 14); y en el archivo de datos queda
2
8
144
8
14
De modo que ya los resultados no son correctos en la segunda ejecución
Esto es debido a que el archivo no se está sobreescribiendo
Saludos!