RELATED: Send your Phan Photos to 6abc!
The defending World Series champions reduced their magic number for winning the division to one when Atlanta lost shortly afterward to Florida.
The Phillies had lost five of seven coming in, prompting manager Charlie Manuel to hold a closed-door meeting in the clubhouse 3½ hours before the first pitch.
"I did all the talking," Manuel said.
Whatever he said worked.
Happ (12-4) allowed four runs - three earned - and nine hits in 5 2-3 innings, striking out six. He's the first rookie to win 12 games for Philadelphia since Jim Owens in 1959.
Jayson Werth hit a two-run homer and Philadelphia's injury-plagued bullpen tossed 3 1-3 scoreless innings. Jamie Moyer got four outs and Ryan Madson pitched the last two innings for his 10th save in 16 chances. He allowed two hits in the ninth, but he struck out Carlos Lee on a 96 mph fastball and got Hunter Pence looking to end it.
Madson knocked down Pence with a 97 mph fastball on an 0-2 pitch before freezing him with another 97 mph heater.
Brad Lidge was warming up in the bullpen, ready to get another chance after picking up his 11th blown save last week at Florida. But Madson needed just nine pitches to finish the eighth so Manuel sent him out there for another inning.
If there's a save situation Wednesday night, Lidge may be out there.
"Lidge pitches better at home than he does on the road and he matches up good against (Houston's) right-handers," Manuel said.
Moyer landed awkwardly on his final pitch in the seventh and was helped to the dugout by catcher Paul Bako. Center fielder Shane Victorino made an outstanding, twisting catch on Jeff Keppinger's drive as Moyer watched on his hands and knees. Moyer strained his left groin.
Kaz Matsui and Lance Berkman homered for the Astros, who won the first five meetings between the teams.
Wilton Lopez (0-1) allowed five runs and six hits in 3 2-3 innings in his first career start. Lopez had made six relief appearances.
"He left the ball up and we know if you hit the ball good in this ballpark, it can go a long way," Astros interim manager Dave Clark said.
Feliz put the Phillies ahead 5-1 in the fourth when he connected off Lopez for his seventh career slam. Ryan Howard started the inning with an infield hit and Raul Ibanez followed with a single. After Werth walked to load the bases, Feliz drove the next pitch to the seats in left for his 12th homer.
A sellout crowd stood and waved their white-and-red "Fightin' Phils" rally towels, giving Feliz a curtain call.
The Phillies can wrap up the division Wednesday night with Pedro Martinez on the mound. If so, many starters can get some much-needed rest.
"That's the light at the end of the tunnel," Howard said. "Rest is always good."
Lee's broken-bat single plated a run in the fifth to cut it to 5-2. The Astros just missed tying the game when the next batter, Pence, flied out to deep center with two runners on. Happ fanned Keppinger to end the inning.
"I felt a lot better than the results," Happ said. "It was a battle all night."
Werth went deep off Wesley Wright to give the Phillies a 7-2 lead in the fifth. Werth, an All-Star outfielder, has 35 homers and 96 RBIs in his first season as a full-time starter.
Matsui hit a two-run shot in the sixth to cut it to 7-4.
After Berkman put the Astros ahead 1-0 in the third inning with his 25th homer, the Phillies tied it in the bottom half on Jimmy Rollins' RBI double.
NOTES: Cliff Lee's start was pushed back to Thursday and Martinez was moved up one day. Martinez (5-1) missed his previous start with neck stiffness. The move also puts Lee in position to pitch Game 1 of the NL division series. ... Phillies C Carlos Ruiz was a late scratch. He's been bothered by a wrist injury. ... Feliz has two grand slams this year. It extended the Phillies' franchise record for slams in a season to 11. ... Astros SS Miguel Tejada extended his hitting streak to 16 games. ... Houston RHP Chad Paronto left after injuring his left hamstring on a pitch to Howard in the seventh.