Intereting Posts
Laravel настраивает силу https Как получить все значения текстовых узлов между узлами диапазона Найдите разницу между двумя массивами в php Разница между установкой ID напрямую и установкой красноречивого отношения ассоциирования при сохранении модели в Laravel? Как получить роль пользователя в Yii2? Проверка jQuery, если правильный элемент был «сброшен» Простой PDO Wrapper не работает Получить свойство класса PHP по строке составной уникальный ключ-валидация – laravel Восстановление определенной строки из базы данных в yii Как исправить предупреждение «Создание объекта по умолчанию из пустого значения» в PHP Что такое динамический ввод? В PHP можно проверить содержимое Zip-файла без предварительного извлечения его содержимого? получение изображений из базы данных и отображение всех на странице Скрыть или зашифровать URL-файлы файлов?

Только переменные должны передаваться по ссылке

// Other variables $MAX_FILENAME_LENGTH = 260; $file_name = $_FILES[$upload_name]['name']; //echo "testing-".$file_name."<br>"; //$file_name = strtolower($file_name); $file_extension = end(explode('.', $file_name)); //ERROR ON THIS LINE $uploadErrors = array( 0=>'There is no error, the file uploaded with success', 1=>'The uploaded file exceeds the upload max filesize allowed.', 2=>'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form', 3=>'The uploaded file was only partially uploaded', 4=>'No file was uploaded', 6=>'Missing a temporary folder' ); 

Есть идеи? Через 2 дня все еще застрял

Related of "Только переменные должны передаваться по ссылке"

Назначьте результат explode переменной и передайте эту переменную в end :

 $tmp = explode('.', $file_name); $file_extension = end($tmp); 

Проблема в том, что для этой end требуется ссылка, потому что она изменяет внутреннее представление массива (т. Е. Делает текущий указатель элемента элемента последним элементом).

Результат explode('.', $file_name) не может быть превращен в ссылку. Это ограничение на языке PHP, которое, вероятно, существует по причинам простоты.

Правильное использование Php 7:

 $fileName = 'long.file.name.jpg'; $tmp = explode('.', $fileName); $fileExtension = end($tmp); echo $fileExtension; // jpg 

Все остальные уже дали вам причину, по которой вы получаете сообщение об ошибке, но вот лучший способ сделать то, что вы хотите сделать: $file_extension = pathinfo($file_name, PATHINFO_EXTENSION);

сохраните массив от explode () до переменной, а затем вызовите end () для этой переменной:

 $tmp = explode('.', $file_name); $file_extension = end($tmp); 

btw: Я использую этот код, чтобы получить расширение файла:

 $ext = substr( strrchr($file_name, '.'), 1); 

где strrchr извлекает строку после последнего . и substr отключает .

Попробуй это:

 $parts = explode('.', $file_name); $file_extension = end($parts); 

Причина в том, что аргумент для end передается по ссылке, так как end модифицирует массив, продвигая его внутренний указатель на конечный элемент. Если вы не передаете переменную, нет ничего, на что ссылаться.

Дополнительную информацию см. В руководстве по PHP.

Так же, как вы не можете сразу индексировать массив, вы также не можете называть его. Сначала назначьте его переменной, а затем вызовите конец.

 $basenameAndExtension = explode('.', $file_name); $ext = end($basenameAndExtension); 

PHP жалуется, потому что end() ожидает ссылку на то, что он хочет изменить (это может быть только переменная). Однако вы передаете результат explode() прямо в end() не сохраняя сначала значение переменной. В момент, когда explode() возвращает ваше значение, оно существует только в памяти, и никакие переменные не указывают на него. Вы не можете создать ссылку на что-то (или на что-то неизвестное в памяти), которое не существует.

Или, другими словами: PHP не знает, если значение, которое вы ему даете, является прямым значением или просто указателем на значение (указатель также является переменной (integer), которая хранит смещение памяти, где фактическое значение проживает). Поэтому PHP всегда ожидает указатель (ссылку).

Но поскольку это еще одно уведомление (даже не устаревшее) в PHP 7, вы можете просто игнорировать уведомления и использовать ignore-operator вместо полной деактивации отчетов об ошибках для уведомлений:

 $file_extension = @end(explode('.', $file_name)); 

PHP offical Manual: end ()

параметры

 array 

Массив. Этот массив передается по ссылке, потому что он модифицируется функцией. Это означает, что вы должны передать ему реальную переменную, а не функцию, возвращающую массив, потому что только фактические переменные могут передаваться по ссылке.

$ file_extension = end (explode ('.', $ file_name)); // ОШИБКА НА ЭТОЙ ЛИНИИ

измените эту строку как,

$ file_extension = end ( ( explode ('.', $ file_name)) ); // нет ошибок

Техника проста, пожалуйста, поставьте еще один кронштейн для взрыва,

(explode ()) , то только он может выполнять независимо.