php实现读取超大文件的方法

2025-05-29 0 96

通常来说在php读取大文件的时候,我们采用的方法一般是一行行来讲取,而不是一次性把文件全部写入内存中,这样会导致php程序卡死,下面就给大家介绍这样一个例子。

读取大文件最后几行数据:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104
<?php

/**

* 取文件最后$n行

*

* @param string $filename 文件路径

* @param int $n 最后几行

* @return mixed false表示有错误,成功则返回字符串

*/

function FileLastLines($filename, $n){

if(!$fp = fopen($filename, 'r')){

echo "打开文件失败,请检查文件路径是否正确,路径和文件名不要包含中文";

return false;

}

$pos = -2;

$eof = "";

$str = "";

while($n > 0){

while($eof != "n"){

if(!fseek($fp, $pos, SEEK_END)){

$eof = fgetc($fp);

$pos–;

}else{

break;

}

}

$str .= fgets($fp);

$eof = "";

$n–;

}

return $str;

}

echo nl2br(FileLastLines('sss.txt', 4));

/**

* * * 取文件最后$n行 *

*

* @param string $filename 文件路径 *

* @param int $n 最后几行 *

* @return mixed false表示有错误,成功则返回字符串

*/

function FileLastLines($filename, $n){

if(!$fp = fopen($filename, 'r')){

echo "打开文件失败,请检查文件路径是否正确,路径和文件名不要包含中文";

return false;

}

$pos = -2;

$eof = "";

$str = "";

while($n > 0){

while($eof != "n"){

if(!fseek($fp, $pos, SEEK_END)){

$eof = fgetc($fp);

$pos--;

}else{

break;

}

}

$str .= fgets($fp);

$eof = "";

$n--;

}

return $str;

}

echo nl2br(FileLastLines('sss . txt', 4));

function tail($fp, $n, $base = 5)

{

assert($n > 0);

$pos = $n + 1;

$lines = array();

while(count($lines) < = $n){

try{

fseek($fp, - $pos, SEEK_END);

}

catch (Exception $e){

fseek(0);

break;

}

$pos *= $base;

while(!feof($fp)){

array_unshift($lines, fgets($fp));

}

}

return array_slice($lines, 0, $n);

}

var_dump(tail(fopen("access.log", "r+"), 10));

$fp = fopen($file, "r");

$line = 10;

$pos = -2;

$t = " ";

$data = "";

while ($line > 0){

while ($t != "n"){

fseek($fp, $pos, SEEK_END);

$t = fgetc($fp);

$pos --;

}

$t = " ";

$data .= fgets($fp);

$line --;

}

fclose ($fp);

echo $data;

?>

读者可以根据该实例特点加以改进和完善,使之更加符合自身应用需求。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 php实现读取超大文件的方法 https://www.kuaiidc.com/104163.html

相关文章

发表评论
暂无评论