我运行php
站点,我想尝试使用PHP将所有CSS文件合并到一个文件中。我尝试实现的方法是在应用程序开始时使用ob_start()
函数,然后使用回调函数,以删除<link ...>
标记并获取CSS URL以便处理并合并为一个文件。
我遇到的问题是,preg_replace()
按预期工作,用于从HTML中删除样式,但preg_match_all()
变量中的matches
包含数字{{1 }}
我的代码是这样的:
1
运行此代码后,我的HTML没有// Start of my application
ob_start( 'process_css' );
function process_css( $buffer ) {
// Try to match all the div tags in the document
preg_match_all( '~div~', $buffer, $css_matches );
// Create a new write file stream
$f = fopen( dirname( __FILE__ ) . '/matches.txt', 'w' );
// Write the contents in the file
fwrite( $f, print_r( $css_matches ), strlen( print_r( $css_matches ) ) );
// Close the stream
fclose( $f );
// Remove the <link...> tags
$buffer = preg_replace( '~\<link.*href\=[\'"].*\.css[^"\']*[\'"][^>]*\>~', '', $buffer );
// Return the modified buffer.
return $buffer;
}
标记,新生成的link
文件包含以下内容:
matches.txt
请注意,我的HTML当然包含很多div元素。
我做错了吗?你能建议一个解决方案吗?不幸的是,我看不出任何明显的问题。
更新1
我发现,当1
返回var_dump
$css_matches
没有为print_r
变量返回任何内容
更新2
我刚刚在@KiJéy的帮助下用以下内容更改了我的代码:
1
但是,使用此代码,$ matches数组为空。 $f = fopen( dirname( __FILE__ ) . '/m.txt', 'w' );
fwrite( $f, var_export($matches, true), strlen( var_export($matches, true) ) );
fclose( $f );
的输出如下:
preg_match_all
更新3
将脚本开头的代码更改为:
array (
0 =>
array (
),
)
并将以下代码放在页脚中:
ob_start();
我得到以下输出:
$buffer = ob_get_clean();
preg_match_all( '/div/', $buffer, $matches );
echo "<pre>";
echo var_export($matches, true);
echo "</pre>";