PHP Conference Nagoya 2025

Phar::mapPhar

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

Phar::mapPharLit le phar exécuté et charge son manifeste

Description

final public static Phar::mapPhar(?string $alias = null, int $offset = 0): bool

Cette méthode statique peut être utilisée seulement au sein du conteneur de chargement d'une archive Phar pour initialiser le phar quand il est exécuté directement ou quand il est inclus dans un autre script.

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 d'utiliser son chemin complet.

offset

Variable inutilisée, présente par souci de compatibilité avec la bibliothèque PHP_Archive de PEAR.

Valeurs de retour

Cette fonction retourne true en cas de succès ou false si une erreur survient.

Erreurs / Exceptions

Une exception PharException est levée si la méthode n'est pas appelée directement au sein de l'exécution de PHP, si aucun jeton __HALT_COMPILER(); n'est trouvé dans le fichier source actuel ou si le fichier ne peut pas être ouvert en lecture.

Exemples

Exemple #1 Exemple avec Phar::mapPhar()

mapPhar ne doit être utilisé qu'au sein du conteneur de chargement d'un phar. Utilisez loadPhar pour charger un phar externe en mémoire.

Voici un exemple de conteneur de chargement Phar qui utilise mapPhar.

<?php
function __autoload($class)
{
include
'phar://mon.phar/' . str_replace('_', '/', $class) . '.php';
}
try {
Phar::mapPhar('mon.phar');
include
'phar://mon.phar/demarrage.php';
} catch (
PharException $e) {
echo
$e->getMessage();
die(
'Ne peut pas initialiser le Phar');
}
__HALT_COMPILER();

Voir aussi

add a note

User Contributed Notes 1 note

up
0
phofstetter at sensational dot ch
11 years ago
Be careful with mapPhar and opcode caches like opcache: They might cache files included by the symbolic name based on the symbolic name you give.

This becomes a problem when a server is hosting multiple different versions of a phar file all using the same symbolic name because then subsequent include()'s in the phar file might load an already cached file from another version of the phar file.

Instead, generate a unique name and use that in mapPhar and in subsequent include()'s

See for example https://github.com/zendtech/ZendOptimizerPlus/issues/115#issuecomment-25612769 for the issue in the opcache module.
To Top