getimagesize в функции не выдает параметры изображения.

McPetrovich

Новичок
Здравствуйте, уважаемые.
Последнее время очень сильно бъюсь головой об выступающие углы из-за функции вывода картинки, реализованной в классе. Суть в том, что getimagesize ни в какую не хочет обрабатывать изображение на предмет ширины/высоты. Уже через
PHP:
echo
смотрю, что к чему. В итоге - тишина
PHP:
echo $width;
просто не отображается.
PHP:
function getAttachmentStr($refid,$type){
        global $cfg;
        $helpdesk_url=$cfg->getUrl();       
        $dir=$cfg->getUploadDir();        
        $dir = preg_replace("/\\\\/","/",$dir);
        $dir = explode('/', $dir);
        $arrDir = array_reverse($dir);
        $dir = $arrDir[0];        
        $sql ='SELECT attach_id,file_size,file_name,file_key FROM '.TICKET_ATTACHMENT_TABLE.
             ' WHERE deleted=0 AND ticket_id='.db_input($this->getId()).' AND ref_id='.db_input($refid).' AND ref_type='.db_input($type);
        $res=db_query($sql);
        if($res && db_num_rows($res)){
            while(list($id,$size,$name,$key)=db_fetch_row($res)){
				echo "$res <br>";
                $month=date('my',strtotime($this->getCreateDate()));
				echo "Имя папки: $month <br>";
				$hash=MD5($this->getId()*$refid.session_id());
				echo "Хэш сумма: $hash <br>";
                $size=Format::file_size($size);
				echo "Размер: $size <br>";
                $ext = strtolower(substr(strrchr($name, '.'), 1));
				echo "Расширение: $ext <br>";
                $fullfilename = $helpdesk_url.$dir.'/'.$month.'/'.$key.'_'.$name;
				echo "Полный путь: $fullfilename <br>";
                if (in_array($ext,array('jpg', 'png', 'gif', 'bmp'))) {
                  list($width, $height, $type, $attr) = getimagesize($fullfilename);
				  echo $width;
				  echo $attr;
				  
                    if ($width > 820) {
		      $attachstr.= '<p align="center"><a  class="lightbox" href="'.$fullfilename.'"><img src="'.$fullfilename.'" width="820"/></a></p><br />';
		    } else {
		      $attachstr.= '<p align="center"><a  class="lightbox" href="'.$fullfilename.'"><img src="'.$fullfilename.'" /></a></p><br />';
		    }
		}
                $attachstr.= "<a class='Icon file' href='attachment.php?id=$id&ref=$hash'><b>$name</b></a>&nbsp;(<i>$size</i>)&nbsp;&nbsp;";
            }
        }
        return ($attachstr);
    }

Конечный вывод при обращении к функции:
Resource id #64
Имя папки: 0312
Хэш сумма: 54e7f76df972ef1c9ded8c0866b025f0
Размер: 18.6 kb
Расширение: jpg
Полный путь: http://localhost/os/media/0312/19494592DC25AF0_login_lock.jpg
Ширина:

И все.... Ширина пустая.
Хорошо, думал, что сервак как-то криво настроен. Пробую создать вообще отдельный файл:
PHP:
<?php

list($width, $height, $type, $attr) = getimagesize("media/0312/368432897601F6_welcome.jpg");
echo $width;
?>

Вывод: 1600

Т.е. в принципе лыжи едут. Полез в сторону прав доступа ковырять - все хорошо... chmod -R 777 на всю нужную папку. Ладно думаю, дай ка я добавлю еще одну переменную:

PHP:
$notfull = $dir.'/'.$month.'/'.$key.'_'.$name;
echo "Путь: $notfull <br>";
Выводит:
media/0312/19494592DC25AF0_login_lock.jpg

Хорошо, обратимся к переменной через getimagesize

PHP:
list($width, $height, $type, $attr) = getimagesize($notfull);
echo "Ширина: $width <br>";

И.... не хочет... вот просто не хочет ничего выдергивать из фала.
Господа, гуру. Я в PHP новичок. Прошу сильно каблуками не пинать. Подскажите, куда рыть?
 
Ну, для новичка ты очень неплохо раскопал, так что на новичка не тянешь. Настоящие новички тут в соседних темах пасутся, двух строк без ошибок написать не могут.

Готового ответа на твой вопрос я не вижу, поэтому пара замечаний.
Во-первых, путь в основном коде однозначно неправильный. Надо читать ФАЙЛ, а не URL
Во-вторых, надо убедиться, что ты видишь все возникающие ошибки. Либо на экране, либо в логе. getimagesize имеет ОЧЕНЬ неприятную привычку разражаться недовольными причитаниями, если не удалось прочитать картинку. Поэтому
PHP:
error_reporting(E_ALL);
ini_set('display_errors',1);
в начале скрипта как минимум.
В-третьих, надо сократить количество сущностей.
PHP:
var_dump(getimagesize($notfull));
сведет влияние опечаток на нет
 
И все-таки надо больше отдыхать. Спасибо Вам большое! Суть проблемы оказалась на столько элементарной... Фанат, что бы я без тебя делал. :) Больной мозг не докумекал включить вывод всех ошибок на страницу...
Итог:
error_reporting(E_ALL);
ini_set('display_errors',1);


Смотрим, что к чему. И видим:
Warning: getimagesize(http://localhost/os/media/0312/22CE09135FDB520_welcome.jpg) [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /var/www/os/include/class.ticket.php on line 1048
Ну все, думаю клиника. Перемудрил в настройками доступа. (Лирическое отступление: хост этот сидит во внутренней сети, доступ к нему может осуществляться только при VPN коннекте + определенные прописанные Allow from IP-адреса) и забыл дать доступ самому хосту к себе. Картина наверное получалась приблизительно следующая: сервак испрано работает, показывает картиночки, странички, с базами ковыряется. Но тут ему говорят: дорогой, на, займись делом, дергай картинки, определяй какой у них размер и выводи с правильными параметрами. Идея ему понравилась и он начал использовать функцию getimagesize. Тянется своей левой ручкой к файлу, а голос внутри ему говорит : НЕЛЬЗЯ. А почему нельзя, бедный сервачок и не понимал....

Решилось все добавлением
Allow from AA.AA.AA.AA

P.S.: Я приводил пример вывода с указанием пути localhost. В целях конспирации... на самом деле там IP-адрес того бедного сервера. Поэтому при добавлении в Allow from внешний IP- адрес самого сервера - все зачирикало как надо.

Еще раз, спасибо Вам за напутственный "Поэтому"!
 
Сверху