如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

在前几篇phar经验文章中,我们知道构建一个phar文件,需要指定phar的入口存根文件,而这个存根文件默认是index.php,但是可以创建两个不同的存根文件,为什么需要两个不同的存根文件呢?本篇文章中,苏南大叔将要讲述,这两个不同的存根文件的不同所在,也就是phar和webphar的区别,涉及函数是:createDefaultStubsetStub

前言

本篇文章的基础文章是:https://newsn.net/say/php-phar-create.html ,如果您还没有阅读过这篇文章,建议您先看看这篇文章里面,讲述的创建一个phar文件的相关经验。

创建的phar文件,可以做为一个phar文件供其他其它php代码require或者include,这个时候,就是普通的phar模式。当通过地址url,浏览这个phar文件的时候,这个时候,访问的是这个phar文件下面的作为webphar的存根文件。这个时候,就是webphar模式了。所以说,其实是同一个文件,只不过使用的方式不同,所以出了两个概念。

延伸阅读:https://doc.php.sh/zh/phar.createdefaultstub.html ,官方的这个说明中,第一个参数cli.php太具有迷惑力,实际上cli.php可不一定用在命令行里面的,普通的require("phar.phar")的时候,都是走cli.php这条通道的。

对比图

我们的范例phar文件中,有个lib.php用于createdefaultstub的第一个参数,即最常见的require模式。还有个index.php用于webphar模式。

phar和webphar的入口区别 - phar_source

phar和webphar的入口区别(图3-1)

我们稍稍修改一下createDefaultStub函数的参数。

build.php

//...
$phar->setStub($phar->createDefaultStub('lib.php','index.php'));
//...

demo.php

include "phar.phar";

这个demo.php,无论是通过url访问,还是通过命令行模式执行,都加载执行的是lib.php这个入口。

phar和webphar的入口区别 - require_lib

phar和webphar的入口区别(图3-2)

而通过url访问phar文件的时候,才是执行的webphar模式下的index.php。注意:这种情况下,一般来说,都是需要配置服务器nginx或者apache的,具体请参见苏南大叔的前几篇文章。

phar和webphar的入口区别 - webphar

phar和webphar的入口区别(图3-3)

结论

对比图非常明显的显示了两者的区别,所以不要单纯的学习网上流传的教程,把两者设置为同一个入口,两者是有不同的使用场景的。只不过,场景比较罕见而已。

更多有关phar相关经验文章,请点击苏南大叔的文章。https://newsn.net/tag/phar/

  【php】秘籍文章入口,仅传授于有缘之人  php    phar

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

打赏任意金额,发送截图到邮箱 shang@newsn.net ,可以领取精选回馈如下(任选其一):
  • 《前端视频教程大礼包》一套
  • 《wordpress精选皮肤》一套
  • 《dedecms织梦精选模板》一套
感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!

岁月静好

关注互联网发展,关注苏南大叔的《程序如此灵动~》博客
本文章来自:程序如此灵动~
博客地址为:https://newsn.net/
原文地址为:https://newsn.net/say/phar-vs-webphar.html
上一篇好文:apache的fastcgi模式下,phar安全设置
下一篇好文:phar包的外部调用方式

如果您转载了本文章,出于某种原因,并没有注明作者或者出处。
在这里,苏南大叔也表示理解和支持。因为苏南大叔深深地明白:
您会在合适的时机,合适的地方,给本博客一个外链。对吧?
您若开心,便是安好!岁月静好,但愿世界和平,没有纷争~