Ресайз изображений на php через Крон, для TorrentPier

Discussion in 'PHP' started by Vanereas, 27 Jul 2010.

  1. Vanereas

    Vanereas New Member

    Joined:
    25 Jul 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Доброго времени суток.
    На трекере есть мод копирования постеров новых релизов (в уменьшенном варианте) в отдельную папку на сервере,
    И загрузки созданных превьюшек в блоке новых релизов на главной странице.
    Работает всё это при помощи крон задачи (last_releases.php)
    Но есть одна проблема, которую давно не могу решить, почему-то когда крон сам обновляет данные блока новых релизов - то превьюшки в папке на сервере не создаються, а как только открываешь в браузере файл крон задачи - превьюшки создаются и всё работает нормально. В чём может быть проблема?...
    p.s. За решение проблемы готов заплатить, связь по icq 468981505 или на трекере )
     
  2. Vanereas

    Vanereas New Member

    Joined:
    25 Jul 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    не удаляйте тему, мне помощь нужна!
     
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Vanereas как запускается скрипт кроном? Если через /usr/bin/php, то не нарушаются ли зависимости инклудов? Добавьте в начало файла error_reporting(E_ALL); и посмотрите вывод ошибок.

    Если запускается через wget - то не требуются ли для запуска файла кукисы (оно же авторизация на трекере), чтобы файл запустился. Опять таки включите вывод ошибок и сохраните загруженную страницу, для изучения
     
    _________________________
  4. Vanereas

    Vanereas New Member

    Joined:
    25 Jul 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Gifts Задача запускаеться через /usr/bin/php
    прописана она так:
    Code:
    */5 * * * * root /usr/bin/php5 /home/www/cron_runner/last_releases.php &>/tmp/cron.log
    &>/tmp/cron.log - вывод ошибок в этот файл, но он пустой.

    В логах трекера начали выползать ошибки:
    Code:
    [27-Jul-2010 23:40:20] PHP Warning:  getimagesize(http://s44.radikal.ru/i103/1007/87/fb84d45065c2.png): failed to open stream: HTTP request failed! HTTP/1.1 503 Service Unavailable
     in /home/www/cron_runner/last_releases.php on line 13
    [27-Jul-2010 23:40:20] PHP Notice:  Undefined index:   in /home/www/cron_runner/last_releases.php on line 17
    [27-Jul-2010 23:40:20] PHP Fatal error:  Call to undefined function imagecreatefrom() in /home/www/cron_runner/last_releases.php on line 18
    Вот сам файл last_releases.php
    Code:
    <?php
    
    define('IN_PHPBB', true);
    define('IN_CRON', true);
    define('BB_ROOT', '/home/www/');
    require(BB_ROOT . 'common.php');
    
    function create_thumb ($poster_file, $type, $topic_id)
    {
    	global $bb_cfg;
    
    	// Узнаём размеры и тип аватары
    [line 13]	list($poster_width, $poster_height, $type_file) = getimagesize($poster_file);
    
        // Открываем
    	$types = array('','gif','jpeg','png');
    [line 17]	$creat = 'imagecreatefrom'.$types[$type_file];
    [line 18]	$poster = $creat($poster_file);
    
        $max_width = 100;
    
    	$thumb_width = $max_width;
    	$thumb_height = ($poster_height*$max_width)/$poster_width;
    
    
        // Создаём уменьшеную аватару
        if(($poster_width > $max_width))
        {
        	$thumb = imagecreatetruecolor($thumb_width, $thumb_height);
    
    	    imagealphablending($thumb, false);
    		imagesavealpha($thumb, true);
    
    		imagecopyresampled($thumb, $poster, 0, 0, 0, 0, $thumb_width, $thumb_height, $poster_width, $poster_height);
        }
        else
        {
        	 $thumb = $poster;
        }
        $thumb_file = array();
        $thumb_file = '../'.$bb_cfg['dir_thumb_last_releases'].'thumb_'.$topic_id.$type;
        switch($type)
        {
        	case ".jpg": @$thumb = imageJPEG($thumb, $thumb_file, 100);
    			break;
    		case ".jpeg": @$thumb = imageJPEG($thumb, $thumb_file, 100);
    			break;
    		case ".png": @$thumb = imagePNG($thumb, $thumb_file);
    			break;
    		case ".gif": @$thumb = imageGIF($thumb, $thumb_file);
    			break;
        }
        imagedestroy($poster);
    }
    
    if($bb_cfg['last_releases_thumbs'])
    {
    	global $db, $bb_cfg;
    
    	$db->sql_query("TRUNCATE " . LAST_RELEASES_TABLE); // Clear table
    
        $porno_forums = $bb_cfg['porno_forums'] ? $bb_cfg['porno_forums'] : '0';
    	$trash_forums = $bb_cfg['trash_forum_id'] ? $bb_cfg['trash_forum_id'] : '0';
    
    	$sql  = "SELECT tr.topic_id, tr.forum_id, tr.reg_time, t.topic_title, f.forum_name, u.username, u.user_id,	pt.*
    		FROM ". BT_TORRENTS_TABLE ." tr
    			LEFT JOIN ". TOPICS_TABLE ." t ON(tr.topic_id = t.topic_id)
    			LEFT JOIN ". POSTS_TEXT_TABLE ." pt ON(pt.post_id = tr.post_id)
    			LEFT JOIN ". FORUMS_TABLE ." f ON(tr.forum_id = f.forum_id)
    			LEFT JOIN ". USERS_TABLE ." u  ON(tr.poster_id = u.user_id)
    		WHERE f.forum_id NOT IN ($porno_forums, $trash_forums)
    		ORDER BY tr.reg_time
    		DESC LIMIT 0,".$bb_cfg['last_releases_thumbs'];
    
    	if ($result = $db->sql_query($sql))
    	{
    	    $i = 0;
    	    while($row = $db->sql_fetchrow($result))
    	    {
    			$i++;
    			$topic_id    = $row['topic_id'];
    			$topic_title = stripslashes($row['topic_title']);
    			$forum_name  = $row['forum_name'];
    			$forum_id    = $row['forum_id'];
    			$username    = $row['username'];
    			$user_id     = $row['user_id'];
    			$reg_time    = $row['reg_time'];
    
                preg_match_all('/\[img.*?\](.*?)\[\/img:.*?\]/i', $row['post_text'], $poster, PREG_SET_ORDER);
    
                $dir = $bb_cfg['dir_thumb_last_releases'];
    
    			$poster_file = strtolower(@$poster[0][1]);
    			if (@fopen($poster_file, "r"))
    			{
    				$ext = substr(strrchr($poster_file, '.'), 1);
    				$type = '.'. $ext;
    				create_thumb($poster_file, $type , $topic_id);
    				$image = $bb_cfg['siteurl'].'/'.$dir.'thumb_'.$topic_id.$type;
    				$image_full = $poster_file;
    			}
    			else
    			{
    				$image_full = $image = $bb_cfg['siteurl'].'/images/no_poster.jpg';
    			}
    
    			// SQL query
    			$sql  = "INSERT INTO " . LAST_RELEASES_TABLE . " (topic_id, topic_title, image, image_full, forum_name, forum_id, username, user_id, reg_time) ";
    			$sql .= "VALUES ('$topic_id', '$topic_title', '$image', '$image_full', '$forum_name', '$forum_id', '$username', '$user_id', '$reg_time')";
    			$db->sql_query($sql);
    	    }
    	}
    }
    ?>
    Что в нём может быть не так?...
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Vanereas После строки $thumb_file = '../'.$bb_cfg['dir_thumb_last_releases'].'thumb_'.$topic_id.$type;

    пропишите:
    PHP:
    echo realpath($thumb_file)."<br />\r\n";
    if (!
    is_writeable($thumb_file)) echo 'Is not writeable!';
    И запустите кроном, посмотрите правильный ли путь будет записан в лог.

    Между 17 и 18 строками пропишите if (!function_exists($creat)) return; Это избавит от фатальной ошибки, но заплатка плохая, лучше продумать правильную обработку исключения
     
    _________________________