Pergunta

Estamos usando uma combinação Ubuntu+nginx+php5-fpm em nossos servidores com a versão PHP 5.5.Estamos tentando executar index.php que inclui vários arquivos phar.Algo como:

<?php
include "a.phar";
include "b.phar";
//...
?>

Quando este script é executado a partir da linha de comando PHP, ele funciona bem.Quando isso é executado no servidor de desenvolvimento php (php -S) ou no nginx, obtemos o seguinte erro:

2013/11/18 17:56:06 [error] 14384#0: *597 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Cannot redeclare class Extract_Phar in b.phar on line 103

Não tenho uma classe chamada Extract_Phar - então presumo que meu processo de construção a esteja adicionando em algum lugar ao longo do caminho.Eu usei o phing para construir o mesmo, caso isso ajude.O alvo do phing é:

<target name="phar" depends="prepare">
  <pharpackage destfile="./build/phar/LogUtils.phar" 
  basedir="./build/intophar"
  compression="bzip2">
  <fileset dir="./build/intophar/">
    <include name="*.*" />
    <include name="**/**" />
  </fileset>
  <metadata>
    <element name="version" value="1.0" />
    <element name="authors">
       <element name="Shreeni">
         <element name="e-mail" value="test@test.com" />
       </element>
    </element>
  </metadata>
  </pharpackage>
</target>

E o index.php na minha pasta intophar é algo como:

include("api/LogUtils.inc.php");
// Other relative include statements

Eu brinquei com sinalizadores apc com base em outras respostas e defini o seguinte:

apc.include_once_override = 0 
apc.canonicalize = 0 
apc.stat = 0
apc.enabled=0 
apc.enabled_cli=0
apc.cache_by_default = 0

Nada disso ajuda e não conseguimos executar nosso código.Alguma sugestão?

Foi útil?

Solução

O problema pode estar acontecendo devido a stubs conflitantes em seus vários arquivos phar.Tentar:

<?php
include "phar://a.phar/index.php"; // Assuming that the stub is index.php
include "phar://b.phar/index.php"; // Assuming that the stub is index.php
//...
?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top