Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Закачаные upload'ом картинки


Автор: WhiteSpirit 1.3.2006, 01:57
Доброе время суток, проблема следующая:
Закачиваю картинки на сервер, вот таким образом (сразу создается 2 экземпляра большая и маленькая):

Код

function GetImageParams($file, $dir, $width, $quality) {
        $fileformat=array("", "gif", "jpg", "png", "swf", "psd", "bmp", "tiff", "tiff", "jpc");
        if(isset($file)) {
                if(file_exists($file['file']['tmp_name'])) {
                        $list=getimagesize($file['file']['tmp_name']);
                        if(!strstr($list['mime'], "image")) return false;
                        $out['filename']=mktime().".".$fileformat[$list[2]];
                        $out['format']=$fileformat[$list[2]];
                        $out['width']=$list[0];
                        $out['height']=$list[1];
                        $out['stringparam_b']=$list[3];
                        $out['dir']="../".$dir."/";
                        $out['picture_name_small']="small/s_".$out['filename'];
                        $path="/home/site/main_dir/".$dir."/";
                        $tmp=$file['file']['tmp_name'];
                        if($list[2]==1)
                                $source=imagecreatefromgif($file['file']['tmp_name']);
                        elseif($list[2]==2)
                                $source=imagecreatefromjpeg($file['file']['tmp_name']);
                        $newX=$width;
                        $newY=($width/$out['width'])*$out['height'];
                        $dest_img=imagecreatetruecolor($newX, $newY);
                        move_uploaded_file($tmp, $path."/big/b_".$out['filename']);
                        move_uploaded_file($tmp, $path."/small/s_".$out['filename']);
                        ImageCopyResampled($dest_img, $source, 0, 0, 0, 0, $newX, $newY, $out['width'], $out['height']);
                        if($list[2]==1)
                                imagegif($dest_img, $path.$out['picture_name_small'], $quality);
                        elseif($list[2]==2)
                                imagejpeg($dest_img, $path.$out['picture_name_small'], $quality);
                        $out['stringparam_s']=" width=".$newX." height=".$newY." ";
                        return $out;
                }
        }
}
...
if(isset($_POST['Send'])) {
        $list=GetImageParams($_FILES, "img", $_POST['small_width'], 85);
        $_POST['picture_name']=$list['dir'].'big/b_'.$list['filename'];
        $_POST['picture_name_small']=$list['dir'].$list['picture_name_small'];
        $_POST['stringparam_b']=$list['stringparam_b'];
        $_POST['stringparam_s']=$list['stringparam_s'];
        $_POST['format']=$list['format'];
        $_POST['big_width']=(int)$list['width'];
        $_POST['big_height']=(int)$list['height'];
        $base->insert_from_form($_POST, "picture");
}
...

Картинки сохраняются и записи заносятся в базу.

При выводе отображаются только уменьшенные изображения, а оригиналы не отображаются.

Помогите плиз, в чем проблема?

ЗЫ: Проблема появилась после переноса на сервер провайдера.


Автор: CTAPbIuMABP 1.3.2006, 11:04
права записи в папку проверь

Автор: WhiteSpirit 1.3.2006, 15:58
Нет, но я думаю проблема не в этом, потому что файл разносится по двум папкам: small (уменьшенная картинка), big (оригинал). Так вот уменьшенный то вариант выводится без проблем.

После аплоада просматриваю папки на сервакае, файл имеется в наличии в обоих папках.

Автор: Dave 1.3.2006, 16:22
Цитата(WhiteSpirit @ 1.3.2006, 01:57 Найти цитируемый пост)
При выводе отображаются только уменьшенные изображения, а оригиналы не отображаются.

может пути непральные указываешь.
Если взять путь с src оригинала и вставить его в браузер - картинка отображается ?

Автор: WhiteSpirit 1.3.2006, 18:36
пробовал просто выводить картинки (через src) - не выводятся

Автор: WhiteSpirit 6.3.2006, 23:45
Ну так что делать то? Неужели ни у кого не было такой проблемки?

Автор: Dave 7.3.2006, 09:42
Цитата(WhiteSpirit @ 1.3.2006, 15:58 Найти цитируемый пост)
После аплоада просматриваю папки на сервакае, файл имеется в наличии в обоих папках.

Если это правда....

Цитата(WhiteSpirit @ 1.3.2006, 18:36 Найти цитируемый пост)
пробовал просто выводить картинки (через src) - не выводятся


...то вывод только один: ты указывваешь неправильный путь в src

Автор: WhiteSpirit 7.3.2006, 16:26
пть проверял на несколько раз - все правильно

Автор: Dave 7.3.2006, 17:04
чудес не бывает, или путь неправильный или картинки не аплоадятся.
Залей вручную картинку в ту директорию с которой у тебяч проблемы и попробуй достучаться до нее из браузера.

Одним словом : DEBUG

Автор: WhiteSpirit 7.3.2006, 17:28
уже пробовал. Делал картинке то же имя что присваивалось при аплоаде (а загруженную удалял), тогда всё нормально.

