Heim Backend-Entwicklung PHP-Tutorial 用stream_系列函数实现远程文件本地化,怎么防止卡死

用stream_系列函数实现远程文件本地化,怎么防止卡死

Jun 13, 2016 am 10:52 AM
http quot sockets tmp

用stream_系列函数实现远程文件本地化,如何防止卡死
还是我前两天写的代码,已经用于采集内容了,今天用来改进采集到的内容中的图片等远程文件的本地化,有时候还是会卡死,高手看看如何能防止卡死。
代码如下,这个代码还是提供两种方式实现本地化进行比较,时事证明这种流方式实现效率是提高了。

PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php $dir = str_replace('\\', '/', dirname(__FILE__)) . '/';$timeStart = microtime(true);$data = '';$urls = array('http://www.jxcms.com/upload/2011/0518/0337319304.jpg', 'http://www.jxcms.com/upload/2011/0310/0951568835.jpg', 'http://www.tzksgs.com/upload/banner1.jpg', 'http://www.tzksgs.com/upload/banner2.jpg');foreach($urls as $url) {    copy($url, $dir . 'a_' . basename($url));}$timeEnd = microtime(true);echo sprintf("Spend time: %s second(s)\n", $timeEnd - $timeStart), '<br>';$timeStart = microtime(true);function getMoreContent($urls) {    $timeout = 30;    $rs = array();    $sockets = array();    $userAgent = $_SERVER['HTTP_USER_AGENT'];    foreach($urls as $id => $url) {        $tmp = parse_url($url);        $host = $tmp['host'];        $path = isset($tmp['path'])?$tmp['path']:'/';        empty($tmp['query']) or $path .= '?' . $tmp['query'];        if (empty($tmp['port'])) {            $port = $tmp['scheme'] == 'https'?443:80;        } else $port = $tmp['port'];        $fp = stream_socket_client("$host:$port", $errno, $errstr, $timeout);        if ($fp) {            $rs[$id] = '';            $sockets[$id] = $fp;            fwrite($fp, "GET $path HTTP/1.1\r\nHost: $host\r\nUser-Agent: $userAgent\r\nConnection: Close\r\n\r\n");        }    }    // Now, wait for the results to come back in    while (count($sockets)) {        $read = $sockets;        // This is the magic function - explained below        if (stream_select($read, $write = null, $e = null, $timeout)) {            // readable sockets either have data for us, or are failed connection attempts            foreach ($read as $r) {                $id = array_search($r, $sockets);                $data = fread($r, 8192);                if (strlen($data) == 0) {                    fclose($r);                    $tmp = explode("\r\n\r\n", $rs[$id], 2);                    $rs[$id] = strpos($tmp[0], '200')?$tmp[1]:'';                    unset($sockets[$id]);                } else $rs[$id] .= $data;            }        }    }    return $rs;}$rs = getMoreContent($urls);foreach($rs as $k => $v) {    @file_put_contents($dir . 'b_' . basename($urls[$k]), $v);}$timeEnd = microtime(true);echo sprintf("Spend time: %s second(s)\n", $timeEnd - $timeStart);?>
Nach dem Login kopieren




------解决方案--------------------
由于php没有计时器,所以你不可能中断一个没有中断接口的函数的执行
所以底层函数都只适合于理想的条件下

我依然建议你使用多道的curl来完成你的工作
PHP code
$urls = array( 'http://www.jxcms.com/upload/2011/0518/0337319304.jpg', 'http://www.jxcms.com/upload/2011/0310/0951568835.jpg', 'http://www.tzksgs.com/upload/banner1.jpg', 'http://www.tzksgs.com/upload/banner2.jpg');$mh = curl_multi_init();foreach ($urls as $i => $url) {       $conn[$i] = curl_init($url);       curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER,1);       curl_multi_add_handle($mh, $conn[$i]);}do {  curl_multi_exec($mh, $active);  //在这个循环中,你有机会中断程序的执行。curl_getinfo提供了连接的各种信息}while($active);foreach ($urls as $i => $url) {  $fn = basename($url);  file_put_contents($fn, curl_multi_getcontent($conn[$i]));  curl_close($conn[$i]);}<div class="clear">
                 
              
              
        
            </div>
Nach dem Login kopieren
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)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen 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)

