加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – PHAR createDefaultStub应该区分CLI和浏览器吗?

发布时间:2020-12-13 16:59:55 所属栏目:PHP教程 来源:网络整理
导读:我的问题是关于createDefaultStub的$indexfile和$webindexfile.我的理解是,如果请求来自cli,则将提供$indexfile,并且将从浏览器请求提供$webindexfile. 我从任何一个来源得到相同的回应(‘后端’),我误解了这种行为吗?或者我的实施错了? 谢谢! 目录树: P
我的问题是关于createDefaultStub的$indexfile和$webindexfile.我的理解是,如果请求来自cli,则将提供$indexfile,并且将从浏览器请求提供$webindexfile.

我从任何一个来源得到相同的回应(‘后端’),我误解了这种行为吗?或者我的实施错了?

谢谢!

目录树:

PHAR
+--app
    +--backend
        +--index.php //prints 'backend'
    +--frontend
        +--index.php //prints 'frontend'
+--build //destination for PHAR
+--build.php
+--index.php

/build.php

$phar = new Phar("build/app.phar","app.phar");
$phar->buildFromDirectory("./app");
$phar->setStub(
$phar->createDefaultStub(
    "backend/index.php","frontend/index.php"
)

);

的index.php

include('phar://./build/app.phar');

从PHP手册:

createDefaultStub ([ string $indexfile [,string $webindexfile ]] )

解决方法

我的原帖:
您是否已尝试直接从浏览器运行您的phar文件? (如果您的网络服务器无法将您的.phar文件识别为php文件,则可以暂时将其重命名为.php).

你会发现它会起作用.如果您的网址是http://localhost/phar/build/app.phar,它会自动重定向到http://localhost/phar/build/app.phar/frontend/index.php.从cli,显然没有重定向,它会自动使用backend / index.php文件(这是你的phar文件中的默认值).

这种重定向行为不会发生在您自己的index.php中. (这就是你在前端看到backend / index.php文件的原因,这是默认的)你必须自己构建重定向部分.

如果你自己构建它,你可以引用你的后端/前端文件,如下所示:

include('phar://./build/app.phar/frontend/index.php');

请注意,如果您将phar文件包含在另一个文件中,那么php将其视为库phar文件,而不是完整的应用程序phar文件[1].我认为他们没有考虑到你可能希望你的库在cli上有其他行为而不是webbrowser.

[1] http://php.net/manual/en/phar.using.intro.php(第一段)

编辑:

更多调查显示您可能发现了一个错误.在php中有两种运行phar的方法.一个是使用流包装器phar(就像你正在做的那样),并且正在使用运行的phar文件中的代码,以防你没有pha??r流包装器.

如果您使用运行的代码,如果您没有pha??r流包装器,它将按预期工作.

试试这个:

>将您的phar重命名为.php
>使用此index.php:

码:

stream_wrapper_unregister('phar');
include('./build/app.php');

您将看到它现在按预期工作(但由于您不再使用流包装器中的构建,因此速度较慢).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读