PHP.mk документација

Користење на Phar архиви: Вовед

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

phar.using.intro.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека phar.using.intro.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
Користење на Phar архиви: Вовед

Референца за `phar.using.intro.php` со подобрена типографија и навигација.

phar.using.intro.php

Користење на Phar архиви: Вовед

Phar архивите се слични по концепт на Java JAR архивите, но се прилагодени на потребите и флексибилноста на PHP апликациите. Phar архивата се користи за дистрибуирање на комплетна PHP апликација или библиотека во една датотека. Phar архива апликацијата се користи исто како и секоја друга PHP апликација:

php coolapplication.phar
  

Користењето на Phar архива библиотека е идентично со користењето на која било друга PHP библиотека:

<?php
include 'coollibrary.phar';
?>

На phar stream wrapper обезбедува јадрото на phar екстензијата, и е објаснета во детали here. Phar stream wrapper овозможува пристап до датотеките во phar архива користејќи ги стандардните PHP функции за датотеки fopen(), opendir(), и други што работат на обични датотеки. The phar stream wrapper поддржува сите операции за читање/запишување на датотеки и директориуми.

<?php
include 'phar://coollibrary.phar/internal/file.php';
header('Content-type: image/jpeg');
// phars can be accessed by full path or by alias
echo file_get_contents('phar:///fullpath/to/coollibrary.phar/images/wow.jpg');
?>

На за да работи за класата имплементира напредна функционалност за пристап до датотеки и за креирање phar архиви. Класата Phar е објаснета во детали here.

<?php
try {
// open an existing phar
$p = new Phar('coollibrary.phar', 0);
// Phar extends SPL's DirectoryIterator class
foreach (new RecursiveIteratorIterator($p) as $file) {
// $file is a PharFileInfo class, and inherits from SplFileInfo
echo $file->getFileName() . "\n";
echo
file_get_contents($file->getPathName()) . "\n"; // display contents;
}
if (isset(
$p['internal/file.php'])) {
var_dump($p['internal/file.php']->getMetadata());
}

// create a new phar - phar.readonly must be 0 in php.ini
// phar.readonly is enabled by default for security reasons.
// On production servers, Phars need never be created,
// only executed.
if (Phar::canWrite()) {
$p = new Phar('newphar.tar.phar', 0, 'newphar.tar.phar');
// make this a tar-based phar archive, compressed with gzip compression (.tar.gz)
$p = $p->convertToExecutable(Phar::TAR, Phar::GZ);

// create transaction - nothing is written to newphar.phar
// until stopBuffering() is called, although temporary storage is needed
$p->startBuffering();
// add all files in /path/to/project, saving in the phar with the prefix "project"
$p->buildFromIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/path/to/project')), '/path/to/');

// add a new file via the array access API
$p['file1.txt'] = 'Information';
$fp = fopen('hugefile.dat', 'rb');
// copy all data from the stream
$p['data/hugefile.dat'] = $fp;

if (
Phar::canCompress(Phar::GZ)) {
$p['data/hugefile.dat']->compress(Phar::GZ);
}

$p['images/wow.jpg'] = file_get_contents('images/wow.jpg');
// any value can be saved as file-specific meta-data
$p['images/wow.jpg']->setMetadata(array('mime-type' => 'image/jpeg'));
$p['index.php'] = file_get_contents('index.php');
$p->setMetadata(array('bootstrap' => 'index.php'));

// save the phar archive to disk
$p->stopBuffering();
}
} catch (
Exception $e) {
echo
'Could not open Phar: ', $e;
}
?>

Дополнително, проверката на содржината на phar датотеката може да се направи со користење на кој било од поддржаните симетрични алгоритми за хеширање (MD5, SHA1, SHA256 и SHA512 ако е овозможено ext/hash) и со користење на асиметрично потпишување со јавен/приватен клуч користејќи OpenSSL. За да ги искористите предностите на OpenSSL потпишувањето, треба да генерирате пар јавен/приватен клуч, и да го користите приватниот клуч за да го поставите потписот користејќи класа) мора да имаат нивниот потпис креиран и поставен експлицитно преку. Дополнително, јавниот клуч извлечен со овој код:

<?php
$public
= openssl_get_publickey(file_get_contents('private.pem'));
$pkey = '';
openssl_pkey_export($public, $pkey);
?>
мора да биде зачуван до phar архивата што ја проверува. Ако phar архивата е зачувана како /path/to/my.phar, јавниот клуч мора да биде зачуван како /path/to/my.phar.pubkey, или phar нема да може да го провери OpenSSL потписот.

