Вопрос

Я пытаюсь получить изображение с внешнего сервера с fsockopen в PHP. Мне нужно получить данные изображения в переменную в кодировании Base64 в моем коде. Изображение представляет собой тип файла .jpeg и является небольшим изображением.

Я не мог найти никаких ответов в Google после некоторого поиска. Поэтому мне интересно, не возможно ли это непосредственно без странных обходных путей?

Любая помощь и/или предложения очень ценится!

Обратите внимание, что allow_url_fopen отключен на моем сервере из -за угроз безопасности.

Это мой текущий код:

$wn_server = "111.111.111.111";

$url = "GET /webnative/portalDI?action=getimage&filetype=small&path=".$tmp." HTTP/1.1\r\n";

$fp = fsockopen($wn_server,80,$errno,$errstr,15);
stream_set_timeout($fp, 30);

$imageDataStream = "";

if (!$fp) {
    echo "Error " . $errno . "(" . $errstr . ")";
} else {
    $out = $url;
    $out .= "Host: " . $wn_server . "\r\n";
    $out .= "Authorization: Basic " . $_SESSION['USER'] . "\r\n";
    $out .= "Connection: Close\r\n\r\n";
    $out .= "\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        $imageDataStream .= fgets($fp, 128);
    }
    fclose($fp);
}
Это было полезно?

Решение

Вы имеете в виду что -то вроде этого:

$ch = curl_init();

// Authentication
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_USERPWD, 'username:password'); 

// Fetch content as binary data
curl_setopt($ch, CURLOPT_URL, $urlToImage);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// Fetch image data
$imageData = curl_exec($ch);

curl_close($ch);

// Encode returned data with base64
echo base64_encode($imageData);

Другие советы

Попробуйте Follwoing

header('Content-Type: image/png');
echo $imageData;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top