我尝试在我的应用程序中使用 phar,但对我来说有一个小问题。早些时候我做了一个 web 项目,将我的类和包含 html 文件的 php 文件放在 phar 中,但我无法将静态文件导入 phar 并从 html 标签中引用它们。我所做的是:
- 创建了一个包含我的类(class)和 html 代码的 phar 文件。我创建了两个 stub ,用于 cli.php 中的 cli 访问和操作,以及用于 web 访问的 index.php(此文件需要其他 php 文件,显然与 html 代码相呼应)。
phar 构建 phing build.xml 的配置文件:
<pharpackage
destfile="./target/${phar.file.name}.phar"
basedir="./"
webstub="index.php"
clistub="index.php">
<fileset refid="pharBuild"/> ...
cli.php 文件是这样的:
<?php
if ($argv[1] === "op1") {
// do something
...
index.php 文件是这样的:
<?php
if (php_sapi_name() == "cli") {
require_once "cli.php";
} else {
// prepare and print the web page. evidently some HTML tags.
- 东西的配置文件夹...你知道:)
- 用于图像、样式和内容的 Assets 文件夹。
- 添加一个包含 phar 存档的 index.php 文件。我无法直接运行 phar 存档。
那么,如果我将其导入到 phar 文件中,我该如何访问我的图像、样式和 js?我想将 css/、 js/和 images/文件夹放入此 phar 中,并且不会过多更改当前代码,当 html 页面需要图像(如 <img src="IMAGE-LOCATION-I-DONT-KNOW">
)时,它将从我的文件中获取它phar 文件。
最佳答案
我不确定为什么您的设置不起作用,但我可以通过 PHAR 访问静态文件就好了。这是我得到的:
build.xml
<target name="package">
<pharpackage basedir="." destfile="./my-project.phar" stub="phar_stub.php" compression="none">
<fileset dir="src">
<include name="**/**"/>
</fileset>
<fileset dir="vendor">
<include name="**/**"/>
</fileset>
<fileset dir="public">
<include name="**/**"/>
</fileset>
</pharpackage>
</target>
phar_stub.php
<?php
Phar::mungServer(['REQUEST_URI', 'SCRIPT_NAME']);
Phar::webPhar(null, __DIR__ . "/public/index.php");
__HALT_COMPILER();
src
和 vendor
包含类,public
包含 index.php
(应用程序的入口点) 以及一个包含 css 和 js 的 resources
文件夹。
部署后,我可以通过以下方式访问我的应用程序:http://localhost/my-project.phar/public/index.php/some/route
并且可以通过以下方式访问静态资源:http://localhost/my-project.phar/public/resource/app.css
我确实遇到的一件事是使用“compression='gzip'”,它会向浏览器提供压缩版本,但浏览器无法弄清楚如何解压缩它。我关闭了压缩,而不是过多地使用它。希望有帮助
关于PHP:从html引用phar存档内的静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39679986/