国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Backend-Entwicklung PHP-Tutorial Tutorial zur PHP-Erfassung von Remote-Bildern

Tutorial zur PHP-Erfassung von Remote-Bildern

Oct 20, 2016 pm 01:48 PM
php

Als ich zuvor WeChat-Login-Entwicklungen durchführte, stellte ich fest, dass WeChat-Avatarbilder keinen Suffixnamen hatten. Die herk?mmliche Bilderfassungsmethode funktionierte nicht und erforderte eine spezielle Erfassungsverarbeitung. Daher wurden sp?ter verschiedene Situationen zusammengefasst, in einer Klasse zusammengefasst und geteilt.

Projekt erstellen

Zur Demonstration erstellen wir das Projekt grabimg im WWW-Stammverzeichnis, erstellen eine Klasse GrabImage.php und eine index.php.

Klassencode schreiben

Wir definieren eine Klasse mit demselben Namen wie die Datei: GrabImage

class GrabImage{}

Attribute

Als n?chstes definieren Sie einige, die ben?tigt werden zu nutzendes Eigentum.

1. Definieren Sie zun?chst eine Bildadresse, die erfasst werden muss: $img_url

2. Definieren Sie dann einen $file_name, um den Namen der Datei zu speichern, tragen Sie jedoch nicht den Erweiterungsnamen. weil es beinhalten kann Der Erweiterungsname wird ge?ndert, also entpacken wir hier die Definition

3, gefolgt vom Erweiterungsnamen $extension

4 Dann definieren wir ein $file_dir Die Funktion davon Das Attribut dient dazu, das Remote-Image zu erfassen. Das lokal gespeicherte Verzeichnis ist im Allgemeinen relativ zum Speicherort der PHP-Eintragsdatei als Ausgangspunkt. Dieser Pfad wird jedoch im Allgemeinen nicht in der Datenbank gespeichert.

5. Abschlie?end definieren wir ein $save_dir. Wie der Name schon sagt, ist dieser Pfad das Verzeichnis zum direkten Speichern der Datenbank. Zur Erl?uterung: Wir speichern den Dateispeicherpfad nicht direkt in der Datenbank. Dies dient normalerweise dazu, den Pfad bei einer sp?teren Migration bequem zu ?ndern. Unser $save_dir ist hier im Allgemeinen der Name der Datumsdatei. Wenn Sie ihn verwenden müssen, nehmen Sie ihn heraus und schreiben Sie den erforderlichen Pfad voran.

Methode

Attribute sind fertig und dann beginnen wir offiziell mit der Crawling-Arbeit.

Zuerst definieren wir eine offene Methode getInstances, um einige Daten zu erhalten, wie zum Beispiel die Adresse des erfassten Bildes und den lokalen Speicherpfad. Fügen Sie es auch in Eigenschaften ein.

public function getInstances($img_url , $base_dir)
{
    $this->img_url = $img_url;
    $this->save_dir = date("Ym").'/'.date("d").'/'; // 比如:201610/19/
    $this->file_dir = $base_dir.'/'.$this->save_dir.'/'; // 比如:./uploads/image/2016/10/19/
}

Der Bildspeicherpfad wurde gesplei?t. Jetzt müssen wir auf eine Frage achten, ob das Verzeichnis existiert. Das Datum ?ndert sich von Tag zu Tag, das Verzeichnis wird jedoch nicht automatisch erstellt. Daher müssen Sie das Bild vor dem Speichern zun?chst überprüfen. Wenn das aktuelle Verzeichnis nicht vorhanden ist, müssen wir es sofort erstellen.

Wir erstellen die Set-Directory-Methode setDir. Wir haben die Attribute auf privat und sicher gesetzt

/**
 * 檢查圖片需要保持的目錄是否存在
 * 如果不存在,則立即創(chuàng)建一個目錄
 * @return bool
 */
private function setDir()
{
    if(!file_exists($this->file_dir))
    {
        mkdir($this->file_dir,0777,TRUE);
    }

    $this->file_name = uniqid().rand(10000,99999);// 文件名,這里只是演示,實際項目中請使用自己的唯一文件名生成方法

    return true;
}

Der n?chste Schritt besteht darin, den Kerncode zu erfassen

Der erste Schritt besteht darin, ein Problem zu l?sen. Die Bilder, die wir erfassen müssen, sind m?glicherweise nicht vorhanden haben Suffixnamen. Gem?? der herk?mmlichen Crawling-Methode ist es nicht m?glich, zuerst das Bild zu crawlen und dann den Suffixnamen abzufangen.

