variable valor una referencia por pase pasar parametros parametro otra opcional globales funciones funcion declarar como array php

valor - variables en funciones php



Solo las variables deberían pasar por referencia (9)

$ file_extension = end (explode (''.'', $ file_name)); // ERROR EN ESTA LÍNEA

cambia esta línea como,

$ file_extension = end ( (explode (''.'', $ file_name)) ); //sin errores

La técnica es simple por favor pon un paréntesis más para explotar,

(explotar ()) , entonces solo puede funcionar independientemente ...

// 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 atrapado


Asigna el resultado de explode a una variable y pasa esa variable a end :

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

El problema es que ese end requiere una referencia, porque 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 exista por razones de simplicidad.


Del mismo modo que no puede indexar la matriz de forma inmediata, tampoco puede invocarla para finalizarla. Asignarlo a una variable primero, luego llamar a fin.

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


PHP ofical Manual: end ()

Parámetros

array

La matriz Esta matriz se pasa por referencia porque la función la modifica. Esto significa que debe pasarle una variable real y no una función que devuelva una matriz porque solo las variables reales se pueden pasar por referencia.


PHP se queja porque end() espera una referencia a algo que quiere cambiar (que puede ser solo una variable). Sin embargo, usted pasa el resultado de explode() directamente a end() sin guardarlo primero en una variable. En el momento en que explode() devuelve su valor, existe solo en la memoria y ninguna variable lo señala. No puede crear una referencia a algo (o a algo desconocido en la memoria), eso no existe.

O en otras palabras: PHP no sabe, si el valor que le da es el valor directo o solo un puntero al valor (un puntero es también 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 desaprobado) en PHP 7, puede ignorar los avisos y usar el operador ignorar en lugar de desactivar por completo los informes de errores para avisos:

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


Php 7 uso adecuado compatible:

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


Prueba esto:

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

La razón es que el argumento para el end se pasa por referencia, ya que el end modifica la matriz al avanzar su puntero interno al elemento final. Si no está pasando una variable, no hay nada para que una referencia apunte.

Consulte el end en el manual de PHP para más información.


Todos los demás ya le han dado la razón por la que recibe un error, pero esta es la mejor manera de hacer lo que quiere hacer: $file_extension = pathinfo($file_name, PATHINFO_EXTENSION);


guarde la matriz de explode () en una variable y luego llame a end () en esta variable:

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

BTW: utilizo este código para obtener la extensión del archivo:

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

donde strrchr extrae la cadena después de la última . y substr corta el .