Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo cargar un formulario

Cómo cargar un formulario

Cargar formulario

El uso de la función de carga en ThinkPHP no requiere un procesamiento especial. Por ejemplo, el siguiente es un envío de formulario con carga de archivo adjunto:

ltform action = " _ _ URL _ _/upload " enctype = " multipart/form-data " método = " post " >>p >

ltinput type = " texto " nombre = " nombre "/ gt;

ltinput type = " archivo " nombre = " foto "/ gt;

ltinput type = " Enviar "value = "submit" >>p>

lt/form gt;

Tenga en cuenta que para utilizar la función de carga, debe configurar enctype="multipart/form-data" para el forma.

Soporte para carga de múltiples archivos

Si necesita cargar varios archivos, solo necesita modificar el formulario y

lt input type = ' file ' name = ' foto ' gt

en lugar

lt tipo de entrada = ' archivo ' nombre = ' foto 1 ' gt;

lt tipo de entrada = ' archivo ' nombre = ' foto2 ' gt

lt tipo de entrada = ' archivo ' nombre = ' foto3 ' gt

o

lt tipo de entrada = ' archivo ' nombre = ' foto [ ]' gt

lt tipo de entrada = ' archivo ' nombre = ' foto[]' gt

lt tipo de entrada = ' archivo ' nombre = ' foto[]' gt;

Puede identificar automáticamente las categorías de carga de archivos de dos métodos de sistemas de carga de múltiples archivos adjuntos.

Operación de carga

La operación de carga de archivos ThinkPHP utiliza la clase Think\Upload. Suponiendo que el formulario anterior se envía al método de carga del controlador actual, echemos un vistazo al código de implementación del método de carga:

Función pública cargar(){

$ Upload = new \ Think \ Upload(); //Crea una instancia de la clase de carga

$Upload-gt; maxSize = 3145728 //Establece el tamaño de carga del archivo adjunto

$Upload-gt; ; exts = array(' jpg ', ' gif ', ' png ', ' JPEG '); //Establece el tipo de carga del archivo adjunto

$upload-gt; /Uploads/'; //Establece el directorio raíz de carga de archivos adjuntos

$upload-gt; save path="" //Establece el (sub)directorio de carga de archivos adjuntos

// Subir archivos

$info = $upload-gt;upload();

if(!$info) {//subir mensaje de error

$ this- gt; Error($upload-gt;getError());

}else{//Subida exitosa.

$ this- gt; Success ("¡Carga exitosa!");

}

}

La clase de carga admite archivos de imagen. Es seguro subirlo. Si intenta cargar un archivo de imagen ilegal, el sistema le solicitará un archivo de imagen ilegal.

Para utilizar mejor la función de carga, se recomienda que su servidor habilite la compatibilidad con el módulo finfo.

Parámetros de carga

Antes de la operación de carga, podemos configurar algunos atributos de carga. La configuración de atributos admitida por la clase de carga incluye:

Descripción del atributo

maxSize El tamaño máximo de archivo (en bytes) para la carga de archivos; 0 significa tamaño ilimitado.

Se utiliza para cargar y guardar archivos de ruta raíz.

Ruta de guardado La ruta de guardado para la carga de archivos (relativa a la ruta raíz)

Regla de guardado de archivos de carga de SaveName, admite definiciones de matrices y cadenas.

SaveExt guarda el sufijo del archivo subido. Si no se establece, se utiliza el sufijo del archivo original.

Existe reemplazo. Si se sobrescribe el archivo con el mismo nombre, el valor predeterminado es falso.

El sufijo del archivo que se permite cargar mediante Exts (dejarlo en blanco significa que no hay límite), establecido por una matriz o una cadena separada por comas, el valor predeterminado está vacío.

Los tipos de archivos que mimes pueden cargar (dejar en blanco es ilimitado) se establecen mediante una matriz o una cadena separada por comas. El valor predeterminado está vacío.

AutoSub utiliza automáticamente subdirectorios para guardar los archivos cargados. El valor predeterminado es verdadero.

El método de creación del subdirectorio SubName se define mediante una matriz o una cadena.

De forma predeterminada, si el hash genera el código hash del archivo es verdadero.

La devolución de llamada detecta si hay una devolución de llamada en el archivo y, de ser así, devuelve la matriz de información del archivo.

Los atributos anteriores se pueden pasar de dos maneras:

Instantización

Podemos pasar directamente la matriz de parámetros durante la creación de instancias, por ejemplo:

$config = array(

maxSize ' = gt3145728,

rootPath ' = gt./Uploads/',

savePath ' = gt' ',

saveName ' = gt array(' uniqid ', ''),

exts ' = gt array(' jpg ', ' gif ', ' png ', ' jpeg '),

auto sub ' = >; sí,

subName ' = gt array(' date ', ' Ymd '),

);

$ Upload = new \ Think \ Upload($ config); //Crea una instancia de la clase de carga

Describiremos el uso de saveName y subName en detalle más adelante.

