Все ваши варианты используют пути, относительно файла, который их использует. В каком-то файле они могут работать верно, в каком-то — нет.
Для Bitrix есть список констант: https://training.bitrix24.com/api_help/main/consta..., среди них, кажется, есть полезные, например SITE_DIR — посмотрите её значение.
В любом случае, адрес можно составить вот так:
нет, не все.
Первый - абсолютный путь из домашнего каталога.
Второй - да, относительный. Выражение "относительно файла, который их использует" лично мне непонятно, я бы сказал "относительно точки входа".
Третий вариант просто содержит ошибку, должно быть if ($file = fopen(__DIR__."/emails.txt", "r"))
Путь абсолютный, но рассчитывается относительно файла, в котором размещена эта строчка.
Первый вариант требует от функции раскрыть ~/ - чего она, похоже, не делает.
Второй нацеливается на файл в папке исполнения скрипта (а не на путь, где этот скрипт лежит).
Третий, скорее всего, просто упускает / между путем и именем файла ;)
Лучше всего, как сказано выше, отталкиваться от DOCUMENT_ROOT - сайты меняют хостинги и пути, скрипты перетасовываются... а еще лучше вообще не делать таких вещей.
Потому что файлы, лежащие в пределах веб-сервера, доступны не только вашим скриптам, но и внешним запросам. А это далеко не всегда то, что вы имели в виду.