注意:請閱讀整個問題,直接之前,請仔細瞭解情況跳進回答部分遠程圖像顯示不工作(現在用的file_get_contents和捲曲工作)
我覺得這是一個很簡單的問題,我無法弄清楚。
基本上這個工作得很好。
URL示例:http://localhost/test/image.php
文件名:image.php文件
<?php
// $url = $_GET['url'];
$url = 'http://google.com/images/srpr/logo11w.png';
function data_uri($file)
{
$contents = file_get_contents($file);
$finfo = new finfo(FILEINFO_MIME);
$mime = $finfo->buffer($contents);
PHP_EOL;
$base64 = base64_encode($contents);
return ('data:' . $mime . ';base64,' . $base64);
}
echo '<img src="' . data_uri($url) . '" alt="Test image" />';
?>
但我這樣做的時候(即下面一個),它不工作,我無法弄清楚什麼地方錯誤或我在這個過程中缺少的東西。
URL示例:http://localhost/test/displayimage.php
文件名:displayimage.php
<img src="http://localhost/test/imageserver.php" alt="image not displaying">
圖像服務器文件 文件名:imageserver.php
<?php
// $url = $_GET['url'];
$url = 'http://google.com/images/srpr/logo11w.png';
function data_uri($file)
{
$contents = file_get_contents($file);
$finfo = new finfo(FILEINFO_MIME);
$mime = $finfo->buffer($contents);
PHP_EOL;
$base64 = base64_encode($contents);
return ('data:' . $mime . ';base64,' . $base64);
}
echo data_uri($url);
?>
我是否需要設置任何類型的頭或類似的東西之前echoing data_uri。歡迎任何快速建議,使其在第二個網址工作。
原因,我想實現這個
我想顯示這可能是通過HTTP客戶網站的內容,但我的服務器是在SSL和它給我這個錯誤:混合內容:頁面在'http://***/applist.css'。此請求已被阻止;內容必須通過HTTPS提供。通過這種方法,我試圖將http內容作爲包裝到我的服務器中的頁面,即作爲https請求調用頁面,以便我可以擺脫此警告消息和瀏覽器阻止的內容。 。我試圖服務器非SSL(HTTP)內容到我的SSL(HTTPS)服務器是這樣的:
<img src="https://mywebsite.com/imageserver.php?url=http://php.net/images/logo.php" />
,以便它不會阻止的內容和亙古不顯示警告信息
注意:希望此消息對其他面臨同樣問題的人有所幫助
編輯:解決方案
我犯了愚蠢的錯誤。我試圖在使用url顯示圖像時使用data:mimetype。從Remote image display is not working (now working using file_get_contents and curl)該解決方案的偉大工程,並特別提到這個答案以及Remote image display is not working (now working using file_get_contents and curl)
解決方案代碼:
<?php
// $url = $_GET['url'];
$url = 'http://google.com/images/srpr/logo11w.png';
function data_uri($file)
{
$contents = file_get_contents($file);
$finfo = new finfo(FILEINFO_MIME);
$mime = $finfo->buffer($contents);
return array($mime, $contents);
}
list($mime, $content) = data_uri($url);
header('Content-type: '.$mime);
die($content);
?>
如果有人有興趣的解決方案使用curl而非file_get_contents
,下面的替代解決方案將很好地工作這是我在等待上述代碼的解決方案時找到的。(http://ryansechrest.com/2012/07/send-and-receive-binary-files-using-php-and-curl/)
文件名:imageserver_curl.php
<?php
// $url = $_GET['url'];
$url = 'http://php.net/images/logo.php';
$token = 'N43feedfggsaedwufvworuworjslfurw';
$resource = curl_init();
curl_setopt($resource, CURLOPT_URL, $url);
curl_setopt($resource, CURLOPT_HEADER, 1);
curl_setopt($resource, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($resource, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($resource, CURLOPT_COOKIE, 'apiToken=' . $token);
$file = curl_exec($resource);
curl_close($resource);
$file_array = explode("\n\r", $file, 2);
$header_array = explode("\n", $file_array[0]);
foreach($header_array as $header_value) {
$header_pieces = explode(':', $header_value);
if(count($header_pieces) == 2) {
$headers[$header_pieces[0]] = trim($header_pieces[1]);
}
}
header('Content-type: ' . $headers['Content-Type']);
// header('Content-Disposition: ' . $headers['Content-Disposition']); #download option
echo substr($file_array[1], 1);
使用方法如下
文件名和網址:http://localhost/test/displayimage.php
<img src="http://localhost/sandbox/securecontent/imageserver_curl.php">
我認爲這裏應該是.jpg,.png 不是.php – Saty
@satishrajak不好意思,我不認爲你正確理解了這個問題。我正在使用遠程URL動態生成圖像http://website.com/default-user.png 如果你把.jpg,.png,將如何在該文件中編寫php腳本? –