Я хочу получать изображения с другого сайта и показывать на своем сайте. Я хочу сохранить эти изображения на моей стороне временно только во время показа на странице, так что пользователь думает, что изображения приходят с моего сайта. Возможно ли это? Как? Заранее спасибо.
ex: – представьте, что на сервере созданы некоторые графики (некоторые графики мониторинга сети, такие как smokeping), и эти графики хранятся в папке в формате .png
.
ex: – imagine_this_url_has_a_graph (но это всего лишь страница)
так что пользователь хочет показать эти графики на другом веб-сайте.
Простая система кэширования сделает это. Учитывая HTML-файл, например:
<body> <img src="imagesource.php?file=1" /> </body>
Вы можете создать свой источник данных изображений (imagesource.php), например:
<?php $files = array( 'http://img.ruphp.com/php/f', 'http://img.ruphp.com/php/f' ); if(!isset($_REQUEST['file']) || !isset($files[$_REQUEST['file']])) { header('HTTP/1.0 404 Not Found'); exit; } // do we already have the cached file? $requested_file = $files[$_REQUEST['file']]; $cache_dir = '/tmp/cached_images'; $cache_file = md5($requested_file); $cache_path = $cache_dir . '/' . $cache_file; header('Content-Type: image/gif'); if(file_exists($cache_path)) { readfile($cache_path); exit; } //need to create the cache. $data = file_get_contents($requested_file); file_put_contents($cache_path, $data); echo $data;
Это будет кэшировать удаленные изображения локально, если они еще не были загружены, и вывести их в браузер по запросу.
Когда запрос изображения делается против вашего сервера, просто используйте fopen()
чтобы открыть удаленное изображение, и fpassthru()
чтобы передать его.
используйте fileread()
вместо fopen()
если вы хотите вывести изображение, как оно есть, иначе вы получите сообщение об ошибке.