Функция fgets читает одну строку из текстового файла. Он читает так долго, пока не будет достигнут конец текущей строки (или конец файла). Поэтому, если вы хотите прочитать одну строку из текстового файла, вы должны использовать fgets.
Функция fread читает не только до конца строки, но и до конца файла [например, fread ($ handle)] или столько байтов, сколько указано в параметре [например, fread ($ handle, 1024)]. Поэтому, если вы хотите прочитать полный файл, независимо от того, является ли он текстовым файлом, содержащим все строки или произвольные необработанные данные из файла, вы должны использовать fread.