Wir müssen den Bildtyp durch andere Methoden ermitteln. Die Methode besteht darin, die Datei-Header-Informationen aus den Datei-Stream-Informationen abzurufen, wodurch die Datei-MIME-Informationen beurteilt werden und dann der Dateisuffixname ermittelt werden kann.

Der Einfachheit halber definieren Sie zun?chst eine MIME- und Dateierweiterungszuordnung.

$mimes=array(
    'image/bmp'=>'bmp',
    'image/gif'=>'gif',
    'image/jpeg'=>'jpg',
    'image/png'=>'png',
    'image/x-icon'=>'ico'
);

Auf diese Weise kann ich, wenn ich den Bild-/GIF-Typ erhalte, erkennen, dass es sich um ein GIF-Bild handelt.

Verwenden Sie die PHP-Funktion get_headers, um Dateistream-Header-Informationen abzurufen. Wenn sein Wert nicht falsch ist, weisen wir ihn der Variablen $headers

zu und entnehmen den Wert von Content-Type, der dem Wert von mime entspricht.

if(($headers=get_headers($this->img_url, 1))!==false){
    // 獲取響應(yīng)的類型
    $type=$headers['Content-Type'];
}

Mithilfe der oben definierten Zuordnungstabelle k?nnen wir den Suffixnamen leicht ermitteln.

$this->extension=$mimes[$type];

Natürlich ist der oben erhaltene $type m?glicherweise nicht in unserer Zuordnungstabelle vorhanden, was bedeutet, dass dieser Dateityp nicht das ist, was wir wollen. Verwerfen Sie ihn einfach und ignorieren Sie ihn.

Die folgenden Schritte sind die gleichen wie beim herk?mmlichen Datei-Grabbing.

$file_path = $this->file_dir.$this->file_name.".".$this->extension;
// 獲取數(shù)據(jù)并保存
$contents=file_get_contents($this->img_url);
if(file_put_contents($file_path , $contents))
{
    // 這里返回出去的值是直接保存到數(shù)據(jù)庫的路徑 + 文件名,形如:201610/19/57feefd7e2a7aY5p7LsPqaI-lY1BF.jpg
    return $this->save_dir.$this->file_name.".".$this->extension;
}

Ermitteln Sie zuerst den vollst?ndigen Pfad des lokal gespeicherten Bildes $file_path, verwenden Sie dann file_get_contents, um die Daten abzurufen, und verwenden Sie dann file_put_contents, um gerade im Dateipfad zu speichern.

Schlie?lich geben wir einen Pfad zurück, der anstelle eines Dateispeicherpfads direkt in der Datenbank gespeichert werden kann.

Die vollst?ndige Version dieser Crawling-Methode ist:

private function getRemoteImg()
{
    // mime 和 擴展名 的映射
    $mimes=array(
        'image/bmp'=>'bmp',
        'image/gif'=>'gif',
        'image/jpeg'=>'jpg',
        'image/png'=>'png',
        'image/x-icon'=>'ico'
    );
    // 獲取響應(yīng)頭
    if(($headers=get_headers($this->img_url, 1))!==false)
    {
        // 獲取響應(yīng)的類型
        $type=$headers['Content-Type'];
        // 如果符合我們要的類型
        if(isset($mimes[$type]))
        {
            $this->extension=$mimes[$type];
            $file_path = $this->file_dir.$this->file_name.".".$this->extension;
            // 獲取數(shù)據(jù)并保存
            $contents=file_get_contents($this->img_url);
            if(file_put_contents($file_path , $contents))
            {
                // 這里返回出去的值是直接保存到數(shù)據(jù)庫的路徑 + 文件名,形如:201610/19/57feefd7e2a7aY5p7LsPqaI-lY1BF.jpg
                return $this->save_dir.$this->file_name.".".$this->extension;
            }
        }
    }
    return false;
}

最后,為了簡單,我們想在其他地方只要調(diào)用其中一個方法就可以完成抓取。所以,我們將抓取動作直接放入到getInstances中,在配置完路徑后,直接抓取,所以,在初始化配置方法getInstances里新增代碼。

if($this->setDir())
{
    return $this->getRemoteImg();
}
else
{
    return false;
}

測試

我們?nèi)倓倓?chuàng)建的index.php文件內(nèi)試試。

<?php
require_once &#39;GrabImage.php&#39;;
$object = new GrabImage();
$img_url = "http://www.bidianer.com/img/icon_mugs.jpg"; // 需要抓取的遠(yuǎn)程圖片
$base_dir = "./uploads/image"; // 本地保存的路徑
echo $object->getInstances($img_url , $base_dir);
?>

惹,的確抓取過來了

Tutorial zur PHP-Erfassung von Remote-Bildern

完整代碼


 * @link bidianer.com
 */
class GrabImage{

