Rescuers aboard helicopters and speed boats were desperately searching on Saturday for more than 200 people missing after a ferry sank in the Philippines, with at least 26 already confirmed dead.

Stormy weather on Saturday forced Philippine rescuers to suspend a search for 171 people missing after a crowded ferry collided with a cargo ship and quickly sank, with 31 others confirmed dead.

The St Thomas Aquinas ferry was carrying 831 passengers and crew when the vessels smashed into each other late last night in a dangerous choke point near the port of Cebu, the Philippines' second-biggest city, authorities said.

Coastguard and military vessels, as well as local fishermen in their own small boats, frantically worked through the night and this morning to haul 629 people out of the water alive. But when bad weather whipped up the ocean mid-afternoon today, authorities suspended the search with 171 people still unaccounted for.

He also said powerful currents had earlier prevented divers from assessing all of the sunken ferry to determine how many people had died and were trapped inside.

Fabic said rescuers had not given up hope that there were other survivors who were still drifting at sea.

But Rear Admiral Luis Tuason, vice commandant of the coastguard, said the death toll would almost certainly rise from the 31 bodies that had already been retrieved.

"Because of the speed by which it went down, there is a big chance that there are people trapped inside," he said, adding the ferry sank within 10 minutes of the collision.

The cargo ship, Sulpicio Express 7, which had 36 crew members on board, did not sink. Television footage showed its steel bow had caved in on impact but it sailed safely to dock.

Tuason said it appeared one of the vessels had violated rules on which lanes they should use when travelling in and out of the port, without specifying which one.

The strait leading into the Cebu port is a well-known danger zone, said the enforcement office chief of the government's Maritime Industry Authority, Arnie Santiago. "It is a narrow passage, many ships have had minor accidents there in the past. But nothing this major," Santiago said.

"There is a blind spot there and each ship passing through needs to give way in a portion of that narrow strip." Industry authority head Maximo Mejia later told reporters that both vessels had previously passed safety inspections and were sea worthy, indicating human error was to blame.

Ferries are one of the main forms of transport across the archipelago of more than 7,100 islands, particularly for the millions of people too poor to fly.

But sea accidents are common, with poor safety standards and lax enforcement typically to blame.

The world's deadliest peacetime maritime disaster occurred near the capital Manila in 1987 when a ferry laden with Christmas holidaymakers collided with a small oil tanker, killing more than 4,300 people.