Не генерируются превью через консоль
Всем привет!
Возникла проблема, с которой бьюсь уже второй день, прошу помощи.
Итак. Есть VDS сервер от FastVPS, на котором лежит сайт.
Веб-студия, которая делала сайт, поленилась сделать все хорошо, и поэтому на сайт, прям на хостинг, загружаются тонны фотографий. Сайт связан с модельным бизнесом, поэтому фотографии действительно важны и их действительно много. Собственно, на данный момент их уже 2гб, а ведь еще нужно делать региональные сайты, плюс есть еще один сайт, по похожей тематике, и так далее...
В общем, решил я, значит, перенести эти фото в Selectel.
Василий, в поддержке компонента, любезно описал мне алгоритм работы как все это дело нужно провернуть.
Я почистил базу, настроил облако в Selectel, фотографии к ресурсам загружаются замечательно.
Но, так как ресурсов более 500, а фотографий, как я уже сказал, около 2гб, то надо перезагружать фото из консоли. Написал скрипт. Из браузера он работает очень даже. Но, понятное дело, падает, ибо тайм-аут.
Запустил из консоли. Ошибка. Вот лог:
Окей. Создал тестовый сайт на modhost.pro, сделал все тоже самое. Естественно, на modhost все работает отлично, и оригиналы, и превью спокойно генерируются.
Я так полагаю, какие-то проблемы с конфигом сервера или еще с чем. Но я честное слово, не знаю, куда копать. Перерыл весь гугл на предмет похожей ошибки, и все советы, которые давали и на этом ресурсе, и на других, уже перепробовал. Нифига.
Сам скрипт, точнее, его версия для одного ресурса:
Возникла проблема, с которой бьюсь уже второй день, прошу помощи.
Итак. Есть VDS сервер от FastVPS, на котором лежит сайт.
Веб-студия, которая делала сайт, поленилась сделать все хорошо, и поэтому на сайт, прям на хостинг, загружаются тонны фотографий. Сайт связан с модельным бизнесом, поэтому фотографии действительно важны и их действительно много. Собственно, на данный момент их уже 2гб, а ведь еще нужно делать региональные сайты, плюс есть еще один сайт, по похожей тематике, и так далее...
В общем, решил я, значит, перенести эти фото в Selectel.
Василий, в поддержке компонента, любезно описал мне алгоритм работы как все это дело нужно провернуть.
Я почистил базу, настроил облако в Selectel, фотографии к ресурсам загружаются замечательно.
Но, так как ресурсов более 500, а фотографий, как я уже сказал, около 2гб, то надо перезагружать фото из консоли. Написал скрипт. Из браузера он работает очень даже. Но, понятное дело, падает, ибо тайм-аут.
Запустил из консоли. Ошибка. Вот лог:
[2017-03-17 17:12:50] (ERROR @ test.php) [ms2Gallery] Could not generate thumbnail for "http://213315.selcdn.ru/creon/1/0134.jpg". Array
(
[0] => phpThumb() v1.7.13-201406261000 in file "phpthumb.class.php" on line 220
[1] => setCacheDirectory() starting with config_cache_directory = "/var/www/www-root/data/www/test.site.ru/core/cache/phpthumb/" in file "phpthumb.class.php" on line 961
[2] => setting config_cache_directory to realpath(/var/www/www-root/data/www/test.site.ru/core/cache/phpthumb) = "/var/www/www-root/data/www/test.site.ru/core/cache/phpthumb" in file "phpthumb.class.php" on line 989
[3] => setSourceFilename(/var/www/www-root/data/www/test.site.ru/ms2g_ekYFri) set $this->sourceFilename to "/var/www/www-root/data/www/test.site.ru/ms2g_ekYFri" in file "phpthumb.class.php" on line 271
[4] => $AvailableImageOutputFormats = array(text;ico;bmp;wbmp;gif;png;jpeg) in file "phpthumb.class.php" on line 925
[5] => $this->thumbnailFormat set to $this->config_output_format "jpeg" in file "phpthumb.class.php" on line 936
[6] => $this->thumbnailFormat set to $this->f "jpeg" in file "phpthumb.class.php" on line 943
[7] => $this->thumbnailQuality set to "90" in file "phpthumb.class.php" on line 953
[8] => $this->sourceFilename set to "/var/www/www-root/data/www/test.site.ru/ms2g_ekYFri" in file "phpthumb.class.php" on line 849
[9] => SetCacheFilename() _src set from md5($this->sourceFilename) "/var/www/www-root/data/www/test.site.ru/ms2g_ekYFri" = "56d109e335c00b3c4bad4614d50f10d9" in file "phpthumb.class.php" on line 3443
[10] => SetCacheFilename() _par set from md5(_bg000000_farC_zc1_h90_w120_dpi150_q90) in file "phpthumb.class.php" on line 3476
[11] => starting ExtractEXIFgetImageSize() in file "phpthumb.class.php" on line 3236
[12] => GetImageSize(/var/www/www-root/data/www/test.site.ru/ms2g_ekYFri) says image is 960x640 in file "phpthumb.class.php" on line 3246
[13] => $this->useRawIMoutput=false because "bg" is set in file "phpthumb.class.php" on line 1502
[14] => $this->useRawIMoutput=false after checking $UnAllowedParameters in file "phpthumb.class.php" on line 1508
[15] => ImageMagickThumbnailToGD() aborting because ImageMagickCommandlineBase() failed in file "phpthumb.class.php" on line 2203
[16] => ImageMagickThumbnailToGD() failed in file "phpthumb.class.php" on line 3286
[17] => SetOrientationDependantWidthHeight() starting with "960"x"640" in file "phpthumb.class.php" on line 3215
[18] => SetOrientationDependantWidthHeight() setting w="120", h="90" in file "phpthumb.class.php" on line 3231
[19] => EXIF thumbnail extraction: (size=0; type=""; 0x0) in file "phpthumb.class.php" on line 3343
[20] => starting SourceImageToGD() in file "phpthumb.class.php" on line 3603
[21] => Not using EXIF thumbnail data because $this->exif_thumbnail_data is empty in file "phpthumb.class.php" on line 3674
[22] => $this->gdimg_source is still empty in file "phpthumb.class.php" on line 3726
[23] => ImageMagickThumbnailToGD() failed in file "phpthumb.class.php" on line 3728
[24] => phpThumb() v1.7.13-201406261000
http://phpthumb.sourceforge.net
Error messages disabled.
edit phpThumb.config.php and (temporarily) set
$PHPTHUMB_CONFIG['disable_debug'] = false;
to view the details of this error in file "phpthumb.class.php" on line 4050
[25] => phpThumb() v1.7.13-201406261000
http://phpthumb.sourceforge.net
Error messages disabled.
edit phpThumb.config.php and (temporarily) set
$PHPTHUMB_CONFIG['disable_debug'] = false;
to view the details of this error in file "phpthumb.class.php" on line 4050
[26] => SourceImageToGD() failed in file "phpthumb.class.php" on line 351
)
Ну и такое повторяется для каждого изображения. Оригиналы в облако залетают, но превью не генерируются. Написал в поддержку FastVPS, они сказали, что помогать не будут, скрипт у меня, вероятно, плохой, из консоли функции, которые использую в скрипте, не поддерживаются.Окей. Создал тестовый сайт на modhost.pro, сделал все тоже самое. Естественно, на modhost все работает отлично, и оригиналы, и превью спокойно генерируются.
Я так полагаю, какие-то проблемы с конфигом сервера или еще с чем. Но я честное слово, не знаю, куда копать. Перерыл весь гугл на предмет похожей ошибки, и все советы, которые давали и на этом ресурсе, и на других, уже перепробовал. Нифига.
Сам скрипт, точнее, его версия для одного ресурса:
<?php
define('MODX_API_MODE', true);
require 'index.php';
$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget(array
(
'target' => 'FILE',
'options' => array
(
'filename' => 'gallery.' . strftime('%Y-%m-%dT%H:%M:%S')
)
)
);
$catalog = scandir('assets/images/resources/35');
foreach ($catalog as $file) {
$res = $modx->runProcessor('gallery/upload', array(
'file' => 'assets/images/resources/35/'.$file,
'id' => 1
), array(
'processors_path' => MODX_CORE_PATH . 'components/ms2gallery/processors/mgr/'
)
);
if ($res->isError()) {
print_r($res->getAllErrors());
} else {
print_r($res->getObject());
}
}
P.S. Я не зря расписал тут большой текст, ибо я реально пытаюсь что-то сделать и решить задачу самостоятельно, но вот тут запнулся. Надеюсь на вашу помощь.
Поблагодарить автора
Отправить деньги
Комментарии: 4
Если в браузере скрипт отрабатывает нормально, а проблема только в том, чтобы запустить скрипт из консоли, можно поставить дополнение Console и написать для него скрипт для пошагового импорта. Типа такого:
<?php
if (!isset($_SESSION['Console']['galgen'])) {
$_SESSION['Console']['galgen'] = array(
'resource' => 0,
'gallery' => 0
);
}
$offsets = $_SESSION['Console']['galgen'];
$q = $modx->newQuery('modResource', array('parent' => 0));
$total = $modx->getCount('modResource', $q);
if ($total <= $offsets['resource']) {
print '<p>Completed</p>';
$_SESSION['Console']['completed'] = true;
unset($_SESSION['Console']['galgen']);
return;
}
$q->limit(1, $offsets['resource']);
$resources = $modx->getCollection('modResource', $q);
foreach ($resources as $resource) {
print "<p>Processing resource <b>".$resource->get('pagetitle')."</b></p>";
$catalog = scandir($modx->getOption('base_path') . 'assets/images/resources/' .
$resource->get('id'));
if (count($catalog) <= $offsets['gallery']) {
$offsets['resource']++;
$offsets['gallery'] = 0;
}
if ($catalog[$offsets['gallery']] != '.' && $catalog[$offsets['gallery']] != '..'
&& !is_dir($modx->getOption('base_path') . 'assets/images/resources/' .
$resource->get('id') . '/' . $catalog[$offsets['gallery']])) {
$res = $modx->runProcessor('gallery/upload', array(
'file' => $modx->getOption('base_path') . 'assets/images/resources/' .
$resource->get('id') . '/' . $catalog[$offsets['gallery']],
'id' => $resource->get('id')
), array(
'processors_path' => MODX_CORE_PATH . 'components/ms2gallery/processors/mgr/'
)
);
if ($res->isError()) {
$error = $res->getAllErrors();
$error['file'] = 'assets/images/resources/' . $resource->get('id') .
'/' . $catalog[$offsets['gallery']];
print_r($error);
} else {
print_r($res->getObject());
}
} else {
print '<p>Skip folder <b>' . $catalog[$offsets['gallery']] . '</b></p>';
}
$offsets['gallery']++;
$sucsess = round($offsets['gallery'] / count($catalog), 2) * 100;
for ($i=0; $i<=100; $i++) {
if ($i <= $sucsess) {
print '=';
} else {
print '_';
}
}
print '<p>' . $sucsess.'% (remains: '.(count($catalog) - $offsets['gallery']).')</p>';
}
$_SESSION['Console']['completed'] = false;
$_SESSION['Console']['galgen'] = $offsets;
return;
Только галочку «Показывать ошибки» убрать надо — там какие-то ошибки лексиконов показываются, но на работоспособность они не влияют.
Большое спасибо за идею и код!
Завтра обязательно попробую и отпишусь.
Завтра обязательно попробую и отпишусь.
В общем, вариант с консолью не прокатил, ибо скрипт виснет на 30-ти секундах выполнения, а исправить я не смог, хотя Николай Ланец здесь рассказывал об этой проблеме. Но решить я ее сам не смог. Тупо не понял, где конфиг менять.
Так вот. Я таки установил модуль еще на пару хостингов с тестовыми данными (никакого пиратства) и прогнал еще разок. Убедился, что такая проблема возникает только у хостера FastVPS и достал их поддержку основательно. После 4 часов работы поддержки, мне предложили вариант запускать скрипт из версии PHP 5.4, ибо так работает, или попробовать обновить phpThumb.
Далее самое интересное. Я честно думал о таком варианте, что класс phpThumb где-то косячит, но полагал, что раз уж MODX 2.5.5 установлен, то и phpThumb должен быть свежим. Но, я ошибался. Скачал с GitHub новую версию библиотеки, залил на сайт и вуа-ля. Все работает! Даже не пришлось PHP 5.4 в консоли переключать
Так вот. Я таки установил модуль еще на пару хостингов с тестовыми данными (никакого пиратства) и прогнал еще разок. Убедился, что такая проблема возникает только у хостера FastVPS и достал их поддержку основательно. После 4 часов работы поддержки, мне предложили вариант запускать скрипт из версии PHP 5.4, ибо так работает, или попробовать обновить phpThumb.
Далее самое интересное. Я честно думал о таком варианте, что класс phpThumb где-то косячит, но полагал, что раз уж MODX 2.5.5 установлен, то и phpThumb должен быть свежим. Но, я ошибался. Скачал с GitHub новую версию библиотеки, залил на сайт и вуа-ля. Все работает! Даже не пришлось PHP 5.4 в консоли переключать
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.