Bir veritabanından PHP üzerinden görüntü akışı zaman başlıklarını Başlarken

2 Cevap php

Ben bir veritabanından ikili görüntü verilerini döndüren bazı oldukça basit php kodu var.

ob_start();

$stmt = $db->prepare($sql);
$stmt->execute(array($ImageID));
$stmt->bindColumn(1, $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);

ob_clean();
header("Content-Type: " . $content_type);

fpassthru($lob);

Kullanıcının bu script get_image.php diyelim. Ben görüntü verilerini almak ve sonra işlemek için başka birinden bu komut arıyorum. Şöyle.

$src = file_get_contents('example.com/get_image.php?ImageID=foo');

$src = imagecreatefromstring($src);
imagecopyresized($newfile, $src, 0, 0, 0, 0, $newwidth, $newheight, $origwidth, $origheight);

Ben "Veri tanınan bir biçimde değil" diyerek görüntü işleme fonksiyonları hataları alıyorum. Tepkisinde bir göz aldıktan sonra benim $ src değişkeni includes the headers as well as the binary data gibi görünüyor. Ben araştırma yaptım ama başlık çıktı kurtulmak ve sadece ham ikili dize ile çalışmak için nasıl anlamaya olamaz. Herhangi bir yardım takdir edilmektedir.

Ben yerine ham ikili veri $ src dize, yazdırmak ise açık olmak gerekirse, ben aşağıdaki olsun.

HTTP/1.1 200 OK
Date: Thu, 19 Nov 2009 17:33:01 GMT
Server: Apache/2.2.8 (Unix) ...
X-Powered-By: PHP/5.2.11
Connection: close
Content-Type: image/jpeg

/* Then all the binary data */

2 Cevap

Ben gerçek çözüm (sadece, hiçbir başlık cevap gövdesini olsun) ama benim HTTP biliyorum nerede muhtemelen hayır PHP uzmanı değilim. Bu amaçla, senin gibi bir HTTP isteği başlıkları ve vücut üzerinde her iki <CR><LF> 's ile sınırlandırılmış var. Sen yanıt almak ve oradan bir alt dize almak gerekir. Örnek iDontKnowPhp kodu:

$start = $src.positionOf('<CR><LF><CR><LF>')
$stop  = $src.lenght()
$img   = $src.sub($start, $stop)

PHP fopen akım sarıcı başlık sıyırma değil gibi görünüyor. Yerine file_get_contents yerine CURL deneyin:

<?php

$ch = curl_init("http://www.example.com/myimagescript.php");

curl_setopt($ch, CURLOPT_HEADER, 0);  // No headers
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // grab the content of the file
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);

$contents= curl_exec($ch);
curl_close($ch);


?>