На за да работи за класата исто така обезбедува 3 статични методи, се добри места за почеток исто така. Ако дистрибуирате веб-базирана апликација, клучно е да знаете за, и поврзаниот метод and Овој метод обезбедува едноставен и лесен начин за креирање шаблон што ќе изврши почетна датотека од phar архивата. Дополнително, може да се наведат различни датотеки за извршување на phar архивата од командната линија наспроти преку веб-сервер. Шаблонот за лоадер исто така повикува кои се клучни за пакување на PHP апликации наменети за употреба на обични фајл системи и за веб-базирани апликации. се добри места за почеток исто така. Ако дистрибуирате веб-базирана апликација, клучно е да знаете за имплементира преден контролер кој ги насочува HTTP повиците до правилната локација во рамките на phar архивата. и поврзаниот метод се користи за менување на вредностите на $_SERVER низата за да се измамат апликациите што ги обработуваат овие вредности. Овој метод обезбедува едноставен и лесен начин за креирање шаблон што ќе изврши почетна датотека од phar архивата. Дополнително, може да се наведат различни датотеки за извршување на phar архивата од командната линија наспроти преку веб-сервер. Шаблонот за лоадер исто така повикува инструктира Phar да ги пресретне повиците до fopen(), file_get_contents(), opendir(), и сите функции базирани на stat (file_exists(), is_readable() и така натаму) и да ги насочи сите релативни патеки до локации во рамките на phar архивата.

As an example, packaging up a release of the popular phpMyAdmin application for use as a phar archive requires only this simple script and then phpMyAdmin.phar.tar.php Како пример, пакувањето на издание на популарната апликација phpMyAdmin за употреба како phar архива бара само ова едноставно скрипт и потоа

<?php
@unlink('phpMyAdmin.phar.tar.php');
copy('phpMyAdmin-2.11.3-english.tar.gz', 'phpMyAdmin.phar.tar.php');
$a = new Phar('phpMyAdmin.phar.tar.php');
$a->startBuffering();
$a["phpMyAdmin-2.11.3-english/config.inc.php"] = '<?php
/* Servers configuration */
$i = 0;

/* Server localhost (config:root) [1] */
$i++;
$cfg[\'Servers\'][$i][\'host\'] = \'localhost\';
$cfg[\'Servers\'][$i][\'extension\'] = \'mysqli\';
$cfg[\'Servers\'][$i][\'connect_type\'] = \'tcp\';
$cfg[\'Servers\'][$i][\'compress\'] = false;
$cfg[\'Servers\'][$i][\'auth_type\'] = \'config\';
$cfg[\'Servers\'][$i][\'user\'] = \'root\';
$cfg[\'Servers\'][$i][\'password\'] = \'\';


/* End of servers configuration */
if (strpos(PHP_OS, \'WIN\') !== false) {
$cfg[\'UploadDir\'] = getcwd();
} else {
$cfg[\'UploadDir\'] = \'/tmp/pharphpmyadmin\';
@mkdir(\'/tmp/pharphpmyadmin\');
@chmod(\'/tmp/pharphpmyadmin\', 0777);
}'
;
$a->setStub('<?php
Phar::interceptFileFuncs();
Phar::webPhar("phpMyAdmin.phar", "phpMyAdmin-2.11.3-english/index.php");
echo "phpMyAdmin is intended to be executed from a web browser\n";
exit -1;
__HALT_COMPILER();
'
);
$a->stopBuffering();
?>

Белешки од корисници 3 белешки

mediaboat at gmail dot com
пред 15 години
If you are trying to use Phar for a web application and just getting a blank screen, if you have enabled suhosin as well you have to add:

suhosin.executor.include.whitelist="phar"

to "/etc/php5/conf.d/suhosin.ini" file or your "php.ini" file.

once done everything works fine and dandy.
ch1902
12 години пред
If you are going to be running a webPhar from the browser, for example http://localhost/myphar.phar then you will probably have to associate the .phar extension with PHP in your webserver to interpret the PHP code. In Apache modify httpd.conf to include

AddType application/x-httpd-php .php .phar
frame86 на live dot com
12 години пред
The openssl example is completely wrong. The public key must be extracted from certificate and openssl_pkey_export() is for private key only.

Working example:
<?php
$publicKey = openssl_get_publickey(file_get_contents('certificate.pem'));
$details = openssl_pkey_get_details($publicKey);
file_put_contents('my.phar.pubkey', $details['key']);
?>

No need to say that the best and strongest encryption of my.phar/.phar/signature.bin is useless if the consumer does not check against a valid fingerprint or certificate of public key as anybody can open, read, recreate and sign a new archive with new key. Do you do? Think about it.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.