php – PHAR createDefaultStub应该区分CLI和浏览器吗?
我的问题是关于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 码: stream_wrapper_unregister('phar'); include('./build/app.php'); 您将看到它现在按预期工作(但由于您不再使用流包装器中的构建,因此速度较慢). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |