Невозможно выполнить инициализацию с заданного URL-адреса, изображения вмешательства, работы в очереди Laravel - PullRequest
0 голосов
/ 01 июля 2019

У меня есть задание в очереди, которое сохраняет изображения с заданных URL-адресов (получает их с удаленного компьютера и сохраняет локально), и все работает, но, если я помещаю этот код в задание с очередями, я получаю сообщение об ошибке.

local.ERROR: невозможно выполнить инициализацию с заданного URL-адреса (URL-адрес существует, и я могу получить доступ через браузер) ...

Я могу получить доступ к этим URL-адресам, allow_url_fopen включено, и этот код работает без задания в очереди.

try {
    $img = Image::make($photo->url);
    $img->save($path.$filenameBig); // Save the big image
} catch (NotReadableException $e) {
    var_dump($e->getMessage());
}

Это $photo->url это http, и я вижу это в ошибке (она не пустая или что-то в этом роде). Я могу получить доступ с помощью браузера к реальному изображению. Я импортирую Image так:

Использовать псевдоним в config/app:

'Image' => Intervention\Image\ImageManagerStatic::class,

В провайдере (тот же файл):

Intervention\Image\ImageServiceProvider::class

Тогда используйте его:

use Image;

StackTrace

ErrorException: file_get_contents(): https:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /home/myes8adq/app/Libraries/PropertyLibrary.php:156
Stack trace:
0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions-handleError(2, 'file_get_conten...', '/home/myes8adq/...', 156, Array)
#1 /home/myes8adq/app/Libraries/PropertyLibrary.php(156): file_get_contents('https://dummyim...')
#2 /home/myes8adq/app/Libraries/PropertyLibrary.php(30): App\Libraries\PropertyLibrary->importOneChanged(Object(stdClass))
#3 /home/myes8adq/app/Jobs/ImportPropertiesAndNomenclaturesJob.php(48): App\Libraries\PropertyLibrary->importAllChanged()
#4 [internal function]: App\Jobs\ImportPropertiesAndNomenclaturesJob->handle()
#5 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array(Array, Array)
#6 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#7 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#8 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Container/Container.php(576): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#9 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call(Array)
#10 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(App\Jobs\ImportPropertiesAndNomenclaturesJob))
#11 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(App\Jobs\ImportPropertiesAndNomenclaturesJob))
#12 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#13 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(49): Illuminate\Bus\Dispatcher->dispatchNow(Object(App\Jobs\ImportPropertiesAndNomenclaturesJob), false)
#14 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(88): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\RedisJob), Array)
#15 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(327): Illuminate\Queue\Jobs\Job->fire()
#16 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(277): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Queue\WorkerOptions))
#17 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(230): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\RedisJob), 'redis', Object(Illuminate\Queue\WorkerOptions))
#18 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(102): Illuminate\Queue\Worker->runNextJob('redis', 'default', Object(Illuminate\Queue\WorkerOptions))
#19 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(86): Illuminate\Queue\Console\WorkCommand->runWorker('redis', 'default')
#20 [internal function]: Illuminate\Queue\Console\WorkCommand->handle()
#21 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array(Array, Array)
#22 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#23 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#24 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Container/Container.php(576): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#25 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Console/Command.php(183): Illuminate\Container\Container->call(Array)
#26 /home/myes8adq/vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#27 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Console/Command.php(170): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#28 /home/myes8adq/vendor/symfony/console/Application.php(917): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#29 /home/myes8adq/vendor/symfony/console/Application.php(269): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#30 /home/myes8adq/vendor/symfony/console/Application.php(145): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#31 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Console/Application.php(90): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#32 /home/myes8adq/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(133): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#33 /home/myes8adq/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#34 {main}

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Если вы пользуетесь виртуальным хостингом и не можете allow_url_fopen в работниках своей очереди, вы можете загрузить изображение локально через cURL или GuzzleHTTP, а затем использовать Image::make() в локальном файле.

, например

$url = "http://www.example.com/img.jpg";
if (!ini_get('allow_url_fopen') && function_exists('curl_version')) {

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $content = curl_exec($curl);
    curl_close($curl);

} else if (ini_get('allow_url_fopen')) {
    $content = file_get_contents($url);
} else {
    echo 'No dice.';
}

$i= Image::make($content);
1 голос
/ 01 июля 2019

Запуск супервизора с allow_url_fopen = On

command=php -d allow_url_fopen=On ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...