2015-10-21 1 views
0

Я использую пакет Embed для захвата метаданных внешних ссылок. Затем я использую пакет Intervention Image, чтобы управлять изображением по умолчанию ссылки и сохранять его на диске.Вмешательство Изображение: Формат кодирования (png? V = 73d79a89bded & a) не поддерживается

Все работает хорошо, пока я не попытаюсь отправить ссылку на вопрос StackOverflow. Тогда я получаю эту ошибку :

NotSupportedException в AbstractEncoder.php строке 149: (? V = PNG 73d79a89bded & а)

формат кодирования не поддерживается.

в AbstractEncoder.php линии 149

в AbstractEncoder-> процесса (объекта (изображения), 'PNG? V = 73d79a89bded & а', NULL)> в строке 77 AbstractDriver.php

на AbstractDriver -> закодировать (объект (изображение)? v = PNG 73d79a89bded & а ', NULL) в> image.php линии 119

в Image-> закодировать (? v = PNG 73d79a89bded & а', нуль) в строке Image.php 139

в Image-> Save ('C: \ XAMPP \ HTDOCS \ r2 \ PUBLIC/изображений/rwSuGpEB.png V = 73d79a89bded & а') в PostsController.php линии 70

Как справиться с этим в Laravel и пакет вмешательства?

Как вы удаляете ?v=73d79a89bded&a от basename()?

Это create() метод PostsController

public function store(PostRequest $request) 
{ 
    if (Input::has('link')) { 
     $input['link'] = Input::get('link'); 
     $info = Embed::create($input['link']); 

     if ($info->image == null) { 
      $embed_data = ['text' => $info->description]; 
     } else if ($info->description == null) { 
      $embed_data = ['text' => '']; 
     } else { 
      $extension = pathinfo($info->image, PATHINFO_EXTENSION); 

      $newName = public_path() . '/images/' . str_random(8) . ".{$extension}"; 

      if (File::exists($newName)) { 
       $imageToken = substr(sha1(mt_rand()), 0, 5); 
       $newName = public_path() . '/images/' . str_random(8) . '-' . $imageToken . ".{$extension}"; 
      } 
      // This is line 70 
      $image = Image::make($info->image)->fit(70, 70)->save($newName); 
      $embed_data = ['text' => $info->description, 'image' => basename($newName)]; 
     } 

     Auth::user()->posts()->create(array_merge($request->all(), $embed_data)); 

     return redirect('/subreddit'); 
    } 
    Auth::user()->posts()->create($request->all()); 

    return redirect('/subreddit'); 
} 

ответ

3

Существует строка запроса ?v=73d79a89bded&a в конце, если ваше имя изображения. Эта строка запроса неправильно интерпретируется как часть расширения файла изображения.

Удалите эту строку запроса перед дальнейшей обработкой.

UPDATE

Предполагая, что $ расширение имеет нежелательную строку запроса

$orig = pathinfo($info->image, PATHINFO_EXTENSION); 
$extension = substr($orig, 0, strpos($orig, '?')); 
+0

Я не хочу быть грубым, но я уже знал это. Вопрос в том, как я могу его удалить? Я могу использовать 'basename()', чтобы получить имя файла + расширение. – Halnex

+0

Извините, это было непонятно из исходной версии вашего вопроса. В этом случае вы могли бы значительно сократить его. См. Мой обновленный ответ. –

+0

Да, я прошу прощения за это. После этого я обновил свой вопрос.И спасибо, что это решило. – Halnex

1

Похоже, ты соглашаешься с URL, так что вы должны использовать parse_url первый:

$parts = parse_url($input['link']); 
$extension = pathinfo($parts['path'], PATHINFO_EXTENSION); 

Я также заметлю, что вы, вероятно, должны использовать DIRECTORY_SEPARATOR для путей.

Смежные вопросы