0

次の PHP は、このイメージを渡すと、$cache に 0 バイトを書き込みます (ただし、他のすべての既知のイメージでは問題なく動作します)。writeImage の呼び出しの直前のエコーがコメント解除されている場合、正常に動作します。(PHP は別の<?php exec('php -f thumb.php -- img=zc9vfo.png >output'); ?>理由で実行されています。) 誰かが私に何を調べるかについてのヒントを与えることができれば、それは素晴らしいことです。

if(isset($argc) && (!isset($_GET) || empty($_GET))){
  for($i = 1; $i < $argc; ++$i){
    if(strpos($argv[$i], '--') === 0){
      $argv[$i] = substr($argv[$i], 2);
    }
    list($key, $value) = explode('=', $argv[$i], 2);
    $_GET[$key] = $value;
  }
}

if(!isset($_SERVER['DOCUMENT_ROOT']) || $_SERVER['DOCUMENT_ROOT'] == ''){
  $_SERVER['DOCUMENT_ROOT'] = /* ... */;
}

$name =& $_GET['img'];
if(!isset($name)){
  die('unspecified');
}

$pipe_name = realpath("{$_SERVER['DOCUMENT_ROOT']}/lib/php/pipes") . "/$name";
if(!file_exists($pipe_name) && !posix_mkfifo($pipe_name, 0777)){
  file_put_contents('output', 'Pipe could not be created.');
  exit(1);
}
$pipe = fopen($pipe_name, 'r+');
if(!$pipe){
  file_put_contents('output', 'Pipe could not be opened.');
  exit(1);
}

function pipe($msg, $die=FALSE){
  global $pipe;
  fwrite($pipe, $msg . PHP_EOL);
  if($die){
    die($msg);
  }else{
    echo $msg;
  }
}

$w = 150;
$h = 114;

if(!file_exists($image = $_SERVER['DOCUMENT_ROOT'] . '/images/' . $name)){
  pipe('invalid', TRUE);
}
$cache = $_SERVER['DOCUMENT_ROOT'] . '/thumbs/' . $name;
if(!file_exists($cache)){
  $thumb = new Imagick($image);
  $thumb->flattenImages();
  $quotient = min($thumb->getImageWidth() / $w,
                  $thumb->getImageHeight() / $h);
  $thumb->cropImage($w * $quotient, $h * $quotient, 0, 0);
  $thumb->scaleImage($w, $h);
//  echo $thumb->getImageBlob();
  $thumb->writeImage($cache);
}

pipe('success');

fclose($pipe);

?>
4

2 に答える 2

1

誤用している可能性がありますflattenImages。ユーザーノートから:

この関数はImagickオブジェクトを返し、既存のオブジェクトを変更しないことに注意してください。

また、誤ってエラー状態を無視している可能性があります。 cropImagescaleImageおよびwriteImageすべてが成功するとブール値trueを返し、最初の2つは失敗時に例外をスローします。

ゼロバイトのファイルを書き込むとき、ゼロgetImageBlobバイトも返しますか?あなたがそれをコメントアウトしたのを見るので、明らかにあなたはそれを少し突っついていました。

于 2011-03-18T21:21:19.340 に答える
-1

どうやらImageMagick、IMagick、libpngのインストールに問題があるようです。このフォーラムスレッドを参照してください:http: //www.imagemagick.org/discourse-server/viewtopic.php?f = 3&t = 18326

于 2011-03-20T23:43:08.527 に答える