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 pour les phars orientés web. Contrôleur pour les applications web
Description
Phar::mapPhar() pour les phars orientés web. Cette méthode parse $_SERVER['REQUEST_URI'] et route les requêtes d'un navigateur vers un fichier interne à l'archive. Dans le principe, cela simule un serveur web, en routant des requêtes vers le bon fichier, en envoyant les bons en-têtes et analysant le fichier PHP comme il convient. Cette méthode puissante permet de convertir facilement des applications PHP en archive phar. Combinée avec Phar::mungServer() et Phar::interceptFileFuncs(), n'importe quelle application web peut être utilisée sans changement à partir de l'archive phar.
Phar::webPhar() doit être appelé uniquement à partir du conteneur de chargement d'une archive phar (lisez ceci pour en savoir davantage sur les conteneurs).
Liste de paramètres
- alias
-
L'alias qui peut être utilisé dans l'URL phar:// pour se référer à l'archive, plutôt que son chemin complet.
- index
-
L'emplacement au sein de l'archive de l'index de répertoire, par défaut index.php.
- f404
-
L'emplacement du script à exécuter quand un fichier n'est pas trouvé. Ce script doit envoyer des en-têtes HTTP 404 corrects.
- mimetypes
-
Un tableau faisant correspondre des extensions de fichier supplémentaires à des types MIME. Par défaut, ces correspondances sont les suivantes :
<?php
$mimes = array(
'phps' => 2, // passage vers 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' => 1, // parse en tant que PHP
'inc' => 1, // parse en tant que 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 tableau faisant correspondre des URI à des fichiers internes, simulant le mod_rewrite de apache. Par exemple:
<?php
array(
'moninfo' => 'moninfo.php'
);
?>routera les appels à http://<hôte>/monphar.phar/moninfo vers le fichier phar:///chemin/vers/monphar.phar/moninfo.php, en préservant les GET/POST. Ca ne fonctionne pas tout à fait comme mod_rewrite car ça ne fera pas correspondre http://<hôte>/monphar.phar/moninfo/unautre.
Valeurs de retour
Aucune valeur n'est retournée.
Erreurs / Exceptions
Lève une exception PharException quand le fichier interne ne peut pas être ouvert ou si l'appel est fait en dehors d'un conteneur. Si un valeur de tableau non valide est passée dans mimetypes ou dans rewrites , une exception UnexpectedValueException est levée.
Exemples
Exemple #1 Exemple avec Phar::webPhar()
Dans l'exemple ci-dessous, le phar créé affichera Salut tout le monde si quelqu'un appelle /monphar.phar/index.php ou /monphar.phar, et affichera la source de index.phps si /monphar.phar/index.phps est appelé.
<?php
// l'archive phar est créée :
try {
$phar = new Phar('monphar.phar');
$phar['index.php'] = '<?php echo "Salut tout le monde"; ?>';
$phar['index.phps'] = '<?php echo "Salut tout le monde"; ?>';
$phar->setStub('<?php
Phar::webPhar();
__HALT_COMPILER(); ?>');
} catch (Exception $e) {
// on traite les erreurs ici
}
?>
Voir aussi
- Phar::mungServer() - Définit une liste de maximum 4 variables $_SERVER qui doivent être modifiées lors de l'exécution
- Phar::interceptFileFuncs() - Informe phar qu'il doit intercepter les fonctions de fichiers
Phar::webPhar
06-Oct-2009 11:18
