我有一个大文件,我想从文件末尾取出1000行,然后将其删除。
我目前正在使用此
:function deleteLineInFile($file,$string)
{
$i=0;
$array=array();
$read = fopen($file, "r") or die("can't open the file");
while(!feof($read)) {
$array[$i] = fgets($read);
++$i;
}
fclose($read);
$write = fopen($file, "w") or die("can't open the file");
foreach($array as $a) {
if(!strstr($a,$string)) fwrite($write,$a);
}
fclose($write);
}
$goods = '';
$file = file("../products/".$PidFileName);
for ($i = max(0, count($file)-1001); $i < count($file); $i++) {
$goods = $goods.$file[$i] . '<br />';
deleteLineInFile("../products/".$PidFileName, $file[$i]);
}
我要保存在$goods
中得到的行
但是,由于文件大小而超时。
答案 0 :(得分:2)
如果要从EOF中获得N行,可以使用SPLFileObject(PHP 5.1中已添加):
DoCmd.SetWarnings False
答案 1 :(得分:0)
最好的方法是使用sed
|但是,如果您无权使用exec()
函数,那么可以使用此函数。
function replace_file($path, $string, $replace)
{
set_time_limit(0);
if (is_file($path) === true)
{
$file = fopen($path, 'r');
$temp = tempnam('./', 'tmp');
if (is_resource($file) === true)
{
while (feof($file) === false)
{
file_put_contents($temp, str_replace($string, $replace, fgets($file)), FILE_APPEND);
}
fclose($file);
}
unlink($path);
}
return rename($temp, $path);
}
函数来源:https://stackoverflow.com/a/2159135/8524395
要删除该行,可以这样:
replace_file('myfile.txt', 'RemoveThisPlease', '');
$line