Das Reinigungsprinzip des Ordners /tmp/ im Linux-System und die Rolle der tmp-Datei Das Reinigungsprinzip des Ordners /tmp/ im Linux-System und die Rolle der tmp-Datei Dec 21, 2023 pm 05:36 PM

Bei den meisten .tmp-Dateien handelt es sich um Dateien, die aufgrund eines abnormalen Herunterfahrens oder Absturzes zurückgeblieben sind. Diese temporären Arbeitsdisketten haben nach einem Neustart des Computers keine Verwendung mehr, sodass Sie sie bedenkenlos löschen können. Wenn Sie das Windows-Betriebssystem verwenden, finden Sie möglicherweise häufig einige Dateien mit dem Suffix TMP im Stammverzeichnis des Laufwerks C. Außerdem finden Sie im Windows-Verzeichnis ein TEMP-Verzeichnis. TMP-Dateien sind temporäre Dateien, die von verschiedenen Softwareprogrammen generiert werden Systeme, auch Junk-Dateien genannt. Von Windows generierte temporäre Dateien sind im Wesentlichen dasselbe wie virtueller Speicher, mit der Ausnahme, dass temporäre Dateien gezielter sind als virtueller Speicher und nur einem bestimmten Programm dienen. Und seine Besonderheit hat dazu geführt, dass sich viele Neulinge davon einschüchtern ließen und es nicht löschten.

Was bedeutet der http-Statuscode 520? Was bedeutet der http-Statuscode 520? Oct 13, 2023 pm 03:11 PM

Der HTTP-Statuscode 520 bedeutet, dass der Server bei der Verarbeitung der Anfrage einen unbekannten Fehler festgestellt hat und keine genaueren Informationen bereitstellen kann. Wird verwendet, um darauf hinzuweisen, dass bei der Verarbeitung der Anforderung durch den Server ein unbekannter Fehler aufgetreten ist, der durch Serverkonfigurationsprobleme, Netzwerkprobleme oder andere unbekannte Gründe verursacht werden kann. Dies wird normalerweise durch Serverkonfigurationsprobleme, Netzwerkprobleme, Serverüberlastung oder Codierungsfehler verursacht. Wenn Sie auf einen Fehler mit dem Statuscode 520 stoßen, wenden Sie sich am besten an den Website-Administrator oder das technische Support-Team, um weitere Informationen und Unterstützung zu erhalten.

Wie kann ich in CentOS 7 auf Junk-Dateien im Verzeichnis /tmp zugreifen und diese bereinigen? Wie kann ich in CentOS 7 auf Junk-Dateien im Verzeichnis /tmp zugreifen und diese bereinigen? Dec 27, 2023 pm 09:10 PM

Im tmp-Verzeichnis des Centos7-Systems befindet sich viel Müll. Wie sollten Sie den Müll löschen? Werfen wir einen Blick auf das ausführliche Tutorial unten. Um die Liste der Dateien im tmp-Dateiverzeichnis anzuzeigen, führen Sie den Befehl cdtmp/ aus, um zum aktuellen Dateiverzeichnis von tmp zu wechseln, und führen Sie den Befehl ll aus, um die Liste der Dateien im aktuellen Verzeichnis anzuzeigen. Wie nachfolgend dargestellt. Verwenden Sie den Befehl rm, um Dateien zu löschen. Beachten Sie, dass der Befehl rm Dateien dauerhaft aus dem System löscht. Daher wird empfohlen, vor dem Löschen der Datei eine Eingabeaufforderung zu geben. Verwenden Sie den Befehl rm-i file name, warten Sie, bis der Benutzer den Löschvorgang bestätigt (y) oder den Löschvorgang überspringt (n), und das System führt die entsprechenden Vorgänge aus. Wie nachfolgend dargestellt.

Was ist der HTTP-Statuscode 403? Was ist der HTTP-Statuscode 403? Oct 07, 2023 pm 02:04 PM

