백엔드 개발 PHP 튜토리얼 PHP는 mht 파일을 처리합니다.

PHP는 mht 파일을 처리합니다.

Jul 29, 2016 am 09:10 AM
line pos range this

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

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

<span>&lt;?php

</span><span>/**

</span><span> * Created by PhpStorm.

</span><span> * User: kungyu

</span><span> * Date: 2015/12/3

</span><span> * Time: 15:30

</span><span> */

</span><span>class </span>mhtparse {

 

    <span>var </span><span>$file </span><span>= </span><span>''</span><span>;

</span><span>var </span><span>$boundary </span><span>= </span><span>''</span><span>;

</span><span>var </span><span>$filedata </span><span>= </span><span>''</span><span>;

</span><span>var </span><span>$countparts </span><span>= </span><span>1</span><span>;

</span><span>var </span><span>$log </span><span>= </span><span>''</span><span>;

</span><span>function </span>extract() {

        <span>$this</span><span>-&gt;</span>read_filedata ()<span>;

</span><span>$this</span><span>-&gt;</span>file_parts ()<span>;

</span><span>return </span><span>1</span><span>;

</span>}

 

    <span>function </span>set_file(<span>$p</span>) {

        <span>$this</span><span>-&gt;</span>file <span>= </span><span>$p</span><span>;

</span>}

 

    <span>function </span>get_log() {

        <span>return </span><span>$this</span><span>-&gt;</span>log<span>;

</span>}

 

    <span>function </span>file_parts() {

        <span>$lines </span><span>= </span>explode ( <span>"</span><span>\n</span><span>"</span>, substr ( <span>$this</span><span>-&gt;</span>filedata, <span>0</span>, <span>8192 </span>) )<span>;

</span><span>foreach </span>( <span>$lines </span><span>as </span><span>$line </span>) {

            <span>$line </span><span>= </span>trim ( <span>$line </span>)<span>;

</span><span>if </span>(strpos ( <span>$line</span>, <span>'=' </span>) <span>!== </span><span>FALSE</span>) {

                <span>if </span>(strpos ( <span>$line</span>, <span>'boundary'</span>, <span>0 </span>) <span>!== </span><span>FALSE</span>) {

                    <span>$range </span><span>= </span><span>$this</span><span>-&gt;</span>getrange ( <span>$line</span>, <span>'"'</span>, <span>'"'</span>, <span>0 </span>)<span>;

</span><span>$this</span><span>-&gt;</span>boundary <span>= </span><span>"--" </span><span>. </span><span>$range </span><span>[</span><span>'range'</span><span>]</span><span>;

</span><span>$this</span><span>-&gt;</span>filedata <span>= </span>str_replace ( <span>$line</span>, <span>''</span>, <span>$this</span><span>-&gt;</span>filedata )<span>;

</span><span>break</span><span>;

</span>}

            }

        }

        <span>if </span>(<span>$this</span><span>-&gt;</span>boundary <span>!= </span><span>''</span>) {

            <span>$this</span><span>-&gt;</span>filedata <span>= </span>explode ( <span>$this</span><span>-&gt;</span>boundary, <span>$this</span><span>-&gt;</span>filedata )<span>;

</span><span>unset </span>( <span>$this</span><span>-&gt;</span>filedata <span>[</span><span>0</span><span>] </span>)<span>;

</span><span>$this</span><span>-&gt;</span>filedata <span>= </span>array_values ( <span>$this</span><span>-&gt;</span>filedata )<span>;

</span><span>$this</span><span>-&gt;</span>countparts <span>= </span>count ( <span>$this</span><span>-&gt;</span>filedata )<span>;

</span>} <span>else </span>{

            <span>$tmp </span><span>= </span><span>$this</span><span>-&gt;</span>filedata<span>;

</span><span>$this</span><span>-&gt;</span>filedata <span>= </span><span>array </span>(

                <span>$tmp

</span>)<span>;

</span>}

    }

 

    <span>function </span>get_all_part_file() {

        <span>return </span><span>$this</span><span>-&gt;</span>filedata<span>;

</span>}

 

    <span>function </span>get_part_to_file(<span>$i</span>) {

        <span>$line_dat<strong>a_star</strong>t </span><span>= </span><span>0</span><span>;

</span><span>$encoding </span><span>= </span><span>''</span><span>;

</span><span>$part_lines </span><span>= </span>explode ( <span>"</span><span>\n</span><span>"</span>, ltrim ( <span>$this</span><span>-&gt;</span>filedata <span>[</span><span>$i</span><span>] </span>) )<span>;

</span><span>foreach </span>( <span>$part_lines </span><span>as </span><span>$line_id </span>=&gt; <span>$line </span>) {

            <span>$line </span><span>= </span>trim ( <span>$line </span>)<span>;

</span><span>if </span>(<span>$line </span><span>== </span><span>''</span>) {

                <span>if </span>(trim ( <span>$part_lines </span><span>[</span><span>0</span><span>] </span>) <span>== </span><span>'--'</span>)

                    <span>return </span><span>1</span><span>;

</span><span>$line_dat<strong>a_star</strong>t </span><span>= </span><span>$line_id</span><span>;

</span><span>break</span><span>;

</span>}

            <span>if </span>(strpos ( <span>$line</span>, <span>':' </span>) <span>!== </span><span>FALSE</span>) {

                <span>$pos </span><span>= </span>strpos ( <span>$line</span>, <span>':' </span>)<span>;

</span><span>$k </span><span>= </span>strtolower ( trim ( substr ( <span>$line</span>, <span>0</span>, <span>$pos </span>) ) )<span>;

</span><span>$v </span><span>= </span>trim ( substr ( <span>$line</span>, <span>$pos </span><span>+ </span><span>1</span>, strlen ( <span>$line </span>) ) )<span>;

</span><span>if </span>(<span>$k </span><span>== </span><span>'content-transfer-encoding'</span>) {

                    <span>$encoding </span><span>= </span><span>$v</span><span>;

</span>}

                <span>if </span>(<span>$k </span><span>== </span><span>'content-location'</span>) {

                    <span>$location </span><span>= </span><span>$v</span><span>;

</span>}

                <span>if </span>(<span>$k </span><span>== </span><span>'content-type'</span>) {

                    <span>$contenttype </span><span>= </span><span>$v</span><span>;

</span>}

            }

        }

 

        <span>foreach </span>( <span>$part_lines </span><span>as </span><span>$line_id </span>=&gt; <span>$line </span>) {

            <span>if </span>(<span>$line_id </span><span>&lt;= </span><span>$line_dat<strong>a_star</strong>t</span>)

                <span>$part_lines </span><span>[</span><span>$line_id</span><span>] = </span><span>''</span><span>;

</span>}

 

        <span>$part_lines </span><span>= </span>implode ( <span>''</span>, <span>$part_lines </span>)<span>;

</span><span>if </span>(<span>$encoding </span><span>== </span><span>'base64'</span>)

            <span>$part_lines </span><span>= </span>base64_decode ( <span>$part_lines </span>)<span>;

</span><span>elseif </span>(<span>$encoding </span><span>== </span><span>'quoted-printable'</span>)

            <span>$part_lines </span><span>= </span>imap_qprint ( <span>$part_lines </span>)<span>;

</span><span>return </span><span>$part_lines</span><span>;

</span>}

 

    <span>function </span>read_filedata() {

        <span>$handle </span><span>= </span>fopen ( <span>$this</span><span>-&gt;</span>file, <span>'r' </span>)<span>;

</span><span>$this</span><span>-&gt;</span>filedata <span>= </span>fread ( <span>$handle</span>, filesize ( <span>$this</span><span>-&gt;</span>file ) )<span>;

</span>fclose ( <span>$handle </span>)<span>;

</span>}

 

    <span>function </span>getrange(<span>&amp;</span><span>$subject</span>, <span>$Beginmark_str </span><span>= </span><span>'{'</span>, <span>$Endmark_str </span><span>= </span><span>'}'</span>, <span>$Start_pos </span><span>= </span><span>0</span>) {

        <span>/*

</span><span>         * $str="sssss { x { xx } {xx{xx } x} x} sssss"; $range=string::getRange($str,'{','}',0); echo $range['range']; //tulem: " x { xx } {xx{xx } x} x" echo $range['behin']; //tulem: 6 echo $range['end']; //tulem: 30 (' ') -- l5pum?¤rgist j?¤rgnev out: array('range'=&gt;$Range,'begin'=&gt;$Begin_firstOccurence_pos,'end'=&gt;$End_sequel_pos) | false v1.1 2004-2006,Uku-Kaarel J5esaar,ukjoesaar@hot.ee,http://www.hot.ee/ukjoesaar,+3725110693

</span><span>         */

</span><span>if </span>(<span>empty </span>( <span>$Beginmark_str </span>))

            <span>$Beginmark_str </span><span>= </span><span>'{'</span><span>;

</span><span>$Beginmark_str_len </span><span>= </span>strlen ( <span>$Beginmark_str </span>)<span>;

</span><span>if </span>(<span>empty </span>( <span>$Endmark_str </span>))

            <span>$Endmark_str </span><span>= </span><span>'}'</span><span>;

</span><span>$Endmark_str_len </span><span>= </span>strlen ( <span>$Endmark_str </span>)<span>;

</span><span>/* $Start_pos_cache = 0; */

</span><span>do </span>{

            <span>/* !algus */

</span><span>if </span>(<span>! </span>is_int ( <span>$Begin_firstOccurence_pos </span>))

                <span>$Start_pos_cache </span><span>= </span><span>$Start_pos</span><span>;

</span><span>/* ?algus-test */

</span><span>$Start_pos_cache </span><span>= @</span>strpos ( <span>$subject</span>, <span>$Beginmark_str</span>, <span>$Start_pos_cache </span>)<span>;

</span><span>/* this is possible start for range */

</span><span>if </span>(is_int ( <span>$Start_pos_cache </span>)) {

                <span>/* skip */

</span><span>$Start_pos_cache </span><span>= </span>(<span>$Start_pos_cache </span><span>+ </span><span>$Beginmark_str_len</span>)<span>;

</span><span>/* test possible range start pos */

</span><span>if </span>(is_int ( <span>$Begin_firstOccurence_pos </span>)) {

                    <span>if </span>(<span>$Start_pos_cache </span><span>&lt; </span><span>$range_end_pos</span>)

                        <span>$rangeClean </span><span>= </span><span>0</span><span>;

</span><span>elseif </span>(<span>$Start_pos_cache </span><span>&gt; </span><span>$range_end_pos</span>)

                        <span>$rangeClean </span><span>= </span><span>1</span><span>;

</span>}

                <span>/* here it is */

</span><span>if </span>(<span>! </span>is_int ( <span>$Begin_firstOccurence_pos </span>))

                    <span>$Begin_firstOccurence_pos </span><span>= </span><span>$Start_pos_cache</span><span>;

</span>} <span>/* VIGA NR 0 ALGUST EI OLE */

</span><span>if </span>(<span>! </span>is_int ( <span>$Start_pos_cache </span>)) {

                <span>/* !algus */

</span><span>                /* VIGA NR 1 ALGUSMARKI EI LEITUD : VIIMANE VOIMALIK ALGUS */

</span><span>if </span>(is_int ( <span>$Begin_firstOccurence_pos </span>) <span>and </span>(<span>$Start_pos_cache </span><span>&lt; </span><span>$range_end_pos</span>))

                    <span>$rangeClean </span><span>= </span><span>1</span><span>;

</span><span>else

</span><span>                    return false</span><span>;

</span>}

            <span>if </span>(is_int ( <span>$Begin_firstOccurence_pos </span>) <span>and </span>(<span>$rangeClean </span><span>!= </span><span>1</span>)) {

                <span>if </span>(<span>! </span>is_int ( <span>$End_pos_cache </span>))

                    <span>$End_sequel_pos </span><span>= </span><span>$Begin_firstOccurence_pos</span><span>;

</span><span>$End_pos_cache </span><span>= </span>strpos ( <span>$subject</span>, <span>$Endmark_str</span>, <span>$End_sequel_pos </span>)<span>;

</span><span>/* ok */

</span><span>if </span>(is_int ( <span>$End_pos_cache </span>) <span>and </span>(<span>$rangeClean </span><span>!= </span><span>1</span>)) {

                    <span>$range_current_lenght </span><span>= </span>(<span>$End_pos_cache </span><span>- </span><span>$Begin_firstOccurence_pos</span>)<span>;

</span><span>$End_sequel_pos </span><span>= </span>(<span>$End_pos_cache </span><span>&#43; </span><span>$Endmark_str_len</span>)<span>;

</span><span>$range_end_pos </span><span>= </span><span>$End_pos_cache</span><span>;

</span>}

                <span>/* VIGA NR 2 LOPPU EI LEITUD */

</span><span>if </span>(<span>! </span>is_int ( <span>$End_pos_cache </span>))

                    <span>if </span>(<span>$End_pos_cache </span><span>== </span><span>false</span>)

                        <span>return false</span><span>;

</span>}

        } <span>while </span>( <span>$rangeClean </span><span>&lt; </span><span>1 </span>)<span>;

</span><span>if </span>(is_int ( <span>$Begin_firstOccurence_pos </span>) <span>and </span>is_int ( <span>$range_current_lenght </span>))

            <span>$Range </span><span>= </span>substr ( <span>$subject</span>, <span>$Begin_firstOccurence_pos</span>, <span>$range_current_lenght </span>)<span>;

</span><span>else

</span><span>            return false</span><span>;

</span><span>return array </span>(

            <span>'range' </span>=&gt; <span>$Range</span>,

            <span>'begin' </span>=&gt; <span>$Begin_firstOccurence_pos</span>,

            <span>'end' </span>=&gt; <span>$End_sequel_pos

</span>)<span>;

</span>} <span>// end getrange()

</span>} <span>// class

</span><span>/*$filename = './test.mht';

</span><span>if (file_exists ( $filename )) {

</span><span>    if (is_dir ( $filename )) return false;

</span><span>    $filename = strtolower ( $filename );

</span><span>    if (strpos ( $filename, '.mht', 1 ) == FALSE) return false;

</span><span>    $o_mhtml = new mhtparse ();

</span><span>    $o_mhtml-&gt;set_file ( $filename );

</span><span>    $o_mhtml-&gt;extract ();

</span><span>    $res =  $o_mhtml-&gt;get_part_to_file(0);

</span><span>    var_dump($res);

</span><span>}*/</span></span>

로그인 후 복사

위 내용은 a_star 콘텐츠를 포함하여 PHP의 mht 파일 처리 방법을 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

아웃소싱 탓, 야후라인 직원 5만7000명 정보 유출 아웃소싱 탓, 야후라인 직원 5만7000명 정보 유출 Feb 15, 2024 am 11:30 AM

아웃소싱 탓, 야후라인 직원 5만7000명 정보 유출

PHP는 배열의 모든 값을 반환하여 배열을 형성합니다. PHP는 배열의 모든 값을 반환하여 배열을 형성합니다. Mar 21, 2024 am 09:06 AM

PHP는 배열의 모든 값을 반환하여 배열을 형성합니다.

라인이란 어떤 소프트웨어인가요? 라인이란 어떤 소프트웨어인가요? Dec 24, 2020 pm 04:17 PM

라인이란 어떤 소프트웨어인가요?

POS는 어떤 통화에 투자할 가치가 있나요? POS는 어떤 통화에 투자할 가치가 있나요? Feb 21, 2024 pm 03:40 PM

POS는 어떤 통화에 투자할 가치가 있나요?

Java에서 Range 함수를 사용하는 방법 Java에서 Range 함수를 사용하는 방법 Apr 19, 2023 pm 11:49 PM

Java에서 Range 함수를 사용하는 방법

거대한 Cadillac Escalade IQ는 최대 $170,000의 가격으로 460마일의 주행 거리를 제공합니다. 거대한 Cadillac Escalade IQ는 최대 $170,000의 가격으로 460마일의 주행 거리를 제공합니다. Sep 30, 2024 am 06:15 AM

거대한 Cadillac Escalade IQ는 최대 $170,000의 가격으로 460마일의 주행 거리를 제공합니다.

간단한 용어로 설명: Go 언어 범위의 작동 원리를 완전히 이해합니다. 간단한 용어로 설명: Go 언어 범위의 작동 원리를 완전히 이해합니다. Mar 12, 2024 pm 02:18 PM

간단한 용어로 설명: Go 언어 범위의 작동 원리를 완전히 이해합니다.

Java에서 이 메소드를 사용하는 방법 Java에서 이 메소드를 사용하는 방법 Apr 18, 2023 pm 01:58 PM

Java에서 이 메소드를 사용하는 방법

See all articles