错误将整个Slim应用程序打包到Phar文件中

Alf*_*rez 6 php slim phar

我有一个具有以下目录结构的Slim应用程序:

app/
vendor/
www/

config.php
Run Code Online (Sandbox Code Playgroud)

在app/I中有项目的相关文件,在供应商/由作曲家管理的依赖项和www/web服务器可访问的文件中.

所以我想创建一个Phar文件:

<?php

$full_path = '/home/.../forms/';
$package_name = 'www/package.phar';

try {
    $phar = new Phar($full_path . $package_name, 
    FilesystemIterator::CURRENT_AS_FILEINFO |       FilesystemIterator::KEY_AS_FILENAME, $full_path . $package_name);

$phar->startBuffering();

$phar->addFile($full_path . 'www/index.php');
$phar->addFile($full_path . 'www/bootstrap.php');
$phar->addFile($full_path . 'www/session_start.php');


// Grab config
$phar->addFile($full_path . 'config.php');


$phar->buildFromIterator(new RecursiveIteratorIterator (new RecursiveDirectoryIterator('../app', FilesystemIterator::SKIP_DOTS)),'../app');
$phar->buildFromIterator(new RecursiveIteratorIterator (new RecursiveDirectoryIterator('../vendor', FilesystemIterator::SKIP_DOTS)),'../vendor');

$phar->setDefaultStub('bootstrap.php', 'bootstrap.php');

$phar->stopBuffering();

echo "Phar created.";

} catch (Exception $e) {
// handle errors here
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

所以我创建了phar,然后我有:

deploy.php

<?php

require_once 'phar://package.phar/bootstrap.php';
$app->run();
Run Code Online (Sandbox Code Playgroud)

但是在访问/deploy.php时我得到了:

[2015年5月15日星期五20:07:02] [错误] [客户端10.0.2.2] PHP警告:require_once(phar://package.phar/bootstrap.php)[function.require-once]:无法打开流:无法打开存档"/vagrant/www/package.phar",第3行[vri May 15 20:07:02] /vagrant/www/deploy.php中的无效别名[错误] [客户端10.0.2.2] PHP致命错误:require_once()[function.require]:在/中打开所需的'phar://package.phar/bootstrap.php'(include_path ='.:/ usr/share/php:/ usr/share/pear')失败第3行的vagrant/www/deploy.php

你认为我应该像这样解决它吗?

谢谢

C W*_*rtz 2

编辑:

“在 Vagrant 盒子的共享文件夹中创建 phar 导致了这个问题。一旦我将“输出”属性更改为共享文件夹之外的位置,错误就消失了。” 来源


你应该检查你的 php.ini: phar.require_hash = Off

或者使用setSignatureAlgorithm()签署您的 Phar

或者使用 Phing: <pharpackage ... signature="sha512"> ...