PHP ile bir web sitesinin kaynağını almak için en etkili yolu?

5 Cevap php

Ben file_get_contents bir web sayfasının kaynağını almak için kullanılan olabilir biliyorum, ama ben en verimli yolu bilmek istiyorum.

Ben böyle bir şey kullanır ben uzun zaman önce yapılmış eski bir sınıf vardır:

    $this->socket = fsockopen($this->host, 80);

	fputs($this->socket, 'GET ' . $this->target . ' HTTP/1.0' . "\n");
	fputs($this->socket, 'Host: ' . $this->host . "\n"); 
	fputs($this->socket, 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5' . "\n");
	fputs($this->socket, 'Connection: close' . "\n\n");

	$this->source = '';

	while(!feof($this->socket))
	{
		$this->source .= fgets($this->socket, 128);
	}

	fclose($this->socket);

Bu en iyi yolu nedir? En verimli I döner hızlı sonuç anlamına gelir.

5 Cevap

file_get_contents() en iyi ve en etkili yoludur. Darboğaz ağ değil, işlemci çünkü Ama, her iki şekilde de, çok fark yoktur. Kod okunabilirliği de bir kaygı olmalıdır.

De bu kriter göz önünde bulundurun: http://www.ebrueggeman.com/php_benchmarking_fopen.php

Eğer varsa kod muhtemelen bahsettiğini yapmanın en hızlı ve kolay yoludur. Eğer (gönderme veya HTTP Content-Encoding ve Transfer-Encoding gibi 1.1 şeyler destekleme gibi) daha karmaşık görevleri yapmak istiyorsanız Ancak, çok esnek değildir.

Eğer, daha karmaşık durumlarda ve böyle idare php kullanmak olacak bir şey istiyorsanız cURL.

Böyle homebrew kod ile yerleşik file_get_contents daha iyi bir performans almazsınız. Nitekim, 128 bayt (? Neden?) Gibi kısa dizeleri üzerinde sürekli birleştirme oldukça kötü seslendirecek.

Orada HTTP için are Do It Yourself ya da örneğin, bir harici kitaplık kullanmak için nedenler:

  • Eğer ağ zaman aşımları üzerinde kontrolü gerekir

  • Eğer bunun yerine biriktirme soketine doğrudan içerik akışı istiyorum

ama performans bunlardan biri değildir; yerleşik PHP fonksiyonu basit sadece hakkında hiçbir şey yapamaz bir şeydir ağ hızı ile sınırlı olacaktır.