php gd: изображение не может быть отображено, так как оно содержит ошибки

Меня очень раздражает эта ошибка:

Если я закомментирую

require_once'../class/myclass.class.php'; 

изображение отображается. Если я раскомментирую свою строку, вызывающую myclass.class.php, у меня будет это сообщение:

"The image "http://..." cannot be displayed because it contains errors."

Мой код прост:

мой класс.класс.php :

<?php    
class myclass {
  public function getPanelData( $model ){
    $aFieldsData = array(
      'PAN35'=>array(
        'col'=>1,
        'row'=>3,
        'v-font'=>10,
        'v-marge-top'=>0,
        'v-marge-right'=>1,
        'v-marge-bottom'=>0,
        'v-marge-left'=>1
      )
    );
    if( key_exists($model, $aFieldsData) )
      return $aFieldsData[$model];
    else
      return false;
    }
  }
?>

img.inc.php:

<?php
  session_start();
  require_once('myfunctions.inc.php');
  require_once('../class/myclass.class.php');
  $oData = new myclass();
  header('Content-Type: image/png');
  $sPanelModel = $_SESSION['produit'];
  $sEtiquette = '../img/etiquettes/label_'.$sPanelModel.'_preview.png';
  $rImg = imagecreatefrompng($sEtiquette);
  imagepng($rImg);
  imagedestroy($rImg);
?>

Примечание. Этот код работает, если я прокомментирую require_once при вызове myclass.class.php. Вызов functions.inc.php работает (только несколько функций).

tree :
/
 + class
   + myclass.class.php
 + inc
   + functions.inc.php
   + img.inc.php
 + images
   + etiquettes

person Niwan    schedule 24.04.2012    source источник
comment
Я действительно не понимаю, чего вы пытаетесь достичь - зачем вы вообще используете imagecreatefrompng(), когда вы просто выводите одно и то же изображение? Вы можете просто доставить его с помощью readfile(). Я предполагаю, что вы сделаете что-то со своим ресурсом изображения позже... Если это сработает, когда вы прокомментируете объявление require, я подозреваю, что у вас может быть несколько объявлений myclass или что в самом файле есть пустая строка после ?›, таким образом выводя пробелы. Возможно, вы захотите взглянуть еще раз.   -  person ExternalUse    schedule 24.04.2012
comment
Привет, спасибо за ваш ответ. Этот код является началом, я сделал шаг за шагом, чтобы быть уверенным в своем коде. Позже я сделаю несколько петель, чтобы заполнить это первое изображение.   -  person Niwan    schedule 24.04.2012
comment
Следите за сообщениями об ошибках PHP, особенно начиная с версии 5.4. Ошибка не будет напечатана на экране, но выдаст ошибку с изображением. Попробуйте 'error_reporting (0);' в верхней части вашего кода, сработало для меня.   -  person Chaoley    schedule 15.03.2015


Ответы (1)


Если это правда, что он работает, раскомментировав require() для myclass.class.php, то наиболее вероятной причиной является то, что этот файл содержит пустые строки (пробелы) перед <?php или после ?>. Это добавит символы Ascii к выводу изображения или вставит сообщение об ошибке php (заголовки не могут быть отправлены) в ваш оператор header() и, таким образом, испортит ваш файл. Однако, как я упоминал в своем комментарии, если вашей единственной целью является вывод изображения, вы можете использовать readfile() вместо создания экземпляра изображения. Надеюсь, это поможет, Стефан.

person ExternalUse    schedule 24.04.2012
comment
МОЙ БОГ ! Большое спасибо, ExternalUse! Я привык проверять эти пробелы в начале всех моих файлов, но на этот раз я думал, что это уже сделано. - person Niwan; 24.04.2012