我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

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

苏南大叔:php代码,phar和webphar在入口点方面有何区别? - webphar
php代码,phar和webphar在入口点方面有何区别?(图4-1)

绪论

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

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

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

对比图

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

苏南大叔:php代码,phar和webphar在入口点方面有何区别? - phar_source
php代码,phar和webphar在入口点方面有何区别?(图4-2)

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

build.php

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

demo.php

include "phar.phar";

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

苏南大叔:php代码,phar和webphar在入口点方面有何区别? - require_lib
php代码,phar和webphar在入口点方面有何区别?(图4-3)

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

苏南大叔:php代码,phar和webphar在入口点方面有何区别? - webphar
php代码,phar和webphar在入口点方面有何区别?(图4-4)

结论

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

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

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

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

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