سؤال

أحاول التقاط صورة من خادم خارجي مع 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