Родился 17 (30) июня 1900 в селе Альведино (?лб?д?н) Лаишевского уезда Казанской губернии (ныне Пестречинский район Республики Татарстан). По национальности татарин.
Отец умер ещё до его рождения (по другим данным, когда ему был 1 год).
В ранней юности батрачил, в 15 лет ушёл в Казань и поступил на завод чернорабочим.
Участвовал в установлении Советской власти в Казани. Весной 1918 вступил добровольцем в Красную Армию, сражался на Восточном фронте против войск Колчака, затем против войск Деникина и повстанцев на Северном Кавказе. После окончания Гражданской войны остался в армии. В 1922 году вступил в РКП(б).
В сентябре 1925 окончил Владикавказскую пехотную школу; на Кавказе женился и усыновил мальчика-сироту. В 1939 окончил Военнную академию имени Фрунзе.
В звании майора назначен командиром 44-го стрелкового полка.
Участник Советско-финской войны. По окончании войны его полк переводится в Западную Белоруссию, а в мае 1941 — в Брест.
После нападения немцев на крепость возглавил группу бойцов из 1-го батальона своего полка и мелких разрозненных подразделений 333-го и 125-го стрелковых полков, во главе которой сражался на валу у Северных ворот Кобринского укрепления; затем возглавлял гарнизон Восточного форта, где с 24 июня сосредоточились все защитники Кобринского укрепления. Всего у Гаврилова было около 400 человек с двумя зенитными орудиями, несколькими 45-мм пушками и четырёхствольным зенитным пулемётом.
После общего штурма 30 июня, предпринятого немцами и окончившегося захватом Восточного форта, Гаврилов с остатками своей группы (12 человек с четырьмя пулемётами) укрывается в казематах.
Оставшись один, 23 июля тяжело раненым попадает в плен. По описанию лечившего его в госпитале доктора Вороновича:
Содержался в лагерях Хаммельбург и Равенсбрюк до мая 1945 года. В плену сблизился с генералом Карбышевым.
После освобождения из немецкого плена П. М. Гаврилова исключили из ВКП(б), ввиду утраты партбилета. Однако, восстановленный в прежнем воинском звании, осенью 1945 года он был назначен начальником советского лагеря для японских военнопленных в Сибири, где получил несколько благодарностей по службе (считается, что он предотвратил эпидемию тифа среди японских военнопленных, а также пресекал злоупотребления со стороны японских офицеров).
После этого Гаврилов некоторое время (до 1947 года) проживал на родине, в Пестречинском районе ТАССР, а затем переехал в Краснодар, где в 1955 году нашёл жену и сына, с которыми не виделся с первого дня войны.
После выхода на радио в 1955 году цикла передач под названием «В поисках героев Брестской крепости», их автором — Сергеем Смирновым — в 1956 году была написана, и в 1957 году издана книга «Брестская крепость», в которой был показан подвиг гарнизона крепости в 1941 году. Благодаря этому П. М. Гаврилов восстановил членство в партии и был представлен к награде.
Указом Президиума Верховного Совета СССР от 30 января 1957 года за образцовое выполнение воинского долга при обороне Брестской крепости в 1941 году и проявленные при этом мужество и героизм Гаврилову Пётру Михайловичу присвоено звание Героя Советского Союза с вручением ордена Ленина и медали «Золотая Звезда» (№ 10807).
Впоследствии Гаврилов совершил ряд поездок по СССР, активно занимался общественной работой. С 1968 года до конца жизни жил в Краснодаре в доме 103 на Светлой улице (в 1980 году она была переименована в улицу Гаврилова).
Пётр Михайлович Гаврилов скончался в Краснодаре 26 января 1979 года. Он был похоронен с воинскими почестями на гарнизонном мемориальном кладбище Бреста.
После выхода в 1957 и 1959 годах своих первых книг о защитниках Брестской крепости («Брестская крепость» и «Герои Брестской крепости»), С. С. Смирнов посвятил десять лет новому, существенно переработанному и дополненному, изданию книги «Брестская крепость»:
За неё С. С. Смирнов был удостоен Ленинской премии 1965 года в области литературы и журналистики.
Личные воспоминания П. М. Гаврилова были дважды изданы в Краснодаре: в 1975 и 1980 годах.
Кроме того, подвиг майора Гаврилова был показан в ряде кинофильмов: