2011-08-28 9 views
6

¿Cómo puedo minify un archivo .php con contenido de CSS?
Actualmente recibo un error 400.CSS minify con la extensión de PHP

Normalmente me llaman Minify como esto

<link rel="stylesheet" type="text/css" 
     href="{$workspace}/min/f=workspace/css/common.css" /> 

EDITAR

La respuesta está cambiando el código fuente Minify, pero lo que es el cambio que debería hacer?

En otras palabras .. esta llamada debe trabajar y el proceso como CSS ..

<link rel="stylesheet" type="text/css" 
     href="{$workspace}/min/f=workspace/css/common.php" /> 

Tal vez con una declaración facultativa?

<link rel="stylesheet" type="text/css" 
href="{$workspace}/min/f=workspace/css/common.php&type=css" /> 

EDITAR

que creó el proyecto aquí @https://github.com/into/less-less

+5

¿Hay una razón específica por la que está buscando minifying tiempo de ejecución? ¿Por qué incurrir en la sobrecarga adicional del servidor al hacer esto? (Incluso si lo está almacenando en caché, sigue siendo al menos una consulta de base de datos o una lectura de archivo innecesaria ... –

+0

sobrecarga adicional del servidor? No tiene impacto –

+0

Tal vez estoy malinterpretando lo que usted ' Estoy tratando de lograr ... Usted tiene contenidos CSS en un archivo PHP que desea ministrar sobre la marcha, ¿correcto? –

Respuesta

7

Su script CSS + PHP emite CSS solo después de haber sido solicitado por un servidor y analizado por PHP. Minify lee los archivos directamente del servidor, omitiendo la solicitud HTTP. Así veo dos caminos:

  1. menos óptimo [?]: Hacer Minify descargar el CSS como esto:

    <link rel="stylesheet" type="text/css" href="{$workspace}/min/f=http://site.com/workspace/css/common.php" /> 
    
  2. Incluir Minify lib en su archivo common.php y utilizar sus classes (por ejemplo, Minify_CSS) antes de la salida. Algo así como echo Minify_CSS::minify($css)

Actualización:

Su ejemplo de recompra contiene un nombre de archivo extraño que no me dejaba tirar/empujar apropiadamente, así que aquí está la report.php cambiado:

<pre> 
<strong>LESS in</strong> 
<?= file_get_contents('workspace/less/common.less') ?> 
- - - - - 
<strong>CSS out</strong> 
<? 
require 'workspace/php/lessc.inc.php'; 
$lc = new lessc(); 
$contents = file_get_contents('workspace/less/common.less'); 
$css = $lc->parse($contents); 
echo $css; 
?> 
<strong>Minified</strong> 
<?php 
require 'workspace/min/lib/Minify/CSS/Compressor.php'; 
echo Minify_CSS_Compressor::process($css); 
?> 
</pre> 
+0

¿Podría escribir la opción 2? No estoy tan familiarizado con las clases :(// idealmente sería un zip con minify que podría descargar ... definitivamente ganaría la recompensa. ¡Muchas gracias! –

+0

¿Podría escribir la opción 2? No estoy tan familiarizado con las clases :(// idealmente sería un zip con minify que podría descargar ... eso definitivamente te ganaría la recompensa. ¡Muchas gracias! –

+0

Creé un proyecto repo @ https: // github. com/into/less-less –

1

No, usted no puede hacerlo fácilmente como Minify en gran medida depende de las extensiones de archivo (CSS, JS ,?). Por ejemplo, se usa para determinar qué encabezados HTTP enviar al cliente (application/x-javascript, text/css ,?), qué clase de minificador usar, este archivo es seguro para analizar, etc.

Pero estoy casi seguro de que esta situación se puede evitar. ¿Podría describir por qué exactamente quiere hacer esto?

Si insistes en hacerlo de esta manera, puedo proponer algunos trucos sucios para hacerlo funcionar, pero es necesario cambiar el código fuente de minify, así que no sé si es una buena idea.

UPD:

No hay buena manera de cambiar esta fuente: tiene muy mala estructura. En v2.1.3 Minify puede simplemente cambiar lo siguiente:

Path: lib/Minimizar/Controlador/Base.php ## Minify_Controller_Base :: _ fileIsSafe()

return in_array(strrev($revExt), array('js', 'css', 'html', 'txt')); 

->

return in_array(strrev($revExt), array('js', 'css', 'html', 'txt', 'php')); 

Path: lib/Minimizar/controlador/MinApp.php ## Minify_Controller_MinApp :: setupSources()

preg_match('/^[^,]+\\.(css|js)(?:,[^,]+\\.\\1)*$/', $_GET['f']) 

->

preg_match('/^[^,]+\\.(css|js|php)(?:,[^,]+\\.\\1)*$/', $_GET['f']) 

Path: lib/Minimizar/## Minify_Source :: __ construct()

case 'css' : $this->contentType = 'text/css'; 

->

case 'php': case 'css': $this->contentType = 'text/css'; 

y todo va a funcionar, pero hay que establecer $ min_serveOptions [ 'minApp'] ['allowDirs'] en la configuración, ya que cualquier usuario puede ver cualquier archivo php desde este directorio.

+0

Sí, quiero cambiar el minify código fuente. –

+0

Actualicé mi publicación, debería funcionar y dudo que pueda mejorarse ya que el código fuente está mal estructurado, pero una vez más, lo desanimo a hacerlo de esta manera. – XzKto

+0

Creé un proyecto repo @ https://github.com/into/less-less –

0

Usando CSS Min, puede hacer cualquier cosa libremente y también puede "procesar" su hoja de cálculo en script php, y luego minimizarla sobre la marcha: es MUY simple para hacer eso, y adivina qué, solo A SINGL E ARCHIVO.

Otra forma es, no utilizar ningún script PHP para procesar o hacer algo de lógica en su archivo css, en su lugar, podría haber separado un pequeño archivo css, simplemente cargar lo que desee creando un nuevo archivo de caché o simplemente combinar y producir la etiqueta de enlace.

Sin embargo, si usted está ahora tener algo como esto en su common.php (archivo php/script que outputing el css, sí?)

<?php 
    $style = ''; 
    $bodyStyle = 'body { 
      background-color: #000; 
      margin: 40px; 
      font: 13px/20px normal Helvetica, Arial, sans-serif; 
      color: #fff; 
      }'; 
    // I assumed you are about proccesing something here.. 
    // ... 
    // Then you merged all style into one string, and output it as css file 
    $style = $bodyStyle + $otherStyle + $whateverStyle; 
    header('Content-Type: text/css'); 
    echo $style; 
?> 

Y todavía desea hacer su aplicación hinchada y hacer su código es más ilegible (espere, todavía hay más ...), también desea modificar Minify class/lib para minimizar y almacenar en caché su pseudo-css-php, luego debe "piratear" la fuente de la siguiente manera:

  • lib/Minify/Controller/Base.php: 135, cambie a:

    return in_array(strrev($revExt), array('js', 'css', 'html', 'txt', 'php'));

  • lib/Minimizar/Controlador/MinApp.php: 75, cambie a:

    ! preg_match('/^[^,]+\\.(css|js|php)(?:,[^,]+\\.\\1)*$/', $_GET['f'])

  • lib/Minimizar/Fuente.php, cambie varias cosas:

Agregar una variable como un indicador de PHP, en, después de la línea 41 quizá

/** 
* @var bool 
*/ 
public $isPHP = FALSE; 

En mismo archivo, en la línea: 67, añadir una condición:

case 'php' : $this->isPHP = TRUE; 
       $this->contentType = 'text/css'; 
       break; 

pasado, reemplazar la función getContent(), en:

public function getContent() 
{ 
    if($this->isPHP) 
    { 
     include($this->filepath); 
    } 
    else 
    { 
     $content = (null !== $this->filepath) 
       ? file_get_contents($this->filepath) 
       : ((null !== $this->_content) 
        ? $this->_content 
        : call_user_func($this->_getContentFunc, $this->_id) 
       ); 
    } 

    // remove UTF-8 BOM if present 
    return (pack("CCC",0xef,0xbb,0xbf) === substr($content, 0, 3)) 
     ? substr($content, 3) 
     : $content; 
} 
  • También necesita cambiar su common.php en Minify especificaciones, por lo que ahora, su common.php debería parecerse:

es necesario poner toda su hoja de estilos como cadena y asignarlo a la variable $content

<?php 
    //$style = ''; 
    $bodyStyle = 'body { 
      background-color: #000; 
      margin: 40px; 
      font: 13px/20px normal Helvetica, Arial, sans-serif; 
      color: #fff; 
      }'; 
    // I assumed you are about proccesing something here.. 
    // ... 
    // Then you merged all style into one string, and output it as css file 
    // $style = $bodyStyle + $otherStyle + $whateverStyle; 
    // header('Content-Type: text/css'); 
    // echo $style; 
    $content = $bodyStyle + $otherStyle + $whateverStyle; 
?> 
+0

Creé un proyecto repo @ https://github.com/into/less-less –

Cuestiones relacionadas