Почему при запуске скрипта из командной строки, если я нахожусь в каталоге скрипта, он нормально выполняется. А если не в каталоге, то нет?
потому что относительные пути не просто так называются "относительными": они вычисляются относительно текущей директории.
решается это просто:$fp = fopen(__DIR__ . DIRECTORY_SEPARATOR . "result.txt", "a+");
php.net/manual/ru/language.constants.predefined.php
php.net/manual/ru/dir.constants.php
Путь к изменяемому файлу быстрее всего не абсолютный, а относительный. Чтобы дать более точный ответ, нужено смотреть код