PHP 8.5.0 Alpha 1 available for testing

Phar::webPhar

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)

Phar::webPharRedirige una solicitud desde un navegador web a un fichero interno en el archivo phar

Descripción

final public static Phar::webPhar(
    ?string $alias = null,
    ?string $index = null,
    ?string $fileNotFoundScript = null,
    array $mimeTypes = [],
    ?callable $rewrite = null
): void

Phar::webPhar() actúa como Phar::mapPhar() para los phars orientados a web. Este método analiza $_SERVER['REQUEST_URI'] y enruta las solicitudes de un navegador hacia un fichero interno del archivo. Esto simula un servidor web, enrutando solicitudes al fichero correcto, enviando los encabezados adecuados y analizando el fichero PHP como corresponde. Combinado con Phar::mungServer() y Phar::interceptFileFuncs(), cualquier aplicación web puede ser utilizada sin cambios a partir del archivo phar.

Phar::webPhar() debe ser llamado únicamente desde el contenedor de carga de un archivo phar (consultar esto para obtener más información sobre los contenedores).

Parámetros

alias

El alias que puede ser utilizado en la URL phar:// para referirse al archivo, en lugar de su ruta completa.

index

La ubicación dentro del archivo del índice de directorio.

fileNotFoundScript

La ubicación del script a ejecutar cuando un fichero no es encontrado. Este script debe enviar los encabezados HTTP 404 correctos.

mimeTypes

Un array que hace corresponder extensiones de fichero adicionales a tipos MIME. Si las correspondencias por defecto son suficientes, se debe pasar un array vacío. Por defecto, estas correspondencias son las siguientes:

<?php
$mimes
= array(
'phps' => Phar::PHPS, // paso a highlight_file()
'c' => 'text/plain',
'cc' => 'text/plain',
'cpp' => 'text/plain',
'c++' => 'text/plain',
'dtd' => 'text/plain',
'h' => 'text/plain',
'log' => 'text/plain',
'rng' => 'text/plain',
'txt' => 'text/plain',
'xsd' => 'text/plain',
'php' => Phar::PHP, // analizar como PHP
'inc' => Phar::PHP, // analizar como PHP
'avi' => 'video/avi',
'bmp' => 'image/bmp',
'css' => 'text/css',
'gif' => 'image/gif',
'htm' => 'text/html',
'html' => 'text/html',
'htmls' => 'text/html',
'ico' => 'image/x-ico',
'jpe' => 'image/jpeg',
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'js' => 'application/x-javascript',
'midi' => 'audio/midi',
'mid' => 'audio/midi',
'mod' => 'audio/mod',
'mov' => 'movie/quicktime',
'mp3' => 'audio/mp3',
'mpg' => 'video/mpeg',
'mpeg' => 'video/mpeg',
'pdf' => 'application/pdf',
'png' => 'image/png',
'swf' => 'application/shockwave-flash',
'tif' => 'image/tiff',
'tiff' => 'image/tiff',
'wav' => 'audio/wav',
'xbm' => 'image/xbm',
'xml' => 'text/xml',
);
?>
rewrite

La función de reescritura que se pasa toma como único argumento un string y debe devolver un string o false.

Si se utiliza fast-cgi o cgi, el argumento pasado a la función es el valor de la variable $_SERVER['PATH_INFO']. De lo contrario, el argumento pasado a la función es el valor de la variable $_SERVER['REQUEST_URI'].

Si se devuelve un string, será utilizado en la ruta interna del fichero. Si se devuelve false, entonces webPhar() enviará un código HTTP 403.

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

Levanta una excepción PharException cuando el fichero interno no puede ser abierto o si la llamada se realiza fuera de un contenedor. Si se pasa un valor de array no válido en mimeTypes o si se pasa una función de devolución de llamada inválida al parámetro rewrite, entonces se levanta una excepción UnexpectedValueException.

Historial de cambios

Versión Descripción
8.0.0 fileNotFoundScript y rewrite ahora son nullable.

Ejemplos

Ejemplo #1 Ejemplo con Phar::webPhar()

En el ejemplo siguiente, el phar creado mostrará Hola mundo si alguien llama a /monphar.phar/index.php o /monphar.phar, y mostrará la fuente de index.phps si /monphar.phar/index.phps es llamado.

<?php
// el archivo phar es creado:
try {
$phar = new Phar('monphar.phar');
$phar['index.php'] = '<?php echo "Hola mundo"; ?>';
$phar['index.phps'] = '<?php echo "Hola mundo"; ?>';
$phar->setStub('<?php
Phar::webPhar();
__HALT_COMPILER(); ?>'
);
} catch (
Exception $e) {
// se manejan los errores aquí
}
?>

Ver también

add a note

User Contributed Notes 1 note

up
1
James
12 years ago
It seems that calling Phar::webPhar() from inside a function is a bad idea. Doing so will cause global variables in included files to not be global. For instance, do NOT try this:

<?php
$phar
= new Phar('test.phar.php');
$phar['test.php'] = '<?php
$FOO = "globals work";
function test() {
global $FOO;
echo "test: $FOO\n";
}
test();
?>'
;
$phar->setStub('<?php
function _bootstrap() {
Phar::webPhar();
}
_bootstrap();
__HALT_COMPILER(); ?>'
);
?>

The output will be "test:", not "test: globals work".
To Top