    /**
     * @var string 需要抓取的遠(yuǎn)程圖片的地址
     * 例如:http://www.bidianer.com/img/icon_mugs.jpg
     * 有一些遠(yuǎn)程文件路徑可能不帶拓展名
     * 形如:http://www.xxx.com/img/icon_mugs/q/0
     */
    private $img_url;

    /**
     * @var string 需要保存的文件名稱
     * 抓取到本地的文件名會重新生成名稱
     * 但是,不帶拓展名
     * 例如:57feefd7e2a7aY5p7LsPqaI-lY1BF
     */
    private $file_name;

    /**
     * @var string 文件的拓展名
     * 這里直接使用遠(yuǎn)程圖片拓展名
     * 對于沒有拓展名的遠(yuǎn)程圖片,會從文件流中獲取
     * 例如:.jpg
     */
    private $extension;

    /**
     * @var string 文件保存在本地的目錄
     * 這里的路徑是PHP保存文件的路徑
     * 一般相對于入口文件保存的路徑
     * 比如:./uploads/image/201610/19/
     * 但是該路徑一般不直接存儲到數(shù)據(jù)庫
     */
    private $file_dir;

    /**
     * @var string 數(shù)據(jù)庫保存的文件目錄
     * 這個路徑是直接保存到數(shù)據(jù)庫的圖片路徑
     * 一般直接保存日期 + 文件名,需要使用的時候拼上前面路徑
     * 這樣做的目的是為了遷移系統(tǒng)時候方便更換路徑
     * 例如:201610/19/
     */
    private $save_dir;

    /**
     * @param string $img_url 需要抓取的圖片地址
     * @param string $base_dir 本地保存的路徑,比如:./uploads/image,最后不帶斜杠"/"
     * @return bool|int
     */
    public function getInstances($img_url , $base_dir)
    {
        $this->img_url = $img_url;
        $this->save_dir = date("Ym").'/'.date("d").'/'; // 比如:201610/19/
        $this->file_dir = $base_dir.'/'.$this->save_dir.'/'; // 比如:./uploads/image/2016/10/19/
        return $this->start();
    }

    /**
     * 開始抓取圖片
     */
    private function start()
    {
        if($this->setDir())
        {
            return $this->getRemoteImg();
        }
        else
        {
            return false;
        }
    }

    /**
     * 檢查圖片需要保持的目錄是否存在
     * 如果不存在,則立即創(chuàng)建一個目錄
     * @return bool
     */
    private function setDir()
    {
        if(!file_exists($this->file_dir))
        {
            mkdir($this->file_dir,0777,TRUE);
        }

        $this->file_name = uniqid().rand(10000,99999);// 文件名,這里只是演示,實際項目中請使用自己的唯一文件名生成方法

        return true;
    }

    /**
     * 抓取遠(yuǎn)程圖片核心方法,可以同時抓取有后綴名的圖片和沒有后綴名的圖片
     *
     * @return bool|int
     */
    private function getRemoteImg()
    {
        // mime 和 擴展名 的映射
        $mimes=array(
            'image/bmp'=>'bmp',
            'image/gif'=>'gif',
            'image/jpeg'=>'jpg',
            'image/png'=>'png',
            'image/x-icon'=>'ico'
        );
        // 獲取響應(yīng)頭
        if(($headers=get_headers($this->img_url, 1))!==false)
        {
            // 獲取響應(yīng)的類型
            $type=$headers['Content-Type'];
            // 如果符合我們要的類型
            if(isset($mimes[$type]))
            {
                $this->extension=$mimes[$type];
                $file_path = $this->file_dir.$this->file_name.".".$this->extension;
                // 獲取數(shù)據(jù)并保存
                $contents=file_get_contents($this->img_url);
                if(file_put_contents($file_path , $contents))
                {
                    // 這里返回出去的值是直接保存到數(shù)據(jù)庫的路徑 + 文件名,形如:201610/19/57feefd7e2a7aY5p7LsPqaI-lY1BF.jpg
                    return $this->save_dir.$this->file_name.".".$this->extension;
                }
            }
        }
        return false;
    }
}


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

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

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.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Was ist PHP und warum wird es für die Webentwicklung verwendet? Was ist PHP und warum wird es für die Webentwicklung verwendet? Jun 23, 2025 am 12:55 AM

PHPBECAMEPOPULARFORWebDevelopmentDuetoitSeaseoflearning, Seamlessintegrationwithhtml, weit verbreitete Hostingsupport, andalargeecosystemincludingFrameWorkelaravelandcmsplatformen -?hnliche WordPress.itexcelsinformlingsformen, Managingusesersions, Interacti

Wie bleibe ich mit den neuesten PHP-Entwicklungen und Best Practices auf dem neuesten Stand? Wie bleibe ich mit den neuesten PHP-Entwicklungen und Best Practices auf dem neuesten Stand? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

