【问题标题】:Google Chrome "Failed to load resource"谷歌浏览器“加载资源失败”
【发布时间】:2012-06-14 14:25:09
【问题描述】:

我正在使用水印系统来保护我页面上的所有照片:

<?php
$imagesource = $_SERVER['DOCUMENT_ROOT']."**path**".$_GET['path'];
if (!file_exists($imagesource)) die();
$filetype = strtolower(substr($imagesource,strlen($imagesource)-4,4));
if($filetype == ".gif") $image = @imagecreatefromgif($imagesource); 
if($filetype == ".jpg") $image = @imagecreatefromjpeg($imagesource); 
if($filetype == ".png") $image = @imagecreatefrompng($imagesource); 
if (empty($image)) die();
$watermark = @imagecreatefrompng('watermark_'.(imagesx($image) <= 1100 ? "port" : "lans").'.png');
$imagewidth = imagesx($image);
$imageheight = imagesy($image); 
$watermarkwidth = imagesx($watermark);
$watermarkheight = imagesy($watermark);
$startwidth = (($imagewidth - $watermarkwidth)/2);
$startheight = (($imageheight - $watermarkheight)/2);
imagecopy($image, $watermark,  $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight);
header("Content-type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
?>

这很好用,但是当我在 Google Chrome 中加载此页面时,图像会预先加载并显示,但一旦它们呈现 Chrome 就会显示“加载资源失败”。这很奇怪,因为如果您未能加载它,为什么要显示它呢?

无论如何,我无法在任何其他浏览器上复制此问题。这又是奇怪的,这告诉我脚本没有问题。

我注意到图像越小,正确显示的越多,但是加载 19 张图片中有 2 张有什么好处!!

现在,当我正常显示图像时(即没有水印脚本。通过“”标签),这不会发生

但我在另一个网站上没有水印脚本,但它们仍然无法加载。

我的另一个问题是;

由于管理我的网站合同的法律,我必须对原始文件使用版权和 .htaccess 保护...无论如何,用户无法直接访问图像源文件。这些错误可能是由此造成的吗?但话又说回来,为什么有些会显示而有些不会,同样为什么只有谷歌浏览器有这个问题?

你的想法会被理解的。

附:这是我的浏览器信息:

Google Chrome   19.0.1084.56 (Official Build 140965) m
OS  Windows
WebKit  536.5 (@119244)
JavaScript  V8 3.9.24.29
Flash   11,3,300,257
User Agent  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5

视觉示例:

【问题讨论】:

    标签: php html google-chrome console image


    【解决方案1】:

    似乎是 chrome 中的一个错误。一直让我发疯最终想出了一个使用 base64 的“修复”。保持您的水印脚本完全相同,然后进入输出图像的脚本。

    function base64_encode_image ($imagefile) {
          $filename=htmlentities($imagefile);
          $filetype = pathinfo($filename, PATHINFO_EXTENSION);
          $imgbinary = file_get_contents($filename);
          return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
    }
    
    $string=base64_encode_image("http://www.domain.com.au/watermark.php?imagesrc=image1.jpg");
    
    $imgList.="<img src=\"$string\" title=\"\">";
    

    【讨论】:

      【解决方案2】:

      问题可能是由于您没有归还 Content-Lentgh。

      您必须将imagejpeg($image); 行替换为以下代码:

          imagejpeg($image, 'php://memory/temp.jpeg'); 
          header("Content-Length: " . filesize('php://memory/temp.jpeg'));
          $fp = fopen("php://temp/temp.jpeg", 'r');
          echo stream_get_contents($fp);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        • 2016-01-17
        • 2016-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多