Heim Backend-Entwicklung PHP-Tutorial PHP verarbeitet MHT-Dateien

PHP verarbeitet MHT-Dateien

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

<span><?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>-></span>read_filedata ()<span>;
</span><span>$this</span><span>-></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>-></span>file <span>= </span><span>$p</span><span>;
</span>}

    <span>function </span>get_log() {
        <span>return </span><span>$this</span><span>-></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>-></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>-></span>getrange ( <span>$line</span>, <span>'"'</span>, <span>'"'</span>, <span>0 </span>)<span>;
</span><span>$this</span><span>-></span>boundary <span>= </span><span>"--" </span><span>. </span><span>$range </span><span>[</span><span>'range'</span><span>]</span><span>;
</span><span>$this</span><span>-></span>filedata <span>= </span>str_replace ( <span>$line</span>, <span>''</span>, <span>$this</span><span>-></span>filedata )<span>;
</span><span>break</span><span>;
</span>}
            }
        }
        <span>if </span>(<span>$this</span><span>-></span>boundary <span>!= </span><span>''</span>) {
            <span>$this</span><span>-></span>filedata <span>= </span>explode ( <span>$this</span><span>-></span>boundary, <span>$this</span><span>-></span>filedata )<span>;
</span><span>unset </span>( <span>$this</span><span>-></span>filedata <span>[</span><span>0</span><span>] </span>)<span>;
</span><span>$this</span><span>-></span>filedata <span>= </span>array_values ( <span>$this</span><span>-></span>filedata )<span>;
</span><span>$this</span><span>-></span>countparts <span>= </span>count ( <span>$this</span><span>-></span>filedata )<span>;
</span>} <span>else </span>{
            <span>$tmp </span><span>= </span><span>$this</span><span>-></span>filedata<span>;
</span><span>$this</span><span>-></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>-></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>-></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>=> <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>=> <span>$line </span>) {
            <span>if </span>(<span>$line_id </span><span><= </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>-></span>file, <span>'r' </span>)<span>;
</span><span>$this</span><span>-></span>filedata <span>= </span>fread ( <span>$handle</span>, filesize ( <span>$this</span><span>-></span>file ) )<span>;
</span>fclose ( <span>$handle </span>)<span>;
</span>}

    <span>function </span>getrange(<span>&</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'=>$Range,'begin'=>$Begin_firstOccurence_pos,'end'=>$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>< </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>> </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>< </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>< </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>=> <span>$Range</span>,
            <span>'begin' </span>=> <span>$Begin_firstOccurence_pos</span>,
            <span>'end' </span>=> <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->set_file ( $filename );
</span><span>    $o_mhtml->extract ();
</span><span>    $res =  $o_mhtml->get_part_to_file(0);
</span><span>    var_dump($res);
</span><span>}*/</span></span>
Nach dem Login kopieren

Das Obige stellt die Verarbeitung von MHT-Dateien durch PHP vor, einschließlich des Inhalts von a_star. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Outsourcing nimmt die Schuld auf sich, Yahoo LINE gibt Informationen von 57.000 Mitarbeitern preis Outsourcing nimmt die Schuld auf sich, Yahoo LINE gibt Informationen von 57.000 Mitarbeitern preis Feb 15, 2024 am 11:30 AM

Laut Nachrichten dieser Website vom 14. Februar gab Yahoo LINE heute bekannt, dass illegal auf ein koreanisches Outsourcing-Unternehmen zugegriffen wurde und möglicherweise die Informationen von etwa 57.000 LINE-Mitarbeitern durchgesickert sind. Es wurde noch nicht bestätigt, ob Benutzer- oder Geschäftspartnerinformationen vorliegen durchgesickert. Nach der Offenlegung von Benutzerinformationen durch die LINE-App im November 2023 wurde das laxe Informationsmanagement des Unternehmens nach und nach aufgedeckt. Laut Vertretern von Yahoo LINE erhielten zwei koreanische Unternehmen, die ausgelagert hatten, zwischen August und November 2023 unbefugten Zugriff und Eingriffe Dritter, und die E-Mail-Adressen, Telefonnummern und Fotos von 57.611 Mitarbeitern wurden möglicherweise durchgesickert. Ob durch die Verwendung von Mitarbeiterinformationen ein Folgeschaden entstanden ist, konnte bislang nicht bestätigt werden. Yahoo LINE kündigt seinen Dienst im November 2023 an

PHP gibt alle Werte im Array zurück, um ein Array zu bilden PHP gibt alle Werte im Array zurück, um ein Array zu bilden Mar 21, 2024 am 09:06 AM

In diesem Artikel wird ausführlich erläutert, wie PHP alle Werte eines Arrays zurückgibt, um ein Array zu bilden. Der Herausgeber hält dies für recht praktisch, daher teile ich es Ihnen als Referenz mit und hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen können . Verwenden der Funktion array_values() Die Funktion array_values() gibt ein Array aller Werte in einem Array zurück. Die Schlüssel des ursprünglichen Arrays bleiben nicht erhalten. $array=["foo"=>"bar","baz"=>"qux"];$values=array_values($array);//$values ​​​​werden ["bar","qux"]Verwendet Eine Schleife kann eine Schleife verwenden, um alle Werte des Arrays manuell abzurufen und zu einem neuen hinzuzufügen

Welche Software ist Line? Welche Software ist Line? Dec 24, 2020 pm 04:17 PM

