// 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'
);
¿Algunas ideas? Después de 2 días todavía atascado.

Respuestas:
Asigne el resultado de
explodea una variable y pase esa variable aend:El problema es que
endrequiere una referencia, ya que modifica la representación interna de la matriz (es decir, hace que el puntero del elemento actual apunte al último elemento).El resultado de
explode('.', $file_name)no se puede convertir en una referencia. Esta es una restricción en el lenguaje PHP, que probablemente existe por razones de simplicidad.fuente
error_reporting. ¿Es seguro hacerlo?error_reporting. No es seguro ignorar ciegamente los errores. Apagarerror_reportinges un paso importante para ignorar ciegamente los errores. En el entorno de producción, apague en sudisplay_errorslugar y escriba errores en un archivo de registro.Uso adecuado compatible con php 7:
fuente
@que hace el prefijo?Todos los demás ya te han dado la razón por la que recibes un error, pero esta es la mejor manera de hacer lo que quieres hacer:
$file_extension = pathinfo($file_name, PATHINFO_EXTENSION);fuente
guarde la matriz de explotar () en una variable y luego llame a end () en esta variable:
por cierto: uso este código para obtener la extensión del archivo:
donde
strrchrextrae la cadena después de la última.ysubstrcorta el.fuente
Prueba esto:
La razón es que el argumento para
endse pasa por referencia, ya queendmodifica la matriz avanzando su puntero interno al elemento final. Si no está pasando una variable, no hay nada a lo que pueda hacer referencia.Ver
enden el manual de PHP para más información.fuente
PHP se queja porque
end()espera una referencia a algo que quiere cambiar (que solo puede ser una variable). Sin embargo, pasa el resultado deexplode()directamenteend()sin guardarlo primero en una variable. En el momento en queexplode()devuelve su valor, solo existe en la memoria y no tiene puntos variables. No puede crear una referencia a algo (o algo desconocido en la memoria) que no existe.O en otras palabras: PHP no sabe, si el valor que le da es el valor directo o simplemente un puntero al valor (un puntero también es una variable (entero), que almacena el desplazamiento de la memoria, donde el valor real reside) Entonces PHP espera aquí un puntero (referencia) siempre.
Pero dado que esto sigue siendo solo un aviso (ni siquiera obsoleto) en PHP 7, puede ignorar los avisos y usar el operador ignorar en lugar de desactivar por completo el informe de errores para los avisos:
fuente
explodeen una variable temporal, como otros escribieron aquí. Pero de nuevo: esto no es un error, por lo que está bien usar este operador. PHP es generalmente malo en el manejo de errores. Por lo tanto, sugeriría usarset_error_handleryset_exception_handlerpara el manejo de errores y como solución más limpia.Del mismo modo que no puede indexar la matriz de inmediato, tampoco puede finalizar la llamada en ella. Asignarlo primero a una variable, luego finalizar la llamada.
fuente
end(...[explode('.', $file_name)])ha trabajado desde PHP 5.6. Esto está documentado en el RFC, aunque no en los propios documentos PHP.fuente
Dado que levanta una bandera durante más de 10 años, pero funciona bien y devuelve el valor esperado, un pequeño operador de stfu es la mala práctica más buena que todos están buscando:
fuente
Manual oficial de PHP: end ()
Parámetros
La matriz Este conjunto se pasa por referencia porque la función lo modifica. Esto significa que debe pasarle una variable real y no una función que devuelva una matriz porque solo las variables reales pueden pasarse por referencia.
fuente
Primero, deberá almacenar el valor en una variable como esta
Luego puede usar la función final para obtener el último índice de una matriz como esta
Espero que funcione para ti.
fuente
fuente