Divers have combed through a sunken ferry in a bid to retrieve the bodies of more than 200 people who were missing after a collision with a cargo vessel near the central Philippines port of Cebu.

The crash late on Friday sent passengers jumping into the ocean and left many others trapped. At least 31 people have been confirmed dead and hundreds have been rescued.

Small planes and helicopters were yesterday scouring the waters for survivors, and divers searched the sunken vessel after an oil slick had cleared.

Some 630 people had been rescued, many by fishing boats, and 214 were missing, the coastguard said. Many of the survivors were ill from swallowing oil and seawater. The youngest among those rescued was an 11-month baby.

The 40-year-old ferry was approaching Cebu when it collided with the departing cargo ship, the Sulpicio Express 7, at about 9 pm. It sank in minutes.

"Search-and-rescue operations by the navy and coastguard are continuing with the help of some commercial vessels," acting coast guard chief Rear Admiral Luis Tuason told local radio.

"The number of missing is still huge."

The Sulpicio Express 7 is owned by unlisted firm Philippine Span Asia Carrier Corp, formerly known as Sulpicio Lines Inc, which owned the MV Dona Paz ferry.

That vessel collided with a tanker in the Sibuyan Sea in December 1987, killing 4375 on the ferry and 11 of the tanker's 13-man crew.

Scores, sometimes hundreds, of people die each year in ferry accidents in the Philippines, an archipelago of 7100 islands with a notoriously poor record for maritime safety.

Overcrowding is common, and many of the vessels are in poor condition.

The owners of the ferry involved in Friday's accident said it was carrying 723 passengers, 118 crew and 104 containers. It had an authorised capacity of 1010 passengers and crew and 160 containers.

The ferry had requested a change in its approach to port minutes before the accident, Tuason said, but it was unclear if the cargo vessel had agreed.

The captains of the two ships are alive but have yet to be questioned, Tuason said.

The ferry sank about one kilometre off Cebu.

"We felt the cargo ship hit us and minutes later we noticed our ship was listing," said passenger Aldrin Raman.

"I grabbed a life vest and jumped overboard. I saw many passengers doing the same."

One of the crew said the ferry sank within 10 minutes of the collision.

"The collision left a gaping hole in the ferry and water started rushing in, so the captain ordered (us to) abandon ship," the crew member said. Most of the passengers were already wearing life jackets before the ship sank, he added.

Another passenger, Jerwin Agudong, said several people had been trapped. "It seems some were not able to get out. We saw dead bodies on the side," he said.

Fishermen on shore said they saw flares.

"It was very dark and we could hear a lot of people shouting, asking for help," said George Palmero, a 35-year-old fisherman who helped pull 10 survivors from the water.