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 новичок. Прошу сильно каблуками не пинать. Подскажите, куда рыть?
 

Фанат

oncle terrible
Команда форума
Ну, для новичка ты очень неплохо раскопал, так что на новичка не тянешь. Настоящие новички тут в соседних темах пасутся, двух строк без ошибок написать не могут.

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

McPetrovich

Новичок
И все-таки надо больше отдыхать. Спасибо Вам большое! Суть проблемы оказалась на столько элементарной... Фанат, что бы я без тебя делал. :) Больной мозг не докумекал включить вывод всех ошибок на страницу...
Итог:
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- адрес самого сервера - все зачирикало как надо.

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