我有一个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" />
我确实用WinMerge检查了.htaccess和css.php,它们是一样的。
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/
答案 0 :(得分:0)
正如第37行中的错误所示,您将.=
连接变量而不先定义变量。你不能在php中这样做,你首先需要定义你的变量。
尽快定义$buffer
,这将解决此问题。
$buffer = '';
if(file_exists($css[0].$css[1])) {
$buffer .= file_get_contents($css[0].$css[1]);
}
至于为什么它在一台服务器而不是另一台服务器上工作,或许你忽略了某些东西,或者他们正在运行不同版本的php。我不确定旧版本是否允许您执行您尝试执行的操作。