Php fsockopen garip gecikme ilanı

4 Cevap php

Php kod aşağıdaki bölümde çalışıyorum. Amaç bir sunucudan başka bir görüntü dosyası POST etmektir. Bu mükemmel ve çok hızlı bir şekilde sürece dosya olarak çalışır < ~ 250k. 250k çok üzerinde ve işlem süresi görüntü boyutu ile oradan ~ 60 saniye, ve artar atlar.

Herhangi bir fikir?

Teşekkürler!

John

$fileContents = file_get_contents($_FILES[$key]['tmp_name']);
$time = strtotime("now");
$body = "--f6sd54c2
Content-Disposition: form-data; name=\"id\"
Content-Length: " . strlen($id) . "

{$id}
--f6sd54c2
Content-Disposition: form-data; name=\"key\"
Content-Length: " . strlen("654t2bsr65t42czd13fvs6dry87") . "

654t2bsr65t42czd13fvs6dry87
--f6sd54c2
Content-Disposition: form-data; name=\"time\"
Content-Length: " . strlen($time) . "

{$time}
--f6sd54c2
Content-Disposition: form-data; name=\"photo\"; filename=\"photo.jpg\"
Content-Type: image/jpeg
Content-Length: " . strlen($fileContents) . "

{$fileContents}
--f6sd54c2--";


$headers = "POST /photos/process.php HTTP/1.1
Host: www.hostname.com
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=f6sd54c2
Content-Length: " . strlen($body) . "

";

$fp = fsockopen("www.hostname.com", 80, $errno, $errstr);
if ($fp){
    fwrite($fp, $headers . $body);
    fclose($fp);
}

4 Cevap

Eğer hemen bağlantıyı kapatmadan olsa bile HTTP/1.1 kullanıyor. HTTP/1.1 belki lag tanıtan bağlantıyı korur. Sen CURL kullanılmış olmalıdır, kendi istemci yazıyorum özellikle HTTP için always kötü bir fikir olduğunu. Mühendisler sivilceyi kalkmasından asla. HTTP/1.0 için başlık değiştirerek işe yaramazsa, kıvrılma sorunu çözecektir.

Diğer sunucu bir dosya gözatma / girdi alanı ile bir çok parçalı html formdan gelen veriyi işlemek için gerek yoksa, o zaman bu gibi normal bir POST isteği bir şey ile bir dosya aktarımı kurmak olabilir:

$postQuery = 'fileName=image.jpg&fileData='.base64_encode(file_get_contents('image.jpg'));

Daha sonra sunucu da $_POST['fileName'] ve $_POST['fileData'] kullanılabilir.

Ayrıca Bağlantı var: canlı tutma .. bu bağlantıyı açık tutacak. Bağlantısı deneyin: istek yapıldıktan sonra yakın bağlantısını sonlandırmak için

Ben aslında kayıt olmadan yayınlanmıştır beri, ben doğru benim yazı düzenleyebilir / cevap emin değilim, ama burada cevap verecektir ...

  • Sunucu bağlantısı net üzerinden basitçe.

  • Kesinlikle CURL kullanmak benim hayat çok daha kolay olurdu, ama ne yazık ki bu sunucuda kullanılabilir değil.

  • HTTP/1.0 geçiş çalıştı, bağlantı çalıştı: yakın ama sorun aynı kalır. Herhangi bir yerde bu seviyenin üzerinde belirli bir seviyede (birkaç yüz kb) altında anlık transferi, yakın ve en az bir dakika sürer.

Teşekkürler.