Line ist eine Instant-Messaging-Software, die von NHN Japan, der japanischen Tochtergesellschaft des koreanischen Internetkonzerns NHN, eingeführt wurde. Zu ihren Hauptfunktionen gehören: 1. Sie können jederzeit kostenlose Anrufe tätigen, wenn der Datenverkehr aktiviert oder mit WLAN verbunden ist Da es sich um ein LINE-Smartphone handelt, können Benutzer untereinander kostenlos telefonieren. 3. Aufkleber, die Stimmungen usw. besser ausdrücken können.

Ein Artikel, der diesen Punkt versteht und 70 % der Front-End-Leute erreicht Ein Artikel, der diesen Punkt versteht und 70 % der Front-End-Leute erreicht Sep 06, 2022 pm 05:03 PM

Ein Kollege blieb aufgrund eines Fehlers stecken, auf den dadurch hingewiesen wurde. Dieses Zeigeproblem führte dazu, dass eine Pfeilfunktion verwendet wurde, was dazu führte, dass die entsprechenden Requisiten nicht abgerufen werden konnten. Er wusste es nicht, als ich es ihm vorstellte, und dann habe ich mir bewusst die Front-End-Kommunikationsgruppe angesehen. Bisher verstehen es mindestens 70 % der Front-End-Programmierer nicht Sie diesen Link Wenn alles unklar ist Wenn Sie es noch nicht gelernt haben, geben Sie mir bitte eine große Klappe.

Lassen Sie uns darüber sprechen, warum Vue2 dadurch in verschiedenen Optionen auf Eigenschaften zugreifen kann Lassen Sie uns darüber sprechen, warum Vue2 dadurch in verschiedenen Optionen auf Eigenschaften zugreifen kann Dec 08, 2022 pm 08:22 PM

Dieser Artikel hilft Ihnen bei der Interpretation des Vue-Quellcodes und stellt vor, warum Sie damit in Vue2 auf Eigenschaften in verschiedenen Optionen zugreifen können. Ich hoffe, dass er für alle hilfreich ist!

In welche Währung ist die POS-Währung eine Investition wert? In welche Währung ist die POS-Währung eine Investition wert? Feb 21, 2024 pm 03:40 PM

Was ist eine POS-Münze? POS-Münzen, also ProofofStake-Münzen, sind ein Kryptowährungs-Konsensmechanismus, der sich vom Proof of Work (ProofofWork) von Bitcoin unterscheidet. Der Konsensalgorithmus von POS-Münzen hängt von der Anzahl und dem Zeitpunkt der gehaltenen Münzen ab. Inhaber können entsprechende Belohnungen verdienen, indem sie Coins halten und sperren (was normalerweise eine gewisse Zeit in Anspruch nimmt). Kurz gesagt: POS-Coin-Inhaber werden basierend auf der Anzahl der Coins, die sie besitzen, und der Sperrzeit belohnt. Vorteile der POS-Währung Im Vergleich zur POW-Währung legt die POS-Währung mehr Wert auf das Vertrauen und die Beteiligung der Inhaber, sodass ihr Konsensmechanismus energieeffizienter ist. POW-Münzen benötigen eine große Menge Strom, um den Konsensprozess abzuschließen, während POS-Münzen durch die Investition und das Vertrauen der Inhaber die Sicherheit und Stabilität des Netzwerks gewährleisten. Diese Art von Basis

So verwenden Sie die Range-Funktion in Java So verwenden Sie die Range-Funktion in Java Apr 19, 2023 pm 11:49 PM

Vorwort In Java ist die Range-Methode sowohl in der IntStream- als auch in der LongStream-Klasse verfügbar. In der IntStream-Klasse ist es hilfreich, den sequentiellen Wert von IntStream innerhalb des Funktionsparameterbereichs zurückzugeben. Bei dieser Methode sind startInclusive(inklusive) und endExklusiv(exklusiv) die beiden Parameter, die zusammen mit der Inkrementschrittgröße verwendet werden. Wie bereits erwähnt, wird der Startwert einbezogen und der Endwert ausgeschlossen. Im Fall von LongStream besteht der einzige Unterschied in der Hinzufügung des LongStream-Werts. Range-Syntax Sehen wir uns die Syntax der Range-Methode in Java an. IntStream-Bereich

Erklären Sie es in einfachen Worten: Verstehen Sie das Funktionsprinzip des Go-Sprachbereichs gründlich Erklären Sie es in einfachen Worten: Verstehen Sie das Funktionsprinzip des Go-Sprachbereichs gründlich Mar 12, 2024 pm 02:18 PM

Die Go-Sprache ist eine prägnante und leistungsstarke Programmiersprache mit einzigartigem Design und in vielen Aspekten einzigartigen Funktionen. Eine der beeindruckendsten Funktionen ist das Schlüsselwort „range“, das zum Durchlaufen von Datenstrukturen wie Arrays, Slices, Karten und Kanälen verwendet wird. Die Flexibilität und Bequemlichkeit von Range erleichtern das Durchqueren komplexer Datenstrukturen, viele Menschen sind jedoch verwirrt über die Funktionsweise. In diesem Artikel wird auf einfache und leicht verständliche Weise erläutert, wie Range funktioniert, und anhand spezifischer Codebeispiele den Lesern das Verständnis erleichtert. Schauen wir uns zunächst ein einfaches Beispiel an

See all articles