// 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
explode
a una variable y pase esa variable aend
:El problema es que
end
requiere 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_reporting
es un paso importante para ignorar ciegamente los errores. En el entorno de producción, apague en sudisplay_errors
lugar 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
strrchr
extrae la cadena después de la última.
ysubstr
corta el.
fuente
Prueba esto:
La razón es que el argumento para
end
se pasa por referencia, ya queend
modifica 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
end
en 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
explode
en 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_handler
yset_exception_handler
para 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