Ben Revere hit a two-run triple for Philadelphia, which took two of three from the NL East-leading Braves.
Chris Johnson homered and Brian McCann got three hits for Atlanta, which has lost 10 of its last 15 road games. McCann finished 9 for 12 in the series and is batting .512 (22 for 43) over his last 11 games.
Jonathan Pettibone (5-3) allowed one run on five hits in 5 1-3 innings while tying his career high with six strikeouts against one walk. The Phillies used five relief pitchers on a hot day that began with a gametime temperature of 95 degrees.
Kris Medlen (6-8) gave up a season-high six earned runs in 5 1-3 innings.
Medlen had won three straight and five of his last six starts. He surrendered eight hits with five strikeouts and three walks.
The Phillies jumped out to a 4-0 lead through four innings. Brown's RBI triple and Delmon Young's single staked Philadelphia to a 2-0 advantage in the first.
Revere tripled home two more in the fourth. He is batting .337 since May 1.
The Braves scored in the fifth on Medlen's opposite-field RBI single. The first five runs of the game came with two outs.
Brown, picked Saturday to his first All-Star team, got that run back in the bottom of the fifth by turning on Medlen's inside pitch and just clearing the wall in right for his 23rd homer.
The Phillies were gifted a pair of runs in the sixth when Darin Ruf and Carlos Ruiz scored on Alex Wood's wild pitch and McCann's throwing error on the play.
Johnson's homer and Jason Heyward's single accounted for the Braves' two runs in the seventh.
Atlanta's B.J. Upton was ejected in the fifth by plate umpire Doug Eddings for arguing after being called out on strikes. Upton went 0 for 2, dropping his average to .175 with 96 strikeouts.