将 IMG 拉入 PHP 文件

发布于 2024-07-12 01:34:30 字数 139 浏览 2 评论 0原文

我在同一目录中有一个 PHP 文件和一个图像。 我怎样才能让 PHP 文件将其标头设置为 jpeg 并将图像“拉”到其中。 所以如果我去 file.php 它会显示图像。 如果我将 file.php 重写为 file_created.jpg 并且它需要工作。

I have a PHP file and an image in the same directory. How could I get the PHP file to set it's headers as jpeg and "pull" the image into it. So if I went to file.php it would show the image. If I rewrite file.php to file_created.jpg and it needs to work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

未央 2024-07-19 01:34:30

不要按照另一个答案的建议使用 file_get_contents ,而是使用 readfile 并输出更多 HTTP 标头以便更好地播放:

   <?php
    $filepath= '/home/foobar/bar.gif'
    header('Content-Type: image/gif');
    header('Content-Length: ' . filesize($filepath));
    readfile($file);
   ?>

readfile 从文件中读取数据并直接写入输出缓冲区,而 file_get_contents 会首先将整个文件拉入内存然后输出。 如果文件很大,使用 readfile 会有很大的不同。

如果你想变得更可爱,你可以输出上次修改时间,并检查传入的 http 标头中的 If-Modified-Since 标头,并返回一个空的 304 响应,告诉浏览器他们已经拥有当前版本......这是一个更完整的示例,展示了如何做到这一点:

$filepath= '/home/foobar/bar.gif'

$mtime=filemtime($filepath);

$headers = apache_request_headers(); 
if (isset($headers['If-Modified-Since']) && 
    (strtotime($headers['If-Modified-Since']) >= $mtime)) 
{
    // Client's cache IS current, so we just respond '304 Not Modified'.
    header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT', true, 304);
    exit;
}


header('Content-Type:image/gif');
header('Content-Length: '.filesize($filepath));
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT');
readfile($filepath);

Rather than use file_get_contents as suggested by another answer, use readfile and output out some more HTTP headers to play nicely:

   <?php
    $filepath= '/home/foobar/bar.gif'
    header('Content-Type: image/gif');
    header('Content-Length: ' . filesize($filepath));
    readfile($file);
   ?>

readfile reads the data from the file and writes direct to the output buffer, whereas file_get_contents would first pull the entire file into memory and then output it. Using readfile makes a big difference if the file is very large.

If you wanted to get cuter, you could output the last modified time, and check the incoming http headers for the If-Modified-Since header, and return an empty 304 response to tell the browser they already have the current version....here's a fuller example showing how you might do that:

$filepath= '/home/foobar/bar.gif'

$mtime=filemtime($filepath);

$headers = apache_request_headers(); 
if (isset($headers['If-Modified-Since']) && 
    (strtotime($headers['If-Modified-Since']) >= $mtime)) 
{
    // Client's cache IS current, so we just respond '304 Not Modified'.
    header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT', true, 304);
    exit;
}


header('Content-Type:image/gif');
header('Content-Length: '.filesize($filepath));
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT');
readfile($filepath);
心不设防 2024-07-19 01:34:30

应该很简单:

<?php
    $filepath= '/home/foobar/bar.jpg';
    header('Content-Type: image/jpeg');
    echo file_get_contents($filepath);
?>

您只需要弄清楚如何确定正确的哑剧类型,这应该是非常简单的。

Should be easy as:

<?php
    $filepath= '/home/foobar/bar.jpg';
    header('Content-Type: image/jpeg');
    echo file_get_contents($filepath);
?>

You will just have to figure out how to determine the correct mime type, which should be pretty trivial.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文