Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> .htaccess resizeImage 
V
    Опции темы
Sanchezzz
Дата 11.5.2012, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Добрый день существует проблема ресайз картинки через запуск скрипта .htaccess с последующим сохранением файла на диск и одновременным выводом.

Скрипт запускается только тогда когда нет картинки далее скрипт ищит файл исходного изображения на диски если есть файл то смотрит параметр ресайза из адресной строки запроса если параметр удовлетворяет конфиг ресайзов выполняет ресайз 

При одновременном ресайзе и сохранении файла на диск с таким же название как и запрашиваемый файл
.htaccess пытается отдать пустой файл второй запуск по пути картинки файл отдается уже без участия PHP и htaccess нормально.

Такое чувство что PHP не успевает сохранить файл а htaccess слишком быстро берет файл но пустой еще не сохраненной картинки.

Код htaccess лежит в папке где лежат картинки дабы не мешать htacess который лежит в корне сайта в папке с картинками папок может быть сколько угодно вложенности.
Код

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !/auto/resize.php$
  RewriteRule ^(.*)$ /auto/resize.php [L]
</IfModule>


Код файла resize.php
Код

<?
ini_set('memory_limit', '350M');
/*
* TODO Ресайз картинок с сохранением 
*/

// Доступные размеры ресайза для парметра адресса
$_img_fan_width_array = array(
60,
80,
138,
168,
180,
322,
384,
600
);


/* ресайз с параметрами для ширины и высоты */
$_img_fan_width_array2 = array(
60 =>44,
80 =>60,
138=>98,
168=>100,
180=>124,
322=>214,
384=>295,
600=>480
);


$url = $_SERVER['REQUEST_URI'];
$path = pathinfo($url );
/* регуляркой найдем параметр ширины в названии файла */
$reg = "#^([0-9]){2,3}_#ixs";
preg_match($reg ,$path['filename'] , $math );
/* если есть совпадения  идем дальше */
if(count($math)>0){
$widh = str_replace('_','', $math[0]);
    if(in_array($widh , $_img_fan_width_array)){
    // путь оригинала файла.
    $path1 = $_SERVER['DOCUMENT_ROOT'] . $path['dirname'] . "/" . str_replace( $widh . "_" , '', $path['filename'] ) . ".". $path['extension'];
    //print $path1;
    /* путь сохраения файла*/
    $pathsave = $_SERVER['DOCUMENT_ROOT'] . $path['dirname'] . "/" . $widh."_" . ltrim( $path['filename']  , $widh."_") . ".". $path['extension'];
    
    

    if(!img_resize(  
        $path1 , 
        ''
        //$pathsave
        // маленький баг пока идет сохранение идет и вывод в результате картинка отдается пустой.
        ,
        $widh , // ширина
        $_img_fan_width_array2[$widh], //высото
        0xFFFFFF , // бграунт заливки 
        95 ,           //  качество картинки если используется джипег
        false          // использовать заливку бграунд если фото меньше.
        )){ print "no foto";}
    }
    /*    600_6ee8afb6e6128d60149179a17a75b0d1.jpg */
}
    

       /** 
        *    TODO Ресайз изображения
    *    $src - Исходный файл
    *    $dest  - куда сохранять 
    *    $width - Новая Ширина картинки
    *    $height - Новая Высота картинки 
    *    $rgb - Фон заливки
    *    $quality  качество картинки если используется джипег
    *    $bgProperty  false - использовать фон заливки  и передерживаться размера заданной ширины и высоты
    */
    function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100 , $bgProperty = false){
        if (!file_exists($src)) return false;
            $size = getimagesize($src);
            
        if ($size === false) return false;
            // Определяем исходный формат по MIME-информации, предоставленной
            // функцией getimagesize, и выбираем соответствующую формату
            // imagecreatefrom-функцию.
            $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
            $icfunc = "imagecreatefrom" . $format;
        if (!function_exists($icfunc)) return false;
        
            if(($width < $size[0]) or ($height < $size[1])){
                $x_ratio = $width / $size[0];
                $y_ratio = $height / $size[1];
                $ratio       = min($x_ratio, $y_ratio);                
                $use_x_ratio = ($x_ratio == $ratio);
                if($use_x_ratio){    
                    $new_width = $width;   
                    }else{
                        $width =  $new_width = floor($size[0] * $ratio);
                    }
                
                if(!$use_x_ratio){
                    $new_height = $height;
                    }else{
                        $new_height = floor($size[1] * $ratio); $height = $new_height;
                    }
            }else{
                $new_width = $size[0];
                $new_height = $size[1];
                $width = $size[0];
                $height = $size[1];
            }

            $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
            $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
            
            $isrc = $icfunc($src);
        if($bgProperty==false){
            $idest = imagecreatetruecolor($width, $height);
            imagefill($idest, 0, 0, $rgb);
            imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, 
            $new_width, $new_height, $size[0], $size[1]);
        }else{
            $idest = imagecreatetruecolor($new_width, $new_height);
            imagefill($idest, 0, 0, $rgb);
            imagecopyresampled($idest, $isrc, 0, 0, 0, 0, 
            $new_width, $new_height, $size[0], $size[1]);
        }
            
            $icfunc2  = "image" .$format;
            if($format=='jpeg'){
                header("Content-Type: image/jpeg" );
                              //  imagejpeg($idest, '', $quality);    
                imagejpeg($idest, $dest, $quality);    
            }else{
                header("Content-Type: image/" . $format );
                                //$icfunc2( $idest, '');
                $icfunc2( $idest, $dest);
            }
            
            imagedestroy($isrc);
            imagedestroy($idest);
            return true;    
    }


Кто знает как сохранить и отдать файл 





--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
ksnk
Дата 11.5.2012, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



 $icfunc2( $idest, $dest);

сохраняет файл, но не выдает его наружу.
Вероятно, вот это будет более правильно
Код

$icfunc2( $idest, $dest);
readfile($dest);

 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sanchezzz
Дата 11.5.2012, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



ksnk я побывал 1 раза $icfunc2( $idest, ''); а затем $icfunc2( $idest, $dest); 
Код

readfile($dest);
 
действительно помог, большое спасибо


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.