PHP жалуется, потому что end()
ожидает ссылку на что-то, что он хочет изменить (что может быть только переменной). Однако вы передаете результат explode()
непосредственно в end()
, не сохраняя его сначала в переменной. В тот момент, когда explode()
возвращает ваше значение, оно существует только в памяти и ни одна переменная не указывает на него. Вы не можете создать ссылку на что-то (или что-то неизвестное в памяти), которое не существует.
Или другими словами: PHP не знает, является ли значение, которое вы ему даете, прямым значением или просто указателем на значение (указатель также является переменной (целым числом), в которой хранится смещение памяти, где фактическая стоимость проживает). Так что PHP ожидает здесь указатель (ссылку) всегда.
Но так как это все еще просто уведомление (даже не рекомендуется) в PHP 7, вы можете безопасно игнорировать уведомления и использовать оператор игнорирования вместо полной деактивации отчетов об ошибках для уведомлений:
$file_extension = @end(explode('.', $file_name));