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

在前几篇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

本站的忠实读者小伙伴,正在阅读下面这些文章:

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
欢迎指正文字或逻辑错误,将会择优在文末列出您的信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!