Estas en un problema al que todo el mundo se enfrenta tarde o temprano, todo el mundo se come la cabeza con el y al final acaban optando por soluciones más eficientes como guardar los datos en un lado externo.
Dicho esto, hay algunos modos que puedes encontrar por ahí para hacer estas cosas de forma básica e ineficiente. Ten en cuenta que en general, cuando vas a procesar e modificar un fichero, no lo estas visualizando si no que lo estas leyendo, lees los bytes buscas donde modificar e insertas lo cual equivale a sobre-escribir el fichero entero con los consecuentes aumentos de memoria.
Lo más fácil, seria coger el fichero, leerlo, determinar de cuantas lineas se compone, buscar la linea especifica en la que queremos insertar contenido, separar el contenido en dos (la primera parte antes de la linea y la segunda parte justo después), guardar la segunda mitad en memoria, añadir el nuevo contenido al final y añadir la segunda mitad que guardamos justo después.
Algo así:
<?php
$archivo = 'test.php';
$linea = 7;
$contenido = "Hola\n¿Que Tal?\nEstoy insertando contenido!";
$nuevaLinea = "\n"; // Deberiamos determinar las lineas nuevas o usar PHP_EOL;
// Abrimos el fichero en modo lectura, leemos todo su contenido y cerramos.
$file = fopen($archivo, 'r');
// Separamos todo en un array siendo cada elemento de este, una linea.
$contentSplit = explode($nuevaLinea, $content);
// Separamos el contenido en dos arrays justo donde deberiamos insertar el
// nuevo contenido. Luego añadimos al final de la primera mitad el contenido
// nuevo.
$firstHalf[] = $contenido;
// Combinamos ambas mitades de nuevo.
// Unimos todo el contenido reproduciendo los saltos de linea
$finalContent = implode($nuevaLinea, $finalContent);
// Sobreescribimos el fichero.
$file = fopen($archivo, 'w+');
De nuevo, esto no es optimo, no es eficiente e incluso se puede reestructurar de una forma mucho mejor (véase
esta respuesta de StackOverflow), pero es para que veas los problemas a los que te enfrentas.
Saludos