PHP 개발을 위한 아카이브 형식 phar 파일의 개념과 사용법에 대한 자세한 설명

小云云
풀어 주다: 2023-03-17 20:12:02
원래의
1177명이 탐색했습니다.

PHP 애플리케이션은 여러 파일로 구성되는 경우가 많습니다. 하나의 파일로 모아서 배포하고 실행할 수 있으면 매우 편리합니다. 윈도우 운영체제의 설치 프로그램, jquery 라이브러리, 이를 달성하기 위해 PHP는 phar 문서 파일 형식을 사용합니다. 이 개념은 Java의 jar에서 파생되었지만 주로 Java용으로 설계되었습니다. PHP의 웹 환경은 JAR 아카이브와 달리 Phar 아카이브는 기본적으로 처리되므로 생성하거나 사용하는 데 추가 도구가 필요하지 않습니다. PHP 스크립트를 사용하여 생성하거나 추출하기만 하면 됩니다. phar는 PHP와 PHP를 합친 합성어입니다. 아카이브 구성, php 아카이브 파일을 뜻하는 것을 알 수 있습니다.

phar의 공식 웹사이트 문서는 http://php.net/manual/zh/book.phar.php를 참조하세요. 이 문서는 공식 웹사이트 문서

를 보완하는 것으로 볼 수 있습니다. Phar 아카이브 파일은 tar 아카이브, zip 아카이브, phar 아카이브의 세 가지 형식으로 제공됩니다. 처음 두 가지 유형의 실행을 위해서는 Phar 확장 지원을 설치해야 하며 여기서는 주로 phar 아카이브 형식에 대해 설명합니다.

phar 형식 아카이브 파일은 직접 실행할 수 있으며 생성은 Phar 확장에 의존하며 직접 작성한 PHP 스크립트에 의해 생성됩니다.

Phar 확장은 PHP의 새로운 개념이 아닙니다. 이는 php5.3에서 PHP에 내장되었습니다. 원래는 PHP로 작성되었으며 이름이 지정되었습니다. PHP_Archive는 2005년에 PEAR 라이브러리에 추가되었습니다. 이 문제에 대한 순수한 PHP 솔루션은 실제로 매우 느리기 때문에 2007년 순수 C 언어 확장으로 다시 작성되었으며 SPL Phar를 사용하여 ArrayAccess 객체 탐색을 추가했습니다. 아카이빙 지원. 그 이후로 Phar 아카이브의 성능을 향상하기 위해 많은 작업이 이루어졌습니다.

Phar 확장은 PHP 스트림 래퍼에 따라 달라집니다. 이를 위해 PHP 스트림 및 래퍼 래퍼의 개념과 사용 예에 ​​대한 자세한 설명은 이전 기사를 참조하세요. 많은 PHP 애플리케이션이 phar 형식으로 배포되고 실행됩니다. 유명한 애플리케이션에는 종속성 관리(작성기 및 단위 테스트)가 포함됩니다. 생성, 실행, 추출 및 복원 방법을 살펴보겠습니다.

phar 파일 생성:

먼저 php.ini에서 phar.readonly 옵션을 수정하고 앞의 세미콜론을 제거한 후 값을 off로 변경합니다. 보안상의 이유로 이 옵션은 php.ini에서 비활성화된 경우(값은 0 또는 off입니다.) ) 이면 사용자 스크립트에서 켜거나 끌 수 있습니다. php.ini에서 켜면 사용자 스크립트를 끌 수 없으므로 여기서는 예제를 보여주기 위해 끄기로 설정합니다.

서버 루트 디렉터리에 프로젝트 폴더를 생성해 보겠습니다. 디렉터리의 구조는 다음과 같습니다.

file
  -yunek.js
  -yunke.css
lib
  -lib_a.php
template
  -msg.html
index.php
Lib.php
로그인 후 복사


파일 폴더에는 내용이 비어 있는 두 개의 js 및 css 파일이 있습니다. 이는 phar가 여러 파일 형식을 포함할 수 있다는 점만 보여줍니다.

lib_a.php의 내용은 다음과 같습니다:

<?php
/**
 * Created by yunke.
 * User: yunke
 * Date: 2017/2/10
 * Time: 9:23
 */
function show(){
  echo "l am show()";
}
로그인 후 복사


msg.html 내용은 다음과 같습니다.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>phar</title>
</head>
<body>
<?=$str; ?>
</body>
</html>
로그인 후 복사


index.php의 내용은 다음과 같습니다:

<?php
/**
 * Created by yunke.
 * User: yunke
 * Date: 2017/2/10
 * Time: 9:17
 */
require "lib/lib_a.php";
show();
$str = isset($_GET["str"]) ? $_GET["str"] : "hello world";
include "template/msg.html";
로그인 후 복사


Lib.php의 내용은 다음과 같습니다:

<?php
/**
 * Created by yunke.
 * User: yunke
 * Date: 2017/2/10
 * Time: 9:20
 */
function yunke()
{
  echo "l am yunke()";
}
로그인 후 복사


프로젝트 파일이 준비되었으며 생성되기 시작했습니다. 이제 프로젝트 폴더와 동일한 디렉터리에 yunkeBuild.php를 생성하여 phar 형식 파일을 생성합니다.

<?php
/**
 * Created by yunke.
 * User: yunke
 * Date: 2017/2/10
 * Time: 9:36
 */
