PHP Conference Japan 2024

Phar::buildFromDirectory

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

Phar::buildFromDirectory從目錄中的檔案建構 phar 封存

說明

public Phar::buildFromDirectory(字串 $directory, 字串 $pattern = ""): 陣列

注意事項:

此方法需要將 php.ini 設定 phar.readonly 設為 0 才能作用於 Phar 物件。否則,將會拋出 PharException 例外。

從目錄內容填充 phar 封存檔。選用的第二個參數是一個正規表達式 (pcre),用於排除檔案。任何符合正規表達式的檔名將會被包含,所有其他檔案將會被排除。如需更精細的控制,請使用 Phar::buildFromIterator()

參數

directory

包含要添加到封存檔的所有檔案的完整或相對目錄路徑。

pattern

一個選用的 pcre 正規表達式,用於篩選檔案列表。只有符合正規表達式的檔案路徑才會被包含在封存檔中。

傳回值

Phar::buildFromDirectory() 傳回一個關聯式陣列,將檔案的內部路徑映射到檔案系統上的完整檔案路徑。

錯誤/例外

當無法實例化內部目錄迭代器時,此方法會拋出 BadMethodCallException 例外,或者在儲存 phar 封存檔時發生錯誤時拋出 PharException 例外。

更新日誌

版本 說明
8.1.0 Phar::buildFromDirectory() 不再傳回 false

範例

範例 #1 Phar::buildFromDirectory() 範例

<?php
// 使用別名 "project.phar" 建立
$phar = new Phar('project.phar', 0, 'project.phar');
// 加入專案中的所有檔案
$phar->buildFromDirectory(dirname(__FILE__) . '/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));

$phar2 = new Phar('project2.phar', 0, 'project2.phar');
// 加入專案中的所有檔案,僅包含 php 檔案
$phar2->buildFromDirectory(dirname(__FILE__) . '/project', '/\.php$/');
$phar2->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>

另請參閱

新增註記

使用者貢獻的註記 1 則註記

dalfarra at codref dot com
7 年前
如果您想從封存中排除目錄(但包含所有其他內容),則正規表示式必須考慮檔案的完整路徑,而不僅僅是相對於來源資料夾的檔案或目錄名稱。

例如,如果我們想從封存中排除 "nbproject" 目錄(及其任何出現的情況)

/tmp/myfolder
/nbproject
/something
/something-else
/nbproject
/file1.php
/file2.php

正規表示式應為
<?php
$exclude
= '/^(?!(.*nbproject))(.*)$/i'; //忽略大小寫
?>

更完整的範例
<?php
$archive_file
= 'myarchive.tar';
$folder_to_compress = '/tmp/myfolder';
$archive = new PharData($archive_file);
$exclude = '/^(?!(.*nbproject))(.*)$/i';
$archive->buildFromDirectory($folder_to_compress,$exclude);
$archive->compress(Phar::GZ);
unlink($archive_file); // 因為我們已經取得了一個 tar.gz 檔
?>

此壓縮檔將包含
/
/something
/something-else
/file1.php
/file2.php
To Top