Der HTTP-Statuscode 403 bedeutet, dass der Server die Anfrage des Clients abgelehnt hat. Die Lösung für den HTTP-Statuscode 403 ist: 1. Überprüfen Sie die Authentifizierungsdaten. Wenn der Server eine Authentifizierung erfordert, stellen Sie sicher, dass die richtigen Anmeldedaten angegeben werden. 2. Überprüfen Sie die IP-Adresseinschränkungen Die IP-Adresse des Clients ist eingeschränkt oder nicht auf der Blacklist. Wenn der Statuscode 403 mit den Berechtigungseinstellungen der Datei oder des Verzeichnisses zusammenhängt, stellen Sie sicher, dass der Client über ausreichende Berechtigungen zum Zugriff auf diese Dateien oder Verzeichnisse verfügt. usw.

So verwenden Sie Nginx Proxy Manager, um einen automatischen Sprung von HTTP zu HTTPS zu implementieren So verwenden Sie Nginx Proxy Manager, um einen automatischen Sprung von HTTP zu HTTPS zu implementieren Sep 26, 2023 am 11:19 AM

So implementieren Sie den automatischen Sprung von HTTP zu HTTPS mit NginxProxyManager Mit der Entwicklung des Internets beginnen immer mehr Websites, das HTTPS-Protokoll zur Verschlüsselung der Datenübertragung zu verwenden, um die Datensicherheit und den Schutz der Privatsphäre der Benutzer zu verbessern. Da das HTTPS-Protokoll die Unterstützung eines SSL-Zertifikats erfordert, ist bei der Bereitstellung des HTTPS-Protokolls eine gewisse technische Unterstützung erforderlich. Nginx ist ein leistungsstarker und häufig verwendeter HTTP-Server und Reverse-Proxy-Server sowie NginxProxy

Verstehen Sie gängige Anwendungsszenarien der Webseitenumleitung und verstehen Sie den HTTP-301-Statuscode Verstehen Sie gängige Anwendungsszenarien der Webseitenumleitung und verstehen Sie den HTTP-301-Statuscode Feb 18, 2024 pm 08:41 PM

Verstehen Sie die Bedeutung des HTTP 301-Statuscodes: Häufige Anwendungsszenarien der Webseitenumleitung. Mit der rasanten Entwicklung des Internets werden die Anforderungen der Menschen an die Webseiteninteraktion immer höher. Im Bereich Webdesign ist die Webseitenumleitung eine gängige und wichtige Technologie, die über den HTTP-301-Statuscode implementiert wird. In diesem Artikel werden die Bedeutung des HTTP 301-Statuscodes und häufige Anwendungsszenarien bei der Webseitenumleitung untersucht. Der HTTP-Statuscode 301 bezieht sich auf eine permanente Weiterleitung (PermanentRedirect). Wenn der Server die des Clients empfängt

Senden Sie eine POST-Anfrage mit Formulardaten mithilfe der Funktion http.PostForm Senden Sie eine POST-Anfrage mit Formulardaten mithilfe der Funktion http.PostForm Jul 25, 2023 pm 10:51 PM

Verwenden Sie die Funktion http.PostForm, um eine POST-Anfrage mit Formulardaten zu senden. Im http-Paket der Go-Sprache können Sie die Funktion http.PostForm verwenden, um eine POST-Anfrage mit Formulardaten zu senden. Der Prototyp der http.PostForm-Funktion lautet wie folgt: funcPostForm(urlstring,dataurl.Values)(resp*http.Response,errerror)wo, u

Schnelle Anwendung: Praktische Entwicklungsfallanalyse des asynchronen HTTP-Downloads mehrerer PHP-Dateien Schnelle Anwendung: Praktische Entwicklungsfallanalyse des asynchronen HTTP-Downloads mehrerer PHP-Dateien Sep 12, 2023 pm 01:15 PM

Schnelle Anwendung: Praktische Entwicklungsfallanalyse von PHP Asynchroner HTTP-Download mehrerer Dateien Mit der Entwicklung des Internets ist die Funktion zum Herunterladen von Dateien zu einem der Grundbedürfnisse vieler Websites und Anwendungen geworden. In Szenarien, in denen mehrere Dateien gleichzeitig heruntergeladen werden müssen, ist die herkömmliche synchrone Download-Methode oft ineffizient und zeitaufwändig. Aus diesem Grund ist die Verwendung von PHP zum asynchronen Herunterladen mehrerer Dateien über HTTP eine zunehmend verbreitete Lösung. In diesem Artikel wird anhand eines tatsächlichen Entwicklungsfalls detailliert analysiert, wie PHP asynchrones HTTP verwendet.

See all articles