如何解决php脚本创建的截断图像?

时间:2015-12-04 01:55:28

标签: php image mirror

我有一个被php脚本切断的图像。我称之为。

 <img src="/index.php/image-name.jpg">

如果图片超过5分钟,我的脚本将从数据提供者检索图像的新副本,然后显示新图像。

当提供图像的网站有负载并且此脚本用于获取新副本时,它通常只显示图像的顶部。 Firebug会告诉我图像已损坏或被截断。如果我在新选项卡中打开图像,我的服务器将有一个完整的副本。如果我在5分钟内第二次运行脚本,它就能完美运行。

看起来如果需要超过一定的时间才能使图像失败并且仅显示顶部。在放弃之前如何让它等待更久的任何想法?或者我可能完全走错了路线。

<?php
  // get the image name from the uri
  $path= $_SERVER['REQUEST_URI'];
  $image = explode("/", $path);
  $image=$image[3];//Get the file name
  $image=str_replace('%20',' ', $image); //make it all spaces

  $localimage='./road_images/'.$image; //where to find the image on the sever
  // check if the image exists, this prevents some kinds of attacks
  if (is_file($localimage)) {
    $age = filemtime($localimage);     // get the file age
    if ($age < time() - (60*5)) { // 5 mins old
        $simage='http://www.someplace/cams/'.$image;
        $simage=str_replace(' ', '%20', $simage);//need to remove the spaces for URLs
        copy($simage, $localimage);
    }
    // serve the image to the user.
    $fp = fopen($localimage, 'r');
    // send the right headers
    header("Content-Type: image/jpg");
    header("Content-Length: " . filesize($localimage));
    // dump the picture and stop the script
    fpassthru($fp);
    exit();
  }
  else
  {
        echo("Error, no such file: '$image'");
  }
?>

编辑:通过编辑

发现了
        header("Content-Length: " . filesize($localimage));

它按预期工作。还在试图找出原因。

1 个答案:

答案 0 :(得分:0)

那很痛苦。我传递了错误的Content-Length标头值。编辑内容长度解决了它,以便它工作得很好。考虑到它是静态内容,我不知道为什么我上面的内容不起作用。

随着越来越多的研究找到了可行的方法。

我把Dentist放在了开头附近。 在脚本退出之前,新的Content-Length标头describe 'POST #create' do before { Dentist.create!(id: 1) } it 'assigns a newly created appointment as @appointment' do post :create, { dentist_id: '1', appointment: { patient_id: '2', appt_date: '2015-12-05 09:00:00' } } ... end end 位于底部。

每次都这样做,对浏览器很好。