Asignación dinámica

Admite la asignación dinámica y la carga de parámetros después de la creación de instancias, por ejemplo:

$ Upload = new \ Think \ Upload() // Carga de instancias. Clase

$upload-gt;maxSize = 3145728;

$upload-gt;rootpath='. /Subidas/';

$Subidas-gt;save path="";

$Subidas-gt;saveName = array('uniqid',' ');

$Upload-gt; texts = array('jpg', 'gif', 'png', 'JPEG');

$Upload-gt;autoSub = true

$Upload - gt; subName = array ('date ', ' Ymd ');

La configuración anterior es consistente con el efecto de creación de instancias.

Cargar información del archivo

Después de configurar los parámetros de carga, puede llamar al método Upload de la clase Think\upload para cargar archivos adjuntos. Si falla, devuelve falso y utiliza el método getError para obtener el mensaje de error. Si la carga se realiza correctamente, se devuelve un conjunto de información del archivo cargado correctamente.

$ Upload = new \ Think \ Upload(); //Crea una instancia de la clase de carga

$Upload-gt; maxSize = 3145728 //Establece el tamaño de carga del archivo adjunto >

$Upload->exts = array('jpg','Gif','Png','JPEG' //Establecer tipo de carga de archivos adjuntos

$Upload->Ruta raíz= ' . /Uploads/'; //Establece el directorio raíz de carga de archivos adjuntos

$upload-gt; save path="" //Establece el (sub)directorio de carga de archivos adjuntos

// Subir archivos

$info = $upload-gt;upload();

if(!$info) {//subir mensaje de error

$ this- gt; Error ($ upload- gt; getError());

}else{//Carga exitosa, obtenga información del archivo cargado.

foreach($info como $archivo){

echo $archivo['savepath']. $ file[' savename '];

}

}

La información de cada archivo es una matriz que registra la siguiente información, que incluye:

Descripción del atributo

El nombre del formulario cargado por el archivo adjunto clave

Guardar ruta La ruta para guardar el archivo cargado.

Nombra el nombre original del archivo subido.

Nombre de archivo es el nombre del archivo cargado.

El tamaño del archivo subido.

Tipo MIME del archivo subido.

Tipo de sufijo de archivos subidos externos

La cadena de verificación de hash md5 de los archivos subidos md5 solo es válida cuando la configuración de hash está activada.

Cuando la configuración de hash Sha1 está activada, la cadena de verificación de hash del archivo cargado por sha1 es válida.

Una vez cargado correctamente el archivo, puede utilizar la información del archivo para realizar otras operaciones de datos, como guardarlo en la tabla de datos actual o en una tabla de datos adjunta separada.

Por ejemplo, lo siguiente representa los campos utilizados para guardar la información cargada en la tabla de datos:

$ modelo = M(' Foto ');

/ / Obtenga información de archivos cargados correctamente.

$ info = $ upload- gt; upload();

//Guardar el objeto de datos actual

$ data[' photo ']= $ info [ 0][' savename '];

$ data[' create_TIME ']= AHORA_TIME;

$ model->; add($data);

Carga de un solo archivo

El método de carga admite la carga de múltiples archivos.

A veces, solo necesitamos cargar un archivo. Podemos usar el método uploadOne proporcionado por la clase de carga para cargar un solo archivo, por ejemplo:

Función pública upload(){

. $ Upload = new \ Think \ Upload(); //Crea una instancia de la clase de carga

$Upload-gt; maxSize = 3145728 //Establece el tamaño de carga del archivo adjunto

$Upload- gt; exts = array( 'jpg', 'gif', 'png', 'JPEG'); //Establece el tipo de carga del archivo adjunto

$upload-gt; /Uploads/';//Establecer el directorio raíz de carga de archivos adjuntos

//Subir un solo archivo

$ info = $ upload- gt; uploadOne($ _ FILES[' photo 1 '] );

If (!$info) {//Subir mensaje de error

$ this- gt; ($ upload- gt; getError()

}else{//Carga exitosa, obtenga información del archivo cargado.

echo $info['savepath']. $ info[' savename '];

}

}

La diferencia entre la información del archivo devuelta por el método uploadOne y el método de carga es que hay solo una pieza de información de un solo archivo.

Reglas de nomenclatura para archivos cargados

El nombre guardado de los archivos cargados se utiliza para garantizar que los archivos no entren en conflicto ni se sobrescriban. La definición de reglas de nomenclatura se puede ajustar según su lógica empresarial y no es fija. Por ejemplo, si se utiliza la marca de tiempo para definir convenciones de nomenclatura, pueden ocurrir conflictos al cargar varios archivos al mismo tiempo (porque se pueden cargar varios archivos en un segundo), por lo que se deben establecer reglas de nomenclatura de carga apropiadas de acuerdo con las necesidades comerciales. Por cierto, aquí está el uso específico del parámetro saveName.

Primero, use el modo funcional

Si la cadena entrante es el nombre de una función, significa que la función genera dinámicamente el nombre del archivo cargado (excluyendo el sufijo del archivo), por ejemplo. :

//Nombrado por marca de tiempo

$Upload - gt; saveName = ' time

//Nombrado por secuencia GUID

$ Subir - > saveName = ' com_create_guid

También puedes usar funciones definidas por el usuario.

//Nombrado por una función personalizada.

$upload->saveName = ' myfun

La configuración de regla de nomenclatura predeterminada es utilizar la función uniqid para generar una secuencia de cadena única.

El valor de saveName admite dos métodos: matriz y cadena. Si es una función con un solo parámetro o sin parámetros, se puede configurar directamente con una cadena. Si necesita pasar parámetros adicionales, puede usar una matriz, por ejemplo:

//Utilice la función de fecha para generar reglas de nomenclatura y pasar los parámetros Y-m-d.

$Upload->saveName = array('date','Y-m-d');

//Si hay varios parámetros para pasar, puedes usar una matriz .

$Upload->saveName = array('myFun',array('__FILE__','val1','val2');

Si necesita utilizar el archivo original subido El nombre se puede pasar usando __FILE__, por lo que el resultado final de las reglas definidas anteriormente es el resultado de myFun('upload file name', ' val1 ', ' val2 ')

En segundo lugar, configure la carga directamente. Nombre del archivo

Si el parámetro pasado no es un nombre de función, se usará directamente como el nombre del archivo cargado, por ejemplo:

$Upload-gt; time(). _ rand();

Esto significa que el archivo cargado recibe el nombre de una combinación de una marca de tiempo y un número aleatorio.

Por supuesto, también puedes configurar uno. para el archivo cargado, si lo desea, se pueden usar reglas de nomenclatura para guardar permanentemente un archivo cargado.

$Upload->saveName = ' ThinkPHP

En tercer lugar, mantenga el nombre del archivo cargado sin cambios.

Si desea mantener el nombre del archivo cargado sin cambios, solo necesita configurar la especificación de nombre en vacío, por ejemplo:

$upload->saveName="";

En términos generales, no se recomienda mantenerlo sin cambios, ya que hará que se sobrescriba el mismo nombre de archivo después de cargarlo.

Guardar subdirectorio

SaveName. solo se usa para establecer las reglas para guardar archivos, no involucra directorios. Si desea guardar el archivo cargado en un subdirectorio, puede configurar los parámetros de autoSub y subName, por ejemplo:

/. /Abra el subdirectorio y guárdelo, y use la fecha (formato Ymd) como subdirectorio

$Upload->autoSub = true

$Upload->subName = array(' date','Ymd');

Puedes usar una función personalizada para guardar, por ejemplo:

//Abre el subdirectorio para guardar y llama a la función personalizada get_user_id para generar el subdirectory.

$Upload-gt; autoSub = true

$Upload->subName = 'get_user_id

Al igual que el parámetro saveName, la definición de subName puede ser en forma de matriz o cadena

Nota: si no está definida la función get_user_id, la cadena get_user_id se guardará directamente como el nombre del subdirectorio. Las reglas de guardado y nomenclatura de archivos se pueden usar juntas.

Controlador de carga

La clase de carga puede admitir diferentes entornos y se puede resolver mediante el controlador de carga correspondiente. De forma predeterminada, se utiliza el controlador de carga local. Por supuesto, también puede configurar el tipo de controlador de carga predeterminado actual, como por ejemplo:

FILE _ UPLOAD _ TYPE ' = gtFtp ',

' UPLOAD _ TYPE _ CONFIG ' = gt matriz (

host ' = gt192.168.1.200 ', // servidor

puerto ' = gt21, // puerto

tiempo de espera ' = gt90, / / timeout Time

Nombre de usuario ' = gt' Ftp_user ', // nombre de usuario

Contraseña ' = gt ' Ftp_pwd ', // contraseña),

indica el current Utilice FTP como controlador para la clase de carga y los archivos cargados se transferirán al servidor remoto especificado a través de Ftp.

También se puede especificar al crear una instancia de la clase de carga, por ejemplo:

$config = array(

maxSize' = 3145728,

Ruta raíz '="./Uploads/',

Guardar ruta ' = ' ',

saveName' = array('uniqid ',''),

exts' = array('jpg ', 'gif ', 'png ', 'jpeg '),

autoSub' = true,

subName' = array( 'fecha ', ' Ymd '),

);

$ftpConfig = array(

host ' = gt192.168.1.200 ', //servidor

Puerto' = gt21, //Puerto

Tiempo de espera' = gt90, //Tiempo de espera

Nombre de usuario' = gt' Ftp_user', //Nombre de usuario< / p>

Contraseña' = gt'FTP_pwd', //contraseña);

$Upload = new \Think\Upload($config,'Ftp',$Ftpconfig);/ /Instanciar clase de carga

Los controladores de carga actualmente admitidos incluyen local, Ftp, Sae, Bcs, Qiniu y ViewSonic Cloud.