2016-09-24 89 views
3

我尝试在我的应用程序中使用phar,但对我来说存在一个小问题。早些时候,我做了一个web项目,把我的包含html文件的类和php文件放在phar中,但我无法将静态文件导入phar并从html标记中引用它们。我做的是这样的:PHP:从html中引用phar档案中的静态文件

  • 创建一个包含我的类和html代码的phar存档。我创建了两个存根,cli.php中的cli访问和操作,以及web访问,我写了index.php(这个文件需要其他的php文件,并且明显地回显了html代码)。 phing的build.xml

药业打造的conf:

<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. 
  • 配置折叠呃东西...你知道:)
  • 资产文件夹的图像,样式和东西。
  • 添加一个包含phar存档的index.php文件。我无法直接运行phar归档。

那么如何将图像,样式和js导入phar文件?我想将css /,js /和images /文件夹放在这个phar中,并且在html页面需要一个图像时(如<img src="IMAGE-LOCATION-I-DONT-KNOW">),不用更改当前代码,它会从phar文件中获取它。

回答

1

我不知道为什么你的设置不工作,但我可以通过一个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(); 

srcvendor含有类和public包含index.php(入口点的应用程序),以及一个resources用css和js文件夹。

一旦部署完成,我可以通过访问我的应用程序:http://localhost/my-project.phar/public/index.php/some/route

和静态资源可以通过以下方式访问:http://localhost/my-project.phar/public/resource/app.css

有一件事我绝对是有“压缩=‘gzip的’”努力,这将向浏览器提供压缩版本,但浏览器无法弄清楚如何解压缩它。我关闭了压缩功能,而不是过多地使用它。希望有帮助

+0

谢谢!存根文件对我来说是个问题。我改变了它,它工作。要搜索这个mungServer的东西...祝你有美好的一天! – Kambaa

相关问题