Автор: Эрмитаж 8.3.2006, 17:05
Хм...я бы на твоём месте сделал луче так:

Код

<?



function createthumb($IMAGE_SOURCE, $THUMB_X, $THUMB_Y, $OUTPUT_FILE, $KEEP_PROP)
{
  $BACKUP_FILE = $OUTPUT_FILE . "_backup.jpeg";
  copy($IMAGE_SOURCE,$BACKUP_FILE);
  $IMAGE_PROPERTIES = GetImageSize($BACKUP_FILE);
  if (!$IMAGE_PROPERTIES[2] == 2)
      {
        return(0);
      }
  else
      {
        $SRC_IMAGE = ImageCreateFromJPEG($BACKUP_FILE);
        $SRC_X = ImageSX($SRC_IMAGE);
        $SRC_Y = ImageSY($SRC_IMAGE);
        if (($THUMB_Y == "0") && ($THUMB_X == "0"))
            {
                return(0);
            }
        elseif ($THUMB_Y == "0")
            {
                $SCALEX = $THUMB_X/($SRC_X-1);
                $THUMB_Y = $SRC_Y*$SCALEX;
            }
        elseif ($THUMB_X == "0")
            {
                $SCALEY = $THUMB_Y/($SRC_Y-1);
                $THUMB_X = $SRC_X*$SCALEY;
            }
        $THUMB_X = (int)($THUMB_X);
        $THUMB_Y = (int)($THUMB_Y);
        if (function_exists('imagecreatetruecolor'))
            {
                $DEST_IMAGE=ImageCreateTrueColor($THUMB_X, $THUMB_Y);
            }
        else
            {
                $DEST_IMAGE=ImageCreate($THUMB_X, $THUMB_Y);
            }
        unlink($BACKUP_FILE);
        if (!imagecopyresized($DEST_IMAGE, $SRC_IMAGE, 0, 0, 0, 0, $THUMB_X, $THUMB_Y, $SRC_X, $SRC_Y))
            {
                imagedestroy($SRC_IMAGE);
                imagedestroy($DEST_IMAGE);
                return(0);
            }
        else
            {
                imagedestroy($SRC_IMAGE);
                if (ImageJPEG($DEST_IMAGE,$OUTPUT_FILE))
                    {
                        imagedestroy($DEST_IMAGE);
                        return(1);
                    }
                imagedestroy($DEST_IMAGE);
            }
        return(0);
    }
}


$katalog_s_kartinkoi = './news_img/'; 
$thumbkataloog = './news_img/news_thumbs/';
$xmax = '150'; 
$ymax = '110'; 

 $kartinka= $_FILES['picfile']['name'];
if($kartinka)
{
    move_uploaded_file($_FILES['picfile']['tmp_name'],$katalog_s_kartinkoi.$kartinka);

    
     $suurus = @getimagesize($katalog_s_kartinkoi.$kartinka); 
    if(($suurus[0] > $xmax) or ($suurus[1] > $ymax)) 
    {
        if($suurus[0]<$suurus[1])
        {
            CREATETHUMB($katalog_s_kartinkoi.$kartinka, '0', $ymax, $thumbkataloog.$kartinka,1);
        }
        else
        {
            CREATETHUMB($katalog_s_kartinkoi.$kartinka, $xmax, '0', $thumbkataloog.$kartinka,1);
        }
    }
    else 
    {
        rename($katalog_s_kartinkoi.$kartinka, $katalog_s_kartinkoi.$kartinka.'.tmp');

    }echo "Фаил  $kartinka успешно добавлена на сервер.";


}else {"Не получается залить картинку.";}?>


Автор: supercelt 8.3.2006, 17:14
У меня были такие проблемы, я их решил так; когда создаёшь копии, переименовывай файл, и без пробелов маленькими буквами.

Автор: Брр 8.3.2006, 17:14
2 WhiteSpirit у меня была похожая проблема. Суть оказалась в том, что картинки записываются на сервер с расширением в прописных буквах *.JPG, а не *.jpg, как я выводил. Попробуй, может дело в этом.

Автор: WhiteSpirit 9.3.2006, 10:20
это тоже проверял. Закачиваются с маленьким jpg

Автор: Dave 9.3.2006, 15:09
а если скачать загруженную картинку, которая не показывается у провайдера, и запустить ее локально то с ней все в порядке ?

Автор: Danox 9.3.2006, 15:25
Пиши полный путь т.е. http://твой-сайт.lya/big/*.jpg и jpg замени JPG если неполучится, кстати через бразуер картинки открываются??? если и так и так то провайдеру стукни пусть проблему решают они ведь на localhost работает!

Автор: WhiteSpirit 9.3.2006, 21:21
ага на нем
Добавлено @ 21:21
попробую с провайдером связаться

Автор: oksale 10.3.2006, 10:21
У меня была такая же проблема.
При копировании скриптом файл копировался, но не отображался, а при копировании руками все было в порядке. Дело оказалось в правах на файл. Решилось с помощью ф-ции chmod.

Код

if (is_uploaded_file(...)) 
{
    move_uploaded_file(...);
    chmod(имя_закачанного_файла, 0640);
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)