It appears that the $rewrites parameter is a callback not an array. The implementation seems to be more in tune with this note http://www.mail-archive.com/internals@lists.php.net/msg33627.html , although, I was unable to figure out when or if a parameter gets passed to that function. I implemented it as follows:
<?php
$phar_name = 'mysite.phar';
function phar_rewrites()
{
$r = $_SERVER['REQUEST_URI'];
if (file_exists("phar://$phar_name$r")) return $r;
else return 'index.php';
}
$phar = new Phar();
/*
* do stuff to set up phar
*/
$phar->webPhar($phar_name, 'index.php', '404.php', $mimes, 'phar_rewrites');
?>
The above implementation will also stop the phar from sending out a 301 redirect to the index file when you rewrite (in apache) all requests to the phar.
Phar::webPhar
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::webPhar — mapPhar para archivos phar basados en web. Controlador principal para aplicaciones web
Descripción
$alias
[, string $index = "index.php"
[, string $f404
[, array $mimetypes
[, array $rewrites
]]]]] )Phar::mapPhar() para archivos phar basados en web. Este método procesa $_SERVER['REQUEST_URI'] y direcciona una petición de un navegador web a un fichero interno dentro de un archivo phar. En esencia, simula un servidor web, direccionando las peticiones al fichero correcto, enviando las cabeceras correctas y procesando ficheros PHP según sea necesario. Este poderoso método es parte de lo que hace sencillo convertir una apliación PHP existene en un archivo phar. Combinado con Phar::mungServer() y Phar::interceptFileFuncs(), cualquier aplicación web se puede utilizar sin modificaciones desde un archivo phar.
Phar::webPhar() debería llamarse solamente desde la rutina de interoperabilidad (stub) de un archivo phar (aquí hay más información de lo que es una rutina de interorperabilidad).
Parámetros
-
alias -
El alias que puede usarse en las URL phar:// para referirse a este archivo, en vez de su ruta completa.
-
index -
La ubicación dentro del phar del índice de directorios.
-
f404 -
La ubicación del script a ejecutar cuando no se encuentra el fichero. Este script debería mostrar las cabeceras HTTP 404 apropiadas.
-
mimetypes -
Un array que mapea extensiones de fichero adicionales a tipos de MIME. Si el mapeo predeterminado es suficiente, se ha de pasar un array vacío. Por omisión, estas extensiones son mapeadas a estos tipos de MIME:
<?php
$mimes = array(
'phps' => Phar::PHPS, // pasa 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, // procesado como PHP
'inc' => Phar::PHP, // procesado 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',
);
?> -
rewrites -
Un array que mapea URI al fichero interno, simulando la directiva mod_rewrite de apache. Por ejemplo:
direccionaría las llamadas a http://<host>/miphar.phar/mi_info al fichero phar:///path/to/miphar.phar/mi_info.php, conservando GET/POST. Eso no funciona completamente como mod_rewrite, ya que no coincidiría con http://<host>/miphar.phar/mi_info/otro.<?php
array(
'mi_info' => 'mi_info.php'
);
?>
Valores devueltos
No devuelve ningún valor.
Errores/Excepciones
Lanza una excepción de tipo PharException cuando no se puede abrir el fichero
interno para salida, o si se llama desde un lugar que no sea
una rutina de interoperabilidad. Si se pasa un array no válido a
mimetypes o a rewrites, se
lanza una excepción de tipo UnexpectedValueException.
Ejemplos
Ejemplo #1 Un ejemplo de Phar::webPhar()
Con el ejemplo siguiente, el phar creado mostrará Hola Mundo si uno explora /miphar.phar/index.php o /miphar.phar, y mostrará la fuente de index.phps si uno explora /miphar.phar/index.phps.
<?php
// creating the phar archive:
try {
$phar = new Phar('miphar.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) {
// manejar errores
}
?>
Ver también
- Phar::mungServer() - Definir una lista de hasta 4 variables $_SERVER que debería ser modificadas para la ejecución
- Phar::interceptFileFuncs() - Ordenar a phar interceptar fopen, file_get_contents, opendir, y todas las funciones relacionadas con estadísticas
