PHP Copy从远程服务器动态创建TIFF图像

时间:2012-11-22 07:34:43

标签: php image dynamic curl tiff

我写了一个脚本,搜索现有的法律案件,以寻找“动议干预”和“动议强迫”之类的事情。如果正则表达式返回true,则它会查看是否有在线文档的扫描图像供公众使用。该图像是TIFF文件,但不是普通的tiff文件。这是我想要复制到我自己的服务器的示例的链接。

http://www.oscn.net/applications/oscn/getimage.tif?submitted=true&casemasterid=2565129&db=OKLAHOMA&barcode=1012443256

如果您只是尝试查看http://www.oscn.net/applications/oscn/getimage.tif

,则会出现以下错误

这是一个TIFF文件,但动态。我已经使用了fopen(),CURL等没有成功。我已经将这些类型的函数与来自随机站点的JPG图像一起用来检查以确保我的服务器允许这种类型的东西并且它有效。

我没有在服务器上安装PDFlib(我检查了PEAR,但它在那里也没有,但我不是100%确定它就在那里。)我的主机使用cPanel。服务器正在运行Apache。我不确定在哪里寻找解决这个问题的方法。

我见过一些使用PDFlib的解决方案,但每个解决方案都抓住了一个普通的TIFF图像,而不是动态创建的图像。我的想法是,如果我可以将图像数据传输到流,那么我应该不能使用fopen()并将该数据写入或缓冲到我自己的.tif文件中吗?

感谢任何投入和感恩节快乐!

更新:问题不在于CURL,而是我抓取的URL传递给CURL。当我将$ url打印到屏幕上时,它看起来是正确的,但事实并非如此。某处&转为&,然后抛出CURL,因为它正在获取一个无效的URL(至少根据TIF文件所在的远程服务器无效)。

对于那些后来发现这一点的人来说,这是完美运行的脚本。

//*******************************************************************************
$url = 'http://www.oscn.net/applications/oscn/getimage.tif"
$url .= '?submitted=true&casemasterid=2565129&db=OKLAHOMA&barcode=1016063497';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // set the url
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // get the transfer as a string, rather than output it directly

print "Attempting to fetch file...\n";
$img = curl_exec($ch); // get the image

//I used the time() so that in testing I would know when a new file was created rather than always overwriting the old file. This will be changed for final version
if($img){
  $fh = fopen('oscn_docs/' . time(). '.tif', 'w'); // this will simply overwrite the file. If that's not what you want to do, you'll have to change the 'w' argument!
  if($fh){
    $byteswritten = fwrite($fh, $img);
    fclose($fh);
  }else{
    print "Unable to open file.\n";
  }
}else{
  print "Unable to fetch file.\n";
}

print "Done.\n";
exit(0);
//*******************************************************************************

贾罗德

1 个答案:

答案 0 :(得分:0)

对于那些以后发现它们的人来说,这里的脚本可以完美地发挥作用。

//*******************************************************************************
$url = 'http://www.oscn.net/applications/oscn/getimage.tif"
$url .= '?submitted=true&casemasterid=2565129&db=OKLAHOMA&barcode=1016063497';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // set the url
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // get the transfer as a string, rather than output it directly

print "Attempting to fetch file...\n";
$img = curl_exec($ch); // get the image

//I used the time() so that in testing I would know when a new file was created rather than always overwriting the old file. This will be changed for final version
if($img){
  $fh = fopen('oscn_docs/' . time(). '.tif', 'w'); // this will simply overwrite the file. If that's not what you want to do, you'll have to change the 'w' argument!
  if($fh){
    $byteswritten = fwrite($fh, $img);
    fclose($fh);
  }else{
    print "Unable to open file.\n";
  }
}else{
  print "Unable to fetch file.\n";
}

print "Done.\n";
exit(0);
//*******************************************************************************