自动替换每个文件中的第一行

时间:2017-03-21 19:58:33

标签: php css minify

我有几个缩小文件(CSS和JS),当我重新缩小这些文件时,我想自动替换每个文件的第一行(每个文件的第一行是Minified @ 2017-03-21

我目前正在以这种方式添加该信息,但我接受建议:

<?php
$file = "test.css";
$add_info = "/* --- Minified today --- */ \n";
$add_info .= file_get_contents($file);
file_put_contents($file, $add_info);
?>

所以我的文件结尾如下:

/* --- Minified today --- */
body{margin:0}; /* etc */

很明显,在几次重复结束之后:

/* --- Minified today --- */
/* --- Minified today --- */
/* --- Minified today --- */
/* --- Minified today --- */
body{margin:0}; /* etc */

根本没用。

那么,我怎么能这样做(没有杀死性能)?该操作每周只执行1到2次(大多数情况下),并且在缩小后文件大约为30KB。

注意:我使用的是PHP 5.5和Apache 2.4。

2 个答案:

答案 0 :(得分:3)

您可以使用file()将文件读入数组并替换第一行。然后file_put_contents()将为您破坏数组:

$file = "test.css";
$lines = file($file);
$add_info = "/* --- Minified today --- */ \n";
$lines[0] = $add_info;
file_put_contents($file, $lines);

如果他们可能没有作为第一行,那么检查并替换它或插入它:

if(strpos($lines[0], '/* --- Minified') !== false) {
    $lines[0] = $add_info;
} else {
    array_unshift($lines, $add_info);
}

答案 1 :(得分:0)

我的问题是大文件。这是我使用的解决方案。我目前在回声,但您始终可以保存到文件。

$fh = fopen($local_file, 'rb');
echo "add\tfirst\tline\n";  // add your new first line.
fgets($fh); // moves the file pointer to the next line.
echo stream_get_contents($fh); // flushes the remaining file.
fclose($fh);