Объединение css с php - 2 vhost с одинаковой конфигурацией, но разными результатами - loadproxy_fcgi: ошибка - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть php-файл для объединения CSS-файлов, которые я использую годами, и это всегда работало. Теперь я установил новый тестовый сервер с последними версиями Debian, Apache 2.4.25 MPM и PHP 7.2. У меня есть два vhost, которые кроме домена одинаковы:

<VirtualHost *:80>

   ServerAdmin webmaster@localhost
   ServerName balkenhantel.testb
   DocumentRoot /var/www/balkenhantel

   <Directory /var/www/balkenhantel>
      Order Deny,Allow
      Allow from all
      AllowOverride All
      Options -Indexes
   </Directory>

</VirtualHost>

<VirtualHost *:80>

   ServerAdmin webmaster@localhost
   ServerName eks-services.testb
   DocumentRoot /var/www/eks-services

   <Directory /var/www/eks-services>
      Order Deny,Allow
      Allow from all
      AllowOverride All
      Options -Indexes
   </Directory>

</VirtualHost>

На обоих сайтах есть ссылка на css, как это в шапке:

<link rel="stylesheet" type="text/css" href="/design/css/css-fb201704032623.php" />

Я проверил .htaccess и css.php с WinMerge, и они совпадают.

Css.php:

<?php
ob_start('ob_gzhandler');
header('Content-type: text/css; charset: UTF-8');
header('X-Powered-By: ');
header('Cache-Control: public');
header('Vary: Accept-Encoding');
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($_SERVER['SCRIPT_FILENAME'])). ' GMT', true, 200);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 2592000) . ' GMT'); // 1 month

define('DS', DIRECTORY_SEPARATOR);
define('PATH_ROOT', dirname(__FILE__) . DS);

$cssPath = PATH_ROOT;

//css path | css file name | css browser1
//css browser = "all" for all browser, "browser1,browser2,..." for defined various browser only
//IE = msie 6
//IE with various version = msie parent version or full version, e.g. "msie 6" or "msie 5.5" or "msie 5.0.1"
//IE 4 = msie 4
//IE 5 = msie 5
//IE 6 = msie 6
//IE 7 = msie 7
//Opera = opera
//Opera with various version = opera/version, e.g. "opera/9.10"
//Firefox = firefox
//Firefox with various version = firefox/version, e.g. "firefox/2.0.0.14"

$cssGZIP[] = $cssPath."|reset.css|all";
$cssGZIP[] = $cssPath."|structure.css|all";
$cssGZIP[] = $cssPath."|content.css|all";
$cssGZIP[] = $cssPath."|gadgets.css|all";
$cssGZIP[] = $cssPath."|fancyforms.css|all";

foreach($cssGZIP as $GZIP) {
    $css = explode("|", $GZIP);
    if($css[2]=="all") {
    if(file_exists($css[0].$css[1])) {
        $buffer .= file_get_contents($css[0].$css[1]);
    }
    } else {
        $browsers = explode(",", $css[2]);
        $loadThisCSS = false;
        foreach($browsers as $browser) {
            if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), $browser) !== false) {
               $loadThisCSS = true;
            }
        }
        if($loadThisCSS == true) {
            if(file_exists($css[0].$css[1])) {
            $buffer .= file_get_contents($css[0].$css[1]);
            }
       }
   }
}

// Remove comments
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);

// Remove space after colons
$buffer = str_replace(': ', ':', $buffer);

// Remove whitespace
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $buffer);

echo($buffer);
?>

Самое смешное, что на одном сайте css не работает. Он загружается, но не работает. Я также могу вызвать его в браузере, и он появляется. Еще более забавно, что на втором сайте, где работает css, у меня ошибка:

[proxy_fcgi:error] AH01071: Got error 'PHP message: PHP Notice:  Undefined variable: buffer in /var/www/eks-services/design/css/css.php on line 37\n', referer: http://eks-services.testb/

1 Ответ

0 голосов
/ 30 апреля 2018

Как показывает ошибка в строке 37, вы объединяете .= переменную без ее предварительного определения. Вы не можете сделать это в php, и вам сначала нужно определить свою переменную.

Определите $buffer раньше, и это решит эту проблему.

$buffer = '';
if(file_exists($css[0].$css[1])) {
    $buffer .= file_get_contents($css[0].$css[1]);
}

Что касается того, почему он работает на одном сервере, а не на другом, возможно, вы что-то пропускаете или, возможно, они используют разные версии php. Я не уверен, позволяли ли старые версии делать то, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...