Не генерируются превью через консоль

Всем привет!
Возникла проблема, с которой бьюсь уже второй день, прошу помощи.
Итак. Есть 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. Я не зря расписал тут большой текст, ибо я реально пытаюсь что-то сделать и решить задачу самостоятельно, но вот тут запнулся. Надеюсь на вашу помощь.
Дмитрий
17 марта 2017, 14:32
modx.pro
1 808
0
Поблагодарить автора Отправить деньги

Комментарии: 4

Илья Уткин
17 марта 2017, 21:46
3
+2
Если в браузере скрипт отрабатывает нормально, а проблема только в том, чтобы запустить скрипт из консоли, можно поставить дополнение 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;
    Илья Уткин
    17 марта 2017, 22:03
    0
    Только галочку «Показывать ошибки» убрать надо — там какие-то ошибки лексиконов показываются, но на работоспособность они не влияют.
      Дмитрий
      17 марта 2017, 22:11
      0
      Большое спасибо за идею и код!
      Завтра обязательно попробую и отпишусь.
        Дмитрий
        21 марта 2017, 01:06
        0
        В общем, вариант с консолью не прокатил, ибо скрипт виснет на 30-ти секундах выполнения, а исправить я не смог, хотя Николай Ланец здесь рассказывал об этой проблеме. Но решить я ее сам не смог. Тупо не понял, где конфиг менять.
        Так вот. Я таки установил модуль еще на пару хостингов с тестовыми данными (никакого пиратства) и прогнал еще разок. Убедился, что такая проблема возникает только у хостера FastVPS и достал их поддержку основательно. После 4 часов работы поддержки, мне предложили вариант запускать скрипт из версии PHP 5.4, ибо так работает, или попробовать обновить phpThumb.
        Далее самое интересное. Я честно думал о таком варианте, что класс phpThumb где-то косячит, но полагал, что раз уж MODX 2.5.5 установлен, то и phpThumb должен быть свежим. Но, я ошибался. Скачал с GitHub новую версию библиотеки, залил на сайт и вуа-ля. Все работает! Даже не пришлось PHP 5.4 в консоли переключать
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4