Halladay (1-0) surrendered back-to-back singles by Alex Pressley and Jose Tabata to open the Pirates' first but then got a double play. The only other batters to reach came on hit batsmen. Halladay struck out five and didn't walk a batter.
Jonathan Papelbon pitched a 1-2-3 ninth for the save.
Pittsburgh starter Erik Bedard (0-1) scattered six hits and a walk over seven innings but the Phillies crammed two of the hits and a sacrifice fly into the seventh inning for the game's only run.
Ty Wigginton delivered a one-out single for Philadelphia and went to third on John Mayberry's double to right. Carlos Ruiz sliced a fly to right that Tabata fielded coming in. Wigginton tagged up and beat Ruiz's throw, which came in high, home.
The sacrifice fly marked the only time Ruiz was out on the day. He finished 3-for-3.
Lytro unveils camera that can focus a photo after shooting it
NASA celebrates Earth Day with #GlobalSelfie