A goalkeeping blunder handed PSG advantage in the battle to finish top of Group A, while Dinamo Zagreb and Dynamo Kiev were left seeing red due to the weather.
Champions League: Callejon at the double as Real Madrid rout Ajax
Big-spending Paris St Germain put aside their domestic form to underline their Champions League credentials and top Group A at Porto's expense.
PSG won 2-1 thanks to a goalkeeping howler by Porto's Helton, who allowed Argentine Ezequiel Lavezzi's low shot through his grasp. Both sides had already been assured of a place in the last 16.
The Qatar-backed side needed a win to top the group and produced a performance that pleased under-fire manager Carlo Ancelotti.
"The players showed a lot of pride tonight because the critics had been very harsh," the Italian told reporters.
Brazilian centre back Thiago Silva's fine header from Maxwell's cross put the French side ahead.
Colombian striker Jackson Martinez quickly levelled from close range before Helton's howler handed advantage to the French side.
Schalke drew 1-1 with Montpellier to finish top of Group B by two points, after Arsenal's third defeat in four seasons at Olympiakos.
Benedikt Hoewdes's diving header put Schalke ahead 11 minutes into the second half, but the goal was quickly cancelled out by Emanuel Herrera's strike.
Ajax claimed the Europa League place in Manchester City's group after finish third, despite being on the wrong end of a 4-1 drubbing by Real Madrid.
Jose Mourinho's future has been the subject of much speculation but his Real Madrid side turned on the style to brush aside the Dutch champions.
Cristiano Ronaldo netted the first, Jose Callejon latched on to an exquisite Luka Modric pass to score the second and Kaka curled in a superb third. Callejon got his second near the end after Derk Boerrigter's consolation for Ajax.
"We finished third with a young team and we should be proud," Frank de Boer, the Ajax coach, said afterwards.
"We now have the chance to reach the Europa League final at our own stadium. It won't be easy, there are some very good teams in the competition, but it would be a great prize."
Zenit St Petersburg secured their qualification for the Europa League with Portuguese winger Danny's first-half strike against AC Milan, who rested players having already qualified.
Seven-times European champions Milan might have expected to underline their pedigree by topping the group but that honour had already been secured by Malaga.
The competition debutants were held 2-2 at home by Anderlecht in their final game which was marred by clashes between police and visiting Belgian fans in the stands.
A stoppage-time penalty from substitute Ivan Krstanovic handed Dinamo Zagreb a first goal and point in Group A with a 1-1 draw at home to Dynamo Kiev but the match will be remembered for the difficult playing conditions in the Croatian capital.
Heavy snowfall forced a 15 minute delay early in the first half as the players were taken off for the pitch to be remarked in red paint.
Follow us @SprtNationalUAE