2015-10-21 107 views
0

我使用Laravel 5Embed包來獲取外部鏈接的元數據。然後我使用Intervention Image包來操作鏈接的默認圖像並將其保存在磁盤上。干預圖像:不支持編碼格式(png?v = 73d79a89bded&a)

一切正常,直到我嘗試提交鏈接到StackOverflow的問題。然後,我得到這個錯誤

NotSupportedException異常在AbstractEncoder.php線149:(?PNG V = 73d79a89bded &一)

編碼格式不支持。

在AbstractEncoder.php線

在AbstractEncoder->處理(對象(圖像), 'PNG?V = 73d79a89bded &一個',NULL)>在AbstractDriver.php線77

在AbstractDriver - >編碼(對象(圖像), '?PNG v = 73d79a89bded &一個',NULL)在> Image.php線119

在圖像 - >編碼( '?PNG v = 73d79a89bded &一個',NULL) in Image.php line 139

在圖像 - >保存( 'C:\ XAMPP \ htdocs中\ R2 \公共/圖片/ rwSuGpEB.png V = 73d79a89bded &一')在PostsController.php線70

如何處理這個在Laravel和干預包?

如何從basename()中刪除?v=73d79a89bded&a

這是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

create()方法有一個查詢字符串?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作爲路徑。