Es handelt sich womöglich(!) um die Zugriffsrechte.
fopen( $datei, 'w') erfordert Schreibrechte. Wenn Du das Skript in einem Terminal ausführst hast Du diese offenbar, wenn der Apache das Skript mit seinen Rechten ausführt (oft, aber nicht immer) dann muss "www-data", "www-run" (oder als was der Apache auch immer läuft) dieses Recht haben. Da "jeder" also "others" Webseiten abrufen (und damit Dein PHP-Skript starten) kann ist es (in vielen, aber nicht allen Fällen) sinnvoll, die Rechte für "jeden" bzw. "others" zu vergeben.
In einem Terminal:
cd /var/www/html/
chmod 0666 textdatei.txt
ls -l textdatei.txt
Alternative 1:
cd /var/www/html/
chmod u=rw,g=rw,o=rw textdatei.txt
ls -l textdatei.txt
Alternative 2:
cd /var/www/html/
setfacl -m user::rw,group::rw,other::rw textdatei.txt
getfacl textdatei.txt
Du wirst Dich umfassend und gründlich über Rechte im Linux/Unix-Dateisystem informieren müssen.
~> man 1 chmod
~> man 1 chown
~> man 1 setfacl
Das oben verlinkte PDF und die im Block aufgeführten Manuals helfen Dir genau an diesem Punkt. Es folgen sicherlich weitere Probleme: Sei also dazu bereit, ziemlich viel lernen müssen bevor Du "Irgendwas mit PHP" richtig online stellst. Manche machen das (lernen) nicht und stehen dann "montags in der Computerbild".
Sollte die Datei 'textdatei.txt' (noch) nicht existieren, dann müsste der Server diese anlegen dürfen, dazu braucht der Server Schreibrechte an /var/www/html.
Ich warne ausdrücklich davor, das zu tun, aber so wie das Skript aussieht müsste der Apache (also jeder) in /var/www/html schreiben dürfen.
Sowas gehört nach außerhalb von $_SERVER['DOCUMENT_ROOT']
verlegt! Verschiebe also die Textdatei nach /var/www/data/textdatei.txt
(das Verzeichnis musst Du anlegen und mit chmod 777 begehbar- und beschreibbar machen!) und gib dem Server die Rechte an genau diesem Verzeichnis und den darin befindlichen Dateien, ändere das Skript!