Jarome Iginla worked the puck to Phaneuf, who one-timed a hard slap shot from 40 feet past goaltender Alex Auld.
"The whole setup was good, we worked it down low and then up high and Iggy made a great play over. I just tried to get it through and luckily it went through," said Phaneuf, who also had two assists.
Iginla, Roman Hamrlik, and Chuck Kobasew also scored for the Flames (8-7-2), who posted their second home victory over their Northwest Division rivals in three nights. Steve Reinprecht added three assists.
"We stuck with it and those feel real good, especially against the Canucks," Iginla said. "They're a very good club and to be able to fight a seesaw battle in the third period and win it, it feels great. Everybody for these two games left everything out there."
Markus Naslund scored two goals and Todd Bertuzzi had his first goal in 10 games for the Canucks (10-4-2), who are winless in their last four road games (0-3-1).
Vancouver took a 2-1 lead to the third period before goals by Hamrlik and Iginla 37 seconds apart. Iginla gave Calgary the lead when his hard centering pass deflected off Canucks defenseman Nolan Baumgartner and past Auld.
"You can't give up those types of opportunities late in the game and expect that you're going to come out on top," Vancouver coach Marc Crawford said. "We took some penalties that we were responsible for tonight and by veteran people and those things we have to correct and correct quickly."
Vancouver tied it on Naslund's 10th of the season at 11:26. Bertuzzi outmuscled Jordan Leopold along the end boards and worked a pass out to Naslund, who beat Miikka Kiprusoff.
Kobasew opened the scoring 5:50 into the first at the end of a Calgary power play. The Canucks pulled even 3:30 into the second period when Bertuzzi carried the puck out front on his backhand and slipped a shot past Kiprusoff.
Kobasew had a chance to put Calgary ahead at 9:53 when he was awarded a penalty shot after being hauled down from behind by Canucks defenseman Mattias Ohlund, but Auld kicked out his right pad to stop Kobasew's wrist shot.
Vancouver took the lead on the power play at 18:24 of the second, when Ed Jovanovski zipped a pass in front to an uncovered Naslund, who tucked a backhand past Kiprusoff to end the goaltender's shutout streak at 122 minutes, 31 seconds.
Notes: Vancouver dressed seven defensemen, as Allen returned after missing five games with a knee injury. ... Kobasew is one goal away from matching his output of six goals in 70 games as a rookie in 2003-04. ... Calgary RW Tony Amonte has no goals in his last eight games and just one in his last 13.
|PPG - Chuck Kobasew (5) ASST: Steve Reinprecht (4), Dion Phaneuf (5)|
1 - 0 CGY
|Todd Bertuzzi (3) ASST: Lee Goren (1), Sami Salo (10)|
1 - 1 Tie
|PPG - Markus Naslund (9) ASST: Ed Jovanovski (11)|
2 - 1 VAN
|Roman Hamrlik (2) ASST: Dion Phaneuf (6)|
2 - 2 Tie
|Jarome Iginla (8) ASST: Tony Amonte (6), Steve Reinprecht (5)|
3 - 2 CGY
|PPG - Markus Naslund (10) ASST: Todd Bertuzzi (10), Brendan Morrison (8)|
3 - 3 Tie
|PPG - Dion Phaneuf (4) ASST: Jarome Iginla (6), Steve Reinprecht (6)|
4 - 3 CGY
|Roman Hamrlik Delaying Game-Puck over glass|
|Sami Salo Interference against Craig MacDonald|
|Robyn Regehr Hooking against Lee Goren|
|Daniel Sedin Hooking against Andrew Ference|
|Todd Bertuzzi Tripping against Jarome Iginla|
|Roman Hamrlik Interference against Jarkko Ruutu|
|Ed Jovanovski Interference against Jarome Iginla|
|Rhett Warrener Tripping against Markus Naslund|
|Nolan Baumgartner Hooking against Marcus Nilson|
|Andrew Ference Interference against Markus Naslund|
|Ryan Kesler Tripping against Marcus Nilson|
|Dion Phaneuf Interference against Anson Carter|
|Bryan Allen Interference against Jarome Iginla|
|Trevor Linden Cross checking against Jarome Iginla|
|Mattias Ohlund Cross checking against Darren McCarty|