Zend_File_Transfer se entrega con varios filtros relacionados
con archivos que pueden usarse para automatizar varias tareas que suelen realizarse con archivos.
Tenga en cuenta que los filtros de archivo se aplican después de la validación. Además, los filtros
de archivo se comportan de forma ligeramente distinta a otros filtros. Siempre devolverán el nombre
del archivo y no el contenido modificado (lo cual sería una mala idea al trabajar con archivos de
1 GB). Todos los filtros que se proporcionan con
Zend_File_Transfer se pueden encontrar en el componente
Zend_Filter y se denominan
Zend_Filter_File_*. Los siguientes filtros están actualmente disponibles:
Decrypt: Este filtro puede descifrar un archivo cifrado.Encrypt: Este filtro puede cifrar un archivo.LowerCase: Este filtro puede convertir a minúsculas el contenido de un archivo de texto.Rename: Este filtro puede renombrar archivos, cambiar la ubicación e incluso forzar la sobrescritura de archivos existentes.UpperCase: Este filtro puede convertir a mayúsculas el contenido de un archivo de texto.
El uso de filtros es bastante sencillo. Existen varios métodos para agregar y manipular filtros.
addFilter($filter, $options = null, $files = null): Añade el filtro dado a la pila de filtros (opcionalmente solo al archivo o archivos especificados).$filterpuede ser una instancia real de filtro, o un nombre corto que especifique el tipo de filtro (por ejemplo, 'Rename').addFilters(array $filters, $files = null): Añade los filtros dados a la pila de filtros. Cada entrada puede ser un par tipo/opciones de filtro, o un array con la clave 'filter' que especifica el filtro (todas las demás opciones se considerarán opciones del filtro para su instanciación).setFilters(array $filters, $files = null): Sobrescribe cualquier filtro existente con los filtros especificados. Los filtros deben seguir la sintaxis deaddFilters().hasFilter($name): Indica si se ha registrado un filtro.getFilter($name): Devuelve un filtro previamente registrado.getFilters($files = null): Devuelve los filtros registrados; si se pasa$files, devuelve los filtros para ese archivo en particular o conjunto de archivos.removeFilter($name): Elimina un filtro previamente registrado.clearFilters(): Elimina todos los filtros registrados.
Ejemplo 34.30. Añadir filtros a una transferencia de archivos
$upload = new Zend_File_Transfer();
// Establece una nueva ruta de destino
$upload->addFilter('Rename', 'C:\picture\uploads');
// Establece una nueva ruta de destino y sobrescribe los archivos existentes
$upload->addFilter('Rename',
array('target' => 'C:\picture\uploads',
'overwrite' => true));
Ejemplo 34.31. Limitar filtros a archivos individuales
addFilter(), addFilters(), y
setFilters() aceptan cada uno un argumento final
$files. Este argumento puede usarse para
especificar un archivo particular o un array de archivos sobre los que aplicar el
filtro dado.
$upload = new Zend_File_Transfer();
// Establece una nueva ruta de destino y la limita solo a 'file2'
$upload->addFilter('Rename', 'C:\picture\uploads', 'file2');
Generalmente debería usar simplemente el método addFilters(), que
puede llamarse varias veces.
Ejemplo 34.32. Añadir varios filtros
A menudo es más sencillo simplemente llamar a addFilter() varias veces.
Una llamada por cada filtro. Esto también aumenta la legibilidad y hace que su código
sea más mantenible. Como todos los métodos ofrecen una interfaz fluida, puede encadenar
las llamadas como se muestra a continuación:
$upload = new Zend_File_Transfer();
// Establece un tamaño de archivo de 20000 bytes
$upload->addFilter('Rename', 'C:\picture\newjpg', 'file1')
->addFilter('Rename', 'C:\picture\newgif', 'file2');
![]() |
Nota |
|---|---|
Tenga en cuenta que, aunque está permitido establecer el mismo filtro varias veces, hacerlo puede ocasionar problemas al usar diferentes opciones para el mismo filtro. |
El filtro Decrypt permite descifrar un archivo cifrado.
Este filtro hace uso de Zend_Filter_Decrypt. Admite las
extensiones Mcrypt y OpenSSL de
PHP. Consulte la sección relacionada para obtener detalles sobre cómo establecer las
opciones para el descifrado y qué opciones se admiten.
Este filtro admite una opción adicional que puede usarse para guardar el archivo descifrado con otro nombre de archivo. Establezca la opción filename para cambiar el nombre de archivo donde se almacenará el archivo descifrado. Si omite esta opción, el archivo descifrado sobrescribirá el archivo cifrado original.
Ejemplo 34.33. Uso del filtro Decrypt con Mcrypt
$upload = new Zend_File_Transfer_Adapter_Http();
// Añade un filtro para descifrar el archivo cifrado subido
// con mcrypt y la clave mykey
$upload->addFilter('Decrypt',
array('adapter' => 'mcrypt', 'key' => 'mykey'));
Ejemplo 34.34. Uso del filtro Decrypt con OpenSSL
$upload = new Zend_File_Transfer_Adapter_Http();
// Añade un filtro para descifrar el archivo cifrado subido
// con openssl y las claves proporcionadas
$upload->addFilter('Decrypt',
array('adapter' => 'openssl',
'private' => '/path/to/privatekey.pem',
'envelope' => '/path/to/envelopekey.pem'));
El filtro Encrypt permite cifrar un archivo.
Este filtro hace uso de Zend_Filter_Encrypt. Admite las
extensiones Mcrypt y OpenSSL de
PHP. Consulte la sección relacionada para obtener detalles sobre cómo establecer las
opciones para el cifrado y qué opciones se admiten.
Este filtro admite una opción adicional que puede usarse para guardar el archivo cifrado con otro nombre de archivo. Establezca la opción filename para cambiar el nombre de archivo donde se almacenará el archivo cifrado. Si omite esta opción, el archivo cifrado sobrescribirá el archivo original.
Ejemplo 34.35. Uso del filtro Encrypt con Mcrypt
$upload = new Zend_File_Transfer_Adapter_Http();
// Añade un filtro para cifrar el archivo subido
// con mcrypt y la clave mykey
$upload->addFilter('Encrypt',
array('adapter' => 'mcrypt', 'key' => 'mykey'));
Ejemplo 34.36. Uso del filtro Encrypt con OpenSSL
$upload = new Zend_File_Transfer_Adapter_Http();
// Añade un filtro para cifrar el archivo subido
// con openssl y las claves proporcionadas
$upload->addFilter('Encrypt',
array('adapter' => 'openssl',
'public' => '/path/to/publickey.pem'));
El filtro LowerCase permite cambiar a minúsculas el contenido de un
archivo. Solo debería usar este filtro en archivos de texto.
En la inicialización puede indicar una cadena que se usará como codificación. O puede usar
el método setEncoding() para establecerla posteriormente.
Ejemplo 34.37. Uso del filtro LowerCase
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('MimeType', 'text');
// Añade un filtro para convertir a minúsculas el archivo de texto subido
$upload->addFilter('LowerCase');
// Añade un filtro para convertir a minúsculas el archivo subido pero solo para uploadfile1
$upload->addFilter('LowerCase', null, 'uploadfile1');
// Añade un filtro para convertir a minúsculas con codificación establecida en ISO-8859-1
$upload->addFilter('LowerCase', 'ISO-8859-1');
![]() |
Nota |
|---|---|
Tenga en cuenta que, debido a que las opciones para el filtro LowerCase son opcionales,
debe indicar |
El filtro Rename permite cambiar el destino de la subida,
el nombre de archivo y también sobrescribir archivos existentes. Admite las siguientes opciones:
source: El nombre y destino del archivo antiguo que se va a renombrar.
target: El nuevo directorio, o nombre de archivo del archivo.
overwrite: Establece si el archivo antiguo sobrescribe al nuevo si ya existe. El valor predeterminado es
FALSE.
Adicionalmente también puede usar el método setFile() para establecer
archivos, lo que elimina todos los establecidos previamente, addFile() para añadir un nuevo
archivo a los existentes, y getFile() para obtener todos los archivos
realmente establecidos. Para simplificar las cosas, este filtro entiende varias notaciones y tanto los
métodos como el constructor entienden las mismas notaciones.
Ejemplo 34.38. Uso del filtro Rename
$upload = new Zend_File_Transfer_Adapter_Http();
// Establece una nueva ruta de destino para todos los archivos
$upload->addFilter('Rename', 'C:\mypics\new');
// Establece una nueva ruta de destino solo para uploadfile1
$upload->addFilter('Rename', 'C:\mypics\newgifs', 'uploadfile1');
Puede usar diferentes notaciones. A continuación se muestra una tabla en la que encontrará una descripción y la intención de las notaciones admitidas. Tenga en cuenta que cuando use el Adaptador o el Elemento de formulario no podrá usar todas las notaciones descritas.
Tabla 34.1. Diferentes notaciones del filtro rename y su significado
| notación | descripción |
|---|---|
addFile('C:\uploads')
|
Especifica una nueva ubicación para todos los archivos cuando la cadena dada es un directorio. Tenga en cuenta que obtendrá una excepción si el archivo ya existe; vea el parámetro overwrite. |
addFile('C:\uploads\file.ext')
|
Especifica una nueva ubicación y nombre de archivo para todos los archivos cuando la cadena dada no se detecta como directorio. Tenga en cuenta que obtendrá una excepción si el archivo ya existe; vea el parámetro overwrite. |
addFile(array('C:\uploads\file.ext', 'overwrite' =>
true))
|
Especifica una nueva ubicación y nombre de archivo para todos los archivos cuando la cadena dada no se detecta como directorio y sobrescribe un archivo existente con el mismo nombre de destino. Tenga en cuenta que no recibirá ninguna notificación de que un archivo fue sobrescrito. |
addFile(array('source' => 'C:\temp\uploads', 'target' =>
'C:\uploads'))
|
Especifica una nueva ubicación para todos los archivos en la ubicación anterior cuando las cadenas dadas se detectan como directorios. Tenga en cuenta que obtendrá una excepción si el archivo ya existe; vea el parámetro overwrite. |
| addFile(array('source' => 'C:\temp\uploads', 'target' => 'C:\uploads', 'overwrite' => true)) | Especifica una nueva ubicación para todos los archivos en la ubicación anterior cuando las cadenas dadas se detectan como directorios y sobrescribe un archivo existente con el mismo nombre de destino. Tenga en cuenta que no recibirá ninguna notificación de que un archivo fue sobrescrito. |
El filtro UpperCase permite cambiar a mayúsculas el contenido de un
archivo. Solo debería usar este filtro en archivos de texto.
En la inicialización puede indicar una cadena que se usará como codificación. O puede usar
el método setEncoding() para establecerla posteriormente.
Ejemplo 34.39. Uso del filtro UpperCase
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('MimeType', 'text');
// Añade un filtro para convertir a mayúsculas el archivo de texto subido
$upload->addFilter('UpperCase');
// Añade un filtro para convertir a mayúsculas el archivo subido pero solo para uploadfile1
$upload->addFilter('UpperCase', null, 'uploadfile1');
// Añade un filtro para convertir a mayúsculas con codificación establecida en ISO-8859-1
$upload->addFilter('UpperCase', 'ISO-8859-1');
![]() |
Nota |
|---|---|
Tenga en cuenta que, debido a que las opciones para el filtro UpperCase son opcionales,
debe indicar |
![[Note]](images/note.png)