PHP ob_start()回调preg_match_all仅返回匹配

时间:2017-09-28 15:32:38

标签: php

我运行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>";

0 个答案:

没有答案