In Halladay's last start he also took the loss after allowing just two runs in seven innings of a 5-1 defeat at San Diego.
All three runs that Halladay surrendered were earned. He allowed six hits, struck out five, and walked two while throwing 113 pitches, 73 for strikes.
The Phillies entered the game with 63 runs, the second lowest total in the National League, ahead of only Miami (61).
The first inning provided an indication of things to come when the Phillies had runners at the corners with nobody out against lefthander Paul Maholm but failed to score. Juan Pierre opened with a single, then advanced to second on a wild pitch and to third on Placido Polanco's single.
Jimmy Rollins fouled out to the catcher, Hunter Pence popped up to the shortstop, and Shane Victorino ended the inning on a groundout.
In the second inning, Carlos Ruiz hit a one-out ground-rule double to center field, but Freddy Galvis and Halladay grounded out to end the inning.
Halladay retired the first 10 batters before Chicago centerfielder Tony Campana broke up the perfect game with one out in the fourth inning on a drag bunt single to first base.
Phillies first baseman Ty Wigginton fielded the ball, but Campana safely slid head first. Campana then stole second and scored on Starlin Castro's bloop single to center.
Castro, a notorious bad-ball and good-ball hitter, went far out of the strike zone to get a piece of a curveball.
In the fourth inning Wigginton drilled a two-out single to center, extending his hitting streak to 12 games, but Ruiz grounded out to end the inning.
Chicago added two runs in the sixth on Alfonso Soriano's RBI single off a 91 m.p.h. fastball and Ian Stewart's RBI double on an 0-2 hanging cutter.
The Phillies got to Maholm in the seventh when Wigginton crushed a 2-2 fastball to left for his second home run of the season.
That ended Maholm's evening. He threw 61/3 innings and allowed five hits, one run and no walks, and struck out one. A former Pittsburgh Pirate, Maholm entered the game with an 8.36 ERA and lowered it to 5.75.
The Phillies continued to rally in the seventh, putting runners on first and second with two outs, following infield singles by Galvis and John Mayberry Jr., who was pinch-hitting for Halladay.
Lefthander James Russell then got Juan Pierre to end the inning on what was almost an adventure fly ball to Soriano in left.
Soriano originally misjudged the ball, coming in, but he retreated in enough time to make the inning-ending catch.
Polanco opened the Phillies' eighth with a single past Stewart at third base, but Rollins grounded into a 4-6-3 double play and Pence grounded out.
Chicago added two runs in the ninth off Michael Schwimer on an RBI triple by Reed Johnson to right that eluded a diving Pence, and an RBI single by David DeJesus.
Contact Marc Narducci at 856,779-3225, email@example.com or on Twitter @sjnard.