mirror of
https://github.com/php/doc-es.git
synced 2026-03-26 00:12:06 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@319125 c90b9560-bf6c-de11-be94-00142212c4b1
507 lines
18 KiB
XML
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>Sí</entry>
|
|
<entry>Sí</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Puede ser ejecutado con la extensión Phar
|
|
<link linkend="phar.fileformat.phartip">[1]</link>
|
|
</entry>
|
|
<entry>Sí</entry>
|
|
<entry>No</entry>
|
|
<entry>No</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Compresión por fichero</entry>
|
|
<entry>Sí</entry>
|
|
<entry>No</entry>
|
|
<entry>Sí</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Compresión de archivo entero</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
<entry>No</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Validación de firmas del archivo entero</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí (PHP 5.3.1+)</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Soporte para aplicaciones específicas de web</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Metainformación por fichero</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Metainformación del archivo entero</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Modificación creación de archivos
|
|
<link linkend="phar.fileformat.phartip2">[2]</link>
|
|
</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Soporte completa para todas las funciones de envoltura de flujos</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</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>Sí</entry>
|
|
<entry>Sí</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
|
|
-->
|