Доброго времени суток. На трекере есть мод копирования постеров новых релизов (в уменьшенном варианте) в отдельную папку на сервере, И загрузки созданных превьюшек в блоке новых релизов на главной странице. Работает всё это при помощи крон задачи (last_releases.php) Но есть одна проблема, которую давно не могу решить, почему-то когда крон сам обновляет данные блока новых релизов - то превьюшки в папке на сервере не создаються, а как только открываешь в браузере файл крон задачи - превьюшки создаются и всё работает нормально. В чём может быть проблема?... p.s. За решение проблемы готов заплатить, связь по icq 468981505 или на трекере )
Vanereas как запускается скрипт кроном? Если через /usr/bin/php, то не нарушаются ли зависимости инклудов? Добавьте в начало файла error_reporting(E_ALL); и посмотрите вывод ошибок. Если запускается через wget - то не требуются ли для запуска файла кукисы (оно же авторизация на трекере), чтобы файл запустился. Опять таки включите вывод ошибок и сохраните загруженную страницу, для изучения
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); } } } ?> Что в нём может быть не так?...
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; Это избавит от фатальной ошибки, но заплатка плохая, лучше продумать правильную обработку исключения