Coghlan then lofted a soft fly ball to left that fell in front of Raul Ibanez, scoring Infante and breaking a 1-1 deadlock.
Mike Dunn (3-2) was credited with the win after tossing a scoreless eighth and Leo Nunez collected his 12th save for Florida, which pulled to within two games of the Phillies atop the National League East.
Marlins starter Josh Johnson allowed only one run on six hits over seven innings.
Halladay took the hard-luck loss despite limiting Florida to one earned run on five hits and two walks in an eight-inning, complete-game performance. He struck out nine.
Ryan Howard socked a solo homer for Philadelphia's run.