//产生一个yunke.phar文件
$phar = new Phar(&#39;yunke.phar&#39;, 0, &#39;yunke.phar&#39;);
// 添加project里面的所有文件到yunke.phar归档文件
$phar->buildFromDirectory(dirname(__FILE__) . &#39;/project&#39;);
//设置执行时的入口文件,第一个用于命令行,第二个用于浏览器访问,这里都设置为index.php
$phar->setDefaultStub(&#39;index.php&#39;, &#39;index.php&#39;);
로그인 후 복사


그런 다음 브라우저에서 이 yunkeBuild.php 파일에 액세스하면 yunke.phar 파일이 생성됩니다. 이때 서버 루트 디렉터리 구조는 다음과 같습니다.

project
yunkeBuild.php
yunke.phar
로그인 후 복사


이는 phar 아카이브 파일을 생성하는 가장 간단한 프로세스입니다. 자세한 내용은 공식 웹사이트를 참조하세요. 프로젝트에 단일 실행 항목이 없으면 phar 아카이브 파일을 사용하는 것이 적합하지 않습니다.

phar 아카이브 파일 사용법:

위에서 생성한 phar 파일을 사용하는 방법을 보여주기 위해 서버 루트 디렉터리에 index.php 파일을 생성합니다. 내용은 다음과 같습니다.

<?php
/**
 * Created by yunke.
 * User: yunke
 * Date: 2017/2/8
 * Time: 9:33
 */
require "yunke.phar";
require "phar://yunke.phar/Lib.php";
yunke();
로그인 후 복사


index.php 파일에 첫 번째 줄만 있는 경우 아카이브 파일을 사용하지 않을 때와 정확히 동일하게 다음 코드를 추가합니다:


require "project/index.php";
로그인 후 복사


두 번째 줄이 없으면 세 번째 줄의 yunke()는 정의되지 않았다는 메시지를 표시하므로 phar 파일이 필요할 때 그 안에 있는 모든 파일을 가져오지 않고 항목 실행 파일만 가져오는 것을 알 수 있습니다. 그러나 실제 프로젝트에서는 이 항목 파일에서 사용해야 하는 다른 파일을 가져오는 경우가 많습니다. 이 예에서는 항목 실행 파일이 project/index.php


입니다.

phar 파일 추출 및 복원:

가끔 phar에 포함된 파일의 소스코드가 궁금할 때가 있는데, 이때 phar 파일을 복원해야 한다면 phpstorm과 같은 IDE 도구를 이용하면 된다. 10에서 바로 열 수 있습니다. 수정이 필요하다면 압축을 풀어야 합니다. 데모를 위해 작곡가.phar을 다운로드하여 서버 디렉토리에 넣고, 루트 디렉토리에 get.php 파일을 생성합니다. 다음 콘텐츠:

<?php
/**
 * Created by yunke.
 * User: yunke
 * Date: 2017/2/9
 * Time: 19:02
 */
$phar = new Phar(&#39;composer.phar&#39;);
$phar->extractTo(&#39;composer&#39;); //提取一份原项目文件
$phar->convertToData(Phar::ZIP); //另外再提取一份,和上行二选一即可
로그인 후 복사


用浏览器访问这个文件,即可提取出来,以上列子展示了两种提取方式:第二行将建立一个composer目录,并将提取出来的内容放入,第三行将产生一个composer.zip文件,解压即可得到提取还原的项目文件。

补充:

1、在部署phar文件到生产服务器时需要调整服务器的配置,避免当访问时浏览器直接下载phar文件

2、可以为归档设置别名,别名保存在归档文件中永久保存,它可以用一个简短的名字引用归档,而不管归档文件在文件系统中存储在那里,设置别名:


$phar = new Phar(&#39;lib/yunke.phar&#39;, 0);
$phar->setAlias ( "yun.phar");
로그인 후 복사


设置别名后可以如下使用:


<?php
require "lib/yunke.phar";
require "phar://yun.phar/Lib.php"; //使用别名访问归档文件
require "phar://lib/yunke.phar/Lib.php"; //当然仍然可以使用这样的方式去引用
로그인 후 복사


如果在制作phar文件时没有指定别名,也可以在存根文件里面使用Phar::mapPhar('yunke.phar');指定

3、归档文件中有一个存根文件,其实就是一段php执行代码,在制作归档时可以设置,直接执行归档文件时,其实就是执行它,所以它是启动文件;在脚本中包含归档文件时就像包含普通php文件一样包含它并运行,但直接以phar://的方式包含归档中某一个文件时不会执行存根代码, 往往在存根文件里面require包含要运行的其他文件,对存根文件的限制仅为以__HALT_COMPILER();结束,默认的存根设计是为在没有phar扩展时能够运行,它提取phar文件内容到一个临时目录再执行,不过从php5.3开始该扩展默认内置启用了

4、制作的phar文件不能被改动,因此配置文件之类的文件需要另外放置在归档文件外面

5、mapPhar函数:这个函数只应该在stub存根代码中调用,在没有设置归档别名的时候可以用来设置别名,打开一个引用映射到phar流。

大家学会了吗?

相关推荐:

php 中phar包的使用教程详解

php中phar包的使用教程

分享PHP中phar包的使用实例教程

위 내용은 PHP 개발을 위한 아카이브 형식 phar 파일의 개념과 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!