1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-26 00:12:06 +01:00
Files
archived-doc-es/reference/phar/fileformat.xml
Pedro Antonio Gil Rodríguez 24cd878148 Translation [es]
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@319125 c90b9560-bf6c-de11-be94-00142212c4b1
2011-11-13 22:08:09 +00:00

507 lines
18 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="phar.fileformat" xmlns="http://docbook.org/ns/docbook">
<title>¿Qué hace de un phar un phar y no un tar o un zip?</title>
<section xml:id="phar.fileformat.ingredients" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Ingredientes de todos los archivos Phar, independientes del formato de fichero</title>
<para>
Todos los archivos Phar contienen tres o cuatro secciones:
<orderedlist>
<listitem>
<para>una rutina de interoperabilidad (stub)</para>
</listitem>
<listitem>
<para>un manifiesto describiendo el contenido</para>
</listitem>
<listitem>
<para>el contenido de ficheros</para>
</listitem>
<listitem>
<para>[opcional] una firma para verificar la integridad del Phar (solamente el formtado de fichero phar)</para>
</listitem>
</orderedlist>
</para>
</section>
<section xml:id="phar.fileformat.stub" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Rutina de interoperabilidad del fichero Phar</title>
<para>
Una rutina de interoperabilidad de un Phar es un simple fichero PHP. La rutina de interoperabilidad más pequeña posible es:
</para>
<para>
<programlisting role="php">
<![CDATA[<?php __HALT_COMPILER();]]>
</programlisting>
</para>
<para>
Una rutina de interoperabilidad debe contener como mínimo el token <literal>__HALT_COMPILER();</literal>
en su conclusión. Normalmente, una rutina de interoperabilidad contendrá funcionalidad cargadora
como:
</para>
<para>
<programlisting role="php">
<![CDATA[
<?php
Phar::mapPhar();
include 'phar://miphar.phar/index.php';
__HALT_COMPILER();
]]>
</programlisting>
</para>
<para>
No existen restricciones para el contenido de una rutina de interoperabilidad de Phar, excepto el requerimiento
de que concluya con <literal>__HALT_COMPILER();</literal>. La etiqueta de cierre de PHP
<literal><![CDATA[?>]]></literal> se puede incluir u omitir, pero no puede haber
más de un espacio entre el <literal>;</literal> y la etiqueta de cierre
<literal><![CDATA[?>]]></literal> o la extensión phar no podrá
procesar el manifiesto del archivo Phar.
</para>
<para>
En un archivo phar basado en tar o zip, la rutina de interoperabilidad es alamcenada en el
fichero <literal>.phar/stub.php</literal>. La rutina de interoperabilidad predeterminada para archivos Phar
basados en phar contiene aproximadamente 7k de código para extraer el contenido
del phar y ejecutarlo. Véase <function>Phar::createDefaultStub</function>
para más información.
</para>
<para>
El alias de phar se alamcena en un archivo phar basado en zip en el
fichero <literal>.phar/alias.txt</literal> como texto plano.
</para>
</section>
<section xml:id="phar.fileformat.comparison" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Comparación cara a cara de Phar, Tar y Zip</title>
<para>
¿Cuáles son los aspectos positivos y negativos de los tres formatos de fichero soportados en
la extensión phar? Esta tabla intenta responder esta pregunta.
<table>
<title>Matriz de características: Phar contra Tar contra Zip</title>
<tgroup cols="4">
<thead>
<row>
<entry>Característica</entry>
<entry>Phar</entry>
<entry>Tar</entry>
<entry>Zip</entry>
</row>
</thead>
<tbody>
<row>
<entry>Formato de Fichero Estádar</entry>
<entry>No</entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>Puede ser ejecutado con la extensión Phar
<link linkend="phar.fileformat.phartip">[1]</link>
</entry>
<entry></entry>
<entry>No</entry>
<entry>No</entry>
</row>
<row>
<entry>Compresión por fichero</entry>
<entry></entry>
<entry>No</entry>
<entry></entry>
</row>
<row>
<entry>Compresión de archivo entero</entry>
<entry></entry>
<entry></entry>
<entry>No</entry>
</row>
<row>
<entry>Validación de firmas del archivo entero</entry>
<entry></entry>
<entry></entry>
<entry>Sí (PHP 5.3.1+)</entry>
</row>
<row>
<entry>Soporte para aplicaciones específicas de web</entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>Metainformación por fichero</entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>Metainformación del archivo entero</entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>Modificación creación de archivos
<link linkend="phar.fileformat.phartip2">[2]</link>
</entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>Soporte completa para todas las funciones de envoltura de flujos</entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>Puede ser creado/modificado incluso si phar.readonly=1
<link linkend="phar.fileformat.phartip3">[3]</link>
</entry>
<entry>No</entry>
<entry></entry>
<entry></entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para xml:id="phar.fileformat.phartip">
<tip>
<para>
[1] PHP solamente puede acceder directamente al contenido de un archivo Phar
sin la extensión Phar si está utilizando una <literal>rutina de interoperabilidad</literal>
que extraiga el contenido del archivo phar. La rutina de interoperabilidad
creada por <function>Phar::createDefaultStub</function> extrae
el archivo phar y ejecuta su contenido desde un directorio temporal
si no se encuentra la extensión phar.
</para>
</tip>
</para>
<para xml:id="phar.fileformat.phartip2">
<tip>
<para>
[2] Todos los accesos de escritura requieren que <literal>phar.readonly</literal>
sea deshabilitado en php.ini o directamente or la línea de comandos.
</para>
</tip>
</para>
<para xml:id="phar.fileformat.phartip3">
<tip>
<para>
[3] Solamente se pueden crear archivos tar y zip sin <literal>.phar</literal>
en su nombre de fichero y sin una rutina de interoperabilidad
ejecutable <literal>.phar/stub.php</literal> si phar.readonly=1.
</para>
</tip>
</para>
</section>
<section xml:id="phar.fileformat.tar" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Archivos phar basados en tar</title>
<para>
Los archivos basados en el formato de fichero tar siguen el formato de fichero USTAR
más moderno. El diseño de la cabecera de fichero tar los hace más eficientes
en el acceso que el formato de fichero zip, y casi tan efiniciente que el formato de
fichero phar. Los nombres de fichero están limitados a 255 bytes, incluyentdo
la ruta completa dentro de archivo phar. No existe límite en el número de ficheros
que un archivo phar basado en tar puede contener. Estos archivos pueden ser comprimidos completamente en
los formatos gzip o bzip2 y aún ser ejecutados por la extensión Phar.
</para>
<para>
Para comprimir un archivo entero, use <function>Phar::compress</function>.
Para descomprimir un archvo entero, use <function>Phar::decompress</function>.
</para>
</section>
<section xml:id="phar.fileformat.zip" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Archivos phar basados en zip</title>
<para>
Los archivos basados en el formato de fichero zip soportan varias característica incorporadas
del formato de fichero zip. La metainformación por fichero y del archivo entero es almacenda en
el comentario del fichero zip y en el comentario del archivo zip como una cadena serializada. Los comentarios
zip preexistentes serán leídos de manera satisfactoria como una cadena. La lectura/escritura de la
compresión por fichero está soportada con la compresión zlib, y el acceso a lectura está soportado
con la compresión bzip2. No existe límite en el número de ficheros
que un archivo phar basado en zip puede contener. Los directorios vacíos son almacenados en el archivo zip
como ficheros con una barra al final, como <literal>mi/directorio/</literal>
</para>
</section>
<section xml:id="phar.fileformat.phar" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>El Formato de Fichero Phar</title>
<para>
El formato de fichero phar está dispuesto literalmente como rutina_de_interoperabilidad/manifiesto/contenido/firma, y
almacena la información crucial de lo que está incluido en el archivo phar en su
<literal>manifiesto</literal>.
</para>
<para>
El manifiesto de phar es un formato altamente optimizado que permite especificaciones
por fichero de compresión de ficheros, permisos de ficheros, e incluso metainformación
definida por el usuario como el usuario o grupo del fichero. Todos los valores mayores que 1 byte son almacenados
en el orden de byte little-endian, con la excepción de la versión de la API, que
por motivos históricos es almacenada como 3 en el orden big-endian.
</para>
<para>
Todas las banderas sin utilizar están reservadas para un uso futuro, y no deben usarse
para almacenar información personalizada.to store custom information. Use la característica de metainformación por fichero
para alamacenar información personalizada sobre ficheros en particular.
</para>
<para>
El formato de fichero básico de un manifiesto Phar es como sigue:
</para>
<para>
<table>
<title>Formato del manifiesto global de Phar</title>
<tgroup cols="2">
<thead>
<row>
<entry>Tamaño en bytes</entry>
<entry>Descripción</entry>
</row>
</thead>
<tbody>
<row>
<entry>4 bytes</entry>
<entry>Longitud del manifiesto en bytes (límite 1 MB)</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>Número de ficheros en el Phar</entry>
</row>
<row>
<entry>2 bytes</entry>
<entry>Versión de la API del manifiesto de Phar (actualmente 1.0.0)</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>Banderas mapeadas en bit globales de Phar</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>Longitud del alisa del Phar</entry>
</row>
<row>
<entry>??</entry>
<entry>Alias del Phar (la longitud basada en lo anterior)</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>Longitud de la metainformación del Phar (<literal>0</literal> para ninguna)</entry>
</row>
<row>
<entry>??</entry>
<entry>Metainformación de Phar serializada, almacenada en el formato de <function>serialize</function></entry>
</row>
<row>
<entry>al menos 24 * número de entradas bytes</entry>
<entry>entradas para cada fichero</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</section>
<section xml:id="phar.fileformat.flags" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Banderas mapeadas en bit globales de Phar</title>
<para>
Aquí están las banderas mapeadas en bit actualmente reconocidas por la extensión Phar
para el mapeo de bit plano global de Phar:
</para>
<para>
<table>
<title>Valores de mapeo de bit reconocidos</title>
<tgroup cols="2">
<thead>
<row>
<entry>Valor</entry>
<entry>Descripción</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>0x00010000</literal></entry>
<entry>Si se establece, el Phar contendrá una firma de verificaición</entry>
</row>
<row>
<entry><literal>0x00001000</literal></entry>
<entry>
Si se establece, el Phar contendrá al menos 1 fichero que
está comprimido con la compresión zlib
</entry>
</row>
<row>
<entry><literal>0x00002000</literal></entry>
<entry>
Si se establece, el Phar contendrá al menos 1 fichero que
está comprimido con la compresión bzip
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</section>
<section xml:id="phar.fileformat.manifestfile" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Definición de la entrada de fichero del manifiesto de Phar</title>
<para>
Cada fichero en el manifiesto contiene la siguiente información:
</para>
<para>
<table>
<title>Entrada de fichero del manifiesto de Phar</title>
<tgroup cols="2">
<thead>
<row>
<entry>Tamaño en bytes</entry>
<entry>Descripción</entry>
</row>
</thead>
<tbody>
<row>
<entry>4 bytes</entry>
<entry>Longitud del nombre del fichero en bytes</entry>
</row>
<row>
<entry>??</entry>
<entry>Nombre del fichero (la longitud especificada en lo anterior)</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>Tamaño del fichero sin comprimir en bytes</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>Marca de tiempo Unix del fichero</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>Tamaño del fichero comprimido en bytes</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>Suma de verificación CRC32 del contenido del fichero si comprimir</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>Banderas mapeadas en bit específicas del fichero</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>Longitud de la metainformación del fichero serializada (<literal>0</literal> para ninguna)</entry>
</row>
<row>
<entry>??</entry>
<entry>Metainformación del fichero serializada, almacenada en el formato de <function>serialize</function></entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>
Observe que a partir de la versión 1.1.1 de la API, los directorios vacíos son almacenados como nombres de fichero
con una barra al final, como <literal>mi/directorio/</literal>
</para>
<para>
Los valores de mapeo de bit específicos de fichero reconocidos son:
</para>
<para>
<table>
<title>Valores de mapeo de bit reconocidos</title>
<tgroup cols="2">
<thead>
<row>
<entry>Valor</entry>
<entry>Descripción</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>0x000001FF</literal></entry>
<entry>
Estos bits están reservador para la definición de los permisos de fichero específicos
de un fichero. Los permisos son usados por <function>fstat</function>
y se pueden utilizar para recrear permisos deseados en la extracción.
</entry>
</row>
<row>
<entry><literal>0x00001000</literal></entry>
<entry>
Si se establece, el fichero es comprimido con la compresión zlib
</entry>
</row>
<row>
<entry><literal>0x00002000</literal></entry>
<entry>
Si se establece, el fichero es comprimido con la compresión bzip
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</section>
<section xml:id="phar.fileformat.signature" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Formato de la firma de Phar</title>
<para>
Los archivos Phar que contienen una firma siempre la tienen añadida al
final del archivo Phar después del cargador, el manifiesto y el contenido de ficheros.
Los dos formatos de firma soportados en este momento son MD5 y SHA1.
</para>
<para>
<table>
<title>Formato de firma</title>
<tgroup cols="2">
<thead>
<row>
<entry>Longitud en bytes</entry>
<entry>Descripción</entry>
</row>
</thead>
<tbody>
<row>
<entry>16 ó 20 bytes</entry>
<entry>
La firma real, 20 bytes para una firma SHA1,
16 bytes para una firma MD5, 32 bytes para una firma SHA256,
y 64 bytes para una firma SHA512.
</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>
Banderas de firma. <literal>0x0001</literal> se usa para
definir una firma MD5, <literal>0x0002</literal> se usa
para definir una firma SHA1, <literal>0x0004</literal> se usa
para definir una firma SHA256, y <literal>0x0008</literal> se
usaupara definir una firma SHA512. El soporte para las firmas SHA256 y SHA512
se introdujo con la versión 1.1.0 de la API.
</entry>
</row>
<row>
<entry>4 bytes</entry>
<entry>
<literal>GBMB</literal> mágico usado para definir la presencia de una firma.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</section>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->