// 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'
);
Alguma ideia? Após 2 dias ainda preso.
Respostas:
Atribua o resultado de
explode
a uma variável e passe essa variável paraend
:O problema é que isso
end
requer uma referência, porque modifica a representação interna da matriz (ou seja, faz o ponteiro do elemento atual apontar para o último elemento).O resultado de
explode('.', $file_name)
não pode ser transformado em uma referência. Essa é uma restrição na linguagem PHP, que provavelmente existe por motivos de simplicidade.fonte
error_reporting
. É seguro fazer isso?error_reporting
. Não é seguro ignorar cegamente os erros. Desativarerror_reporting
é um passo importante para ignorar cegamente os erros. No ambiente de produção, desliguedisplay_errors
e grave erros em um arquivo de log.Uso adequado compatível com Php 7:
fonte
@
prefixo faz?Todo mundo já deu a você o motivo pelo qual você está recebendo um erro, mas aqui está a melhor maneira de fazer o que você deseja:
$file_extension = pathinfo($file_name, PATHINFO_EXTENSION);
fonte
salve a matriz de explodir () em uma variável e, em seguida, chame end () nesta variável:
btw: Eu uso esse código para obter a extensão do arquivo:
onde
strrchr
extrai a sequência após a última.
esubstr
corta o.
fonte
Tente o seguinte:
O motivo é que o argumento para
end
é passado por referência, poisend
modifica a matriz avançando seu ponteiro interno para o elemento final. Se você não está passando uma variável, não há nada a que se referir uma referência.Veja
end
no manual do PHP para mais informações.fonte
O PHP reclama porque
end()
espera uma referência a algo que deseja alterar (que pode ser apenas uma variável). No entanto, você passa o resultadoexplode()
diretamente paraend()
sem salvá-lo em uma variável primeiro. No momento em queexplode()
retorna seu valor, ele existe apenas na memória e nenhuma variável aponta para ele. Você não pode criar uma referência a algo (ou a algo desconhecido na memória) que não existe.Ou, em outras palavras: PHP não sabe, se o valor que você atribui é o valor direto ou apenas um ponteiro para o valor (um ponteiro também é uma variável (número inteiro), que armazena o deslocamento da memória, onde o valor real reside). Então, o PHP espera aqui um ponteiro (referência) sempre.
Mas como esse ainda é apenas um aviso (nem mesmo obsoleto) no PHP 7, você pode ignorar avisos com facilidade e usar o operador ignore em vez de desativar completamente o relatório de erros para avisos:
fonte
explode
em uma variável temporária, como outros escreveram aqui. Mais uma vez: isso não é um erro, portanto, não há problema em usar este operador. O PHP geralmente é ruim no tratamento de erros. Portanto, sugiro usarset_error_handler
eset_exception_handler
para o tratamento de erros e como a solução mais limpa.Assim como você não pode indexar a matriz imediatamente, também não pode chamar end. Atribua-o a uma variável primeiro e depois ligue para final.
fonte
end(...[explode('.', $file_name)])
trabalha desde o PHP 5.6. Isso está documentado na RFC, embora não nos próprios documentos do PHP.fonte
Como ele levanta uma bandeira há mais de 10 anos, mas funciona muito bem e retorna o valor esperado, um pequeno operador stfu é a melhor prática ruim que você está procurando:
fonte
Manual oficial do PHP: end ()
Parâmetros
A matriz. Essa matriz é passada por referência porque é modificada pela função. Isso significa que você deve passar uma variável real e não uma função retornando uma matriz, porque somente variáveis reais podem ser passadas por referência.
fonte
Primeiro, você terá que armazenar o valor em uma variável como esta
Em seguida, você pode usar a função final para obter o último índice de uma matriz como esta
Espero que funcione para você.
fonte
fonte