Π—Π°Π³Π»ΡƒΡˆΠΊΠ° Phar-Ρ„Π°ΠΉΠ»Π°

Π—Π°Π³Π»ΡƒΡˆΠΊΠΎΠΉ Phar являСтся простой PHP-Ρ„Π°ΠΉΠ». Минимально возмоТная Π·Π°Π³Π»ΡƒΡˆΠΊΠ° выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<?php __HALT_COMPILER();

Π—Π°Π³Π»ΡƒΡˆΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ лСксСму __HALT_COMPILER(); Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„Π°ΠΉΠ»Π°. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π·Π°Π³Π»ΡƒΡˆΠΊΠ° содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

<?php
Phar
::mapPhar();
include
'phar://myphar.phar/index.php';
__HALT_COMPILER();

На содСрТимоС Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ Phar Π½Π΅ Π½Π°Π»Π°Π³Π°ΡŽΡ‚ΡΡ ограничСния, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ лСксСмой __HALT_COMPILER();. Π—Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π³ PHP

?>
ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΈΠ»ΠΈ ΠΎΠΏΡƒΡ‰Π΅Π½, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ; ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ Ρ‚Π΅Π³ΠΎΠΌ
?>
, ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ phar Π½Π΅ смоТСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ манифСст Phar-Π°Ρ€Ρ…ΠΈΠ²Π°.

Π’ phar-Π°Ρ€Ρ…ΠΈΠ²Π΅, основанном Π½Π° tar ΠΈΠ»ΠΈ zip, Π·Π°Π³Π»ΡƒΡˆΠΊΠ° хранится Π² Ρ„Π°ΠΉΠ»Π΅ .phar/stub.php. Π—Π°Π³Π»ΡƒΡˆΠΊΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Phar-Π°Ρ€Ρ…ΠΈΠ²Π°, основанного Π½Π° phar, содСрТит ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ 7 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° для извлСчСния содСрТимого Phar-Π°Ρ€Ρ…ΠΈΠ²Π° ΠΈ Π΅Π³ΠΎ выполнСния. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Phar::createDefaultStub() для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π’ phar-Π°Ρ€Ρ…ΠΈΠ²Π΅, основанном Π½Π° tar ΠΈΠ»ΠΈ zip, псСвдоним phar хранится Π² Ρ„Π°ΠΉΠ»Π΅ .phar/alias.txt Π² Π²ΠΈΠ΄Π΅ простого тСкста.

οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 1 note

up
5
Frank Li ΒΆ
3 years ago
> but there can be no more than 1 space between the ; and the close tag

there must be **exactly** 1 space, or "\n".
below is how php trims the ending tag.

> seek_for("__HALT_COMPILER();");
> read_3_into(buffer);
> if ((*buffer == ' ' || *buffer == '\n') && *(buffer + 1) == '?' && *(buffer + 2) == '>') {
> do_things.