Wie setzen Sie die PHP -Zeitzone? Wie setzen Sie die PHP -Zeitzone? Jun 25, 2025 am 01:00 AM

Tosettherighttimezoneinphp, usedate_default_timezone_set () functionAtthestartofyourScriptWithAvalididentifiersuchas'america/new_york'.1.usedate_default_timezone_set () beeanydate/timeFununtions.2.Alternativ, konfigurieren

Wie validiere ich die Benutzereingabe in PHP, um sicherzustellen, dass bestimmte Kriterien erfüllt? Wie validiere ich die Benutzereingabe in PHP, um sicherzustellen, dass bestimmte Kriterien erfüllt? Jun 22, 2025 am 01:00 AM

TovalidateuserinputinPHP,usebuilt-invalidationfunctionslikefilter_var()andfilter_input(),applyregularexpressionsforcustomformatssuchasusernamesorphonenumbers,checkdatatypesfornumericvalueslikeageorprice,setlengthlimitsandtrimwhitespacetopreventlayout

Was ist die Datenserialisierung in PHP (Serialize (), nieserialize ())? Was ist die Datenserialisierung in PHP (Serialize (), nieserialize ())? Jun 22, 2025 am 01:03 AM

ThePHPfunctionsserialize()andunserialize()areusedtoconvertcomplexdatastructuresintostorablestringsandbackagain.1.serialize()convertsdatalikearraysorobjectsintoastringcontainingtypeandstructureinformation.2.unserialize()reconstructstheoriginaldatafrom

Wie bin ich PHP -Code in eine HTML -Datei ein? Wie bin ich PHP -Code in eine HTML -Datei ein? Jun 22, 2025 am 01:00 AM

Sie k?nnen PHP -Code in HTML -Dateien einbetten, stellen Sie jedoch sicher, dass die Datei eine Erweiterung von .PHP enth?lt, damit der Server sie richtig analysieren kann. Verwenden Sie Standard -Tags, um PHP -Code einzuwickeln und dynamische Inhalte überall in HTML einfügen. Darüber hinaus k?nnen Sie PHP und HTML mehrmals in derselben Datei wechseln, um dynamische Funktionen wie das bedingte Rendering zu realisieren. Achten Sie darauf, dass Sie die Serverkonfiguration und die Syntax -Korrektheit beachten, um Probleme zu vermeiden, die durch kurze Bezeichnungen, Anführungszeichenfehler oder weggelassene Endbezeichnungen verursacht werden.

Was sind die besten Praktiken zum Schreiben von sauberem und wartbarem PHP -Code? Was sind die besten Praktiken zum Schreiben von sauberem und wartbarem PHP -Code? Jun 24, 2025 am 12:53 AM

Der Schlüssel zum Schreiben von sauberem und leicht zu machenden PHP-Code liegt in klarer Benennung, nach Standards, angemessene Struktur, nützlicher Kommentare und Testbarkeit. 1. Verwenden Sie klare Variablen, Funktionen und Klassennamen wie $ userData und calculatetotalprice (); 2. Folgen Sie dem PSR-12-Standard-Unified-Code-Stil; 3. Teilen Sie die Codestruktur gem?? den Verantwortlichkeiten und organisieren Sie sie mit MVC- oder Laravel-Katalogen im Stil. 4. Vermeiden Sie den Code im Nudelstil und teilen Sie die Logik in kleine Funktionen mit einer einzigen Verantwortung auf. 5. Kommentare an Schlüsselpunkten hinzufügen und Schnittstellendokumente schreiben, um Parameter, Rückgabewerte und Ausnahmen zu kl?ren. 6. Verbesserung der Prüfbarkeit, Abh?ngigkeitsinjektion, reduzieren Sie den globalen Zustand und die statischen Methoden. Diese Praktiken verbessern die Codequalit?t, die Effizienz der Zusammenarbeit und die Nachverdauerung nach der Wartung.

Wie führe ich SQL -Abfragen mit PHP aus? Wie führe ich SQL -Abfragen mit PHP aus? Jun 24, 2025 am 12:54 AM

Ja, YoucanrunsqlQuerieseusePhp und TheProcessinvolveschoosingAdaTabaseextension, ConnectingTothedatabase, ExecutingQueriessafely und ClosenconnectionSwhendone.Todothis, FirstChooseBetweenmysqliorpdo, withpdobeeringmortextextextextextextextextextediestimestutedieseduetosuTosuTosuTosuToseSupporingMulningMulningMulningMulningMuldaTaTablesingmorebotte, withpdobeeringmortextextextextextextediestubliothekern

See all articles