Как отправлять смс через php?
У вас вопрос неверный.
Вы спрашиваете про отправку через php, а по сути ищете наименее затратный способ.
--
Я себе сделал бесплатный от слова совсем, даже 600 смс и за те не плачу)
правда, железо у меня уже было (домашнее).
---
Нужно:
1. Модем e3372
2. Роутер Кинетик с usb
3. Сим-карта Дэником, которая на тарифе за 0 рублей дает 600 смс просто так, либо мегафон или Yota дают условный безлимит на смс за 50 рублей. По сути блокируют отправку, если превышаешь лимит в час.
4. Белые ip не нужны. Интернет на Сим карте тоже не нужен

Модем прошиваем в hilink, на роутере включаем keendns, добавляем модем к этой службе, при включении будет выдан адрес в сети интернет и ssl, там же в роутере закрываем модем паролем.

Далее к модему можно обращаться не только по локальной сети 192.168.8.1, но и из интернета (спасибо кинетик)

Пишем php код, нужно написать несколько функций (отправка, получение, удаление, получение токена)
Вот пример:
//функция Отправки СМС
function send($sms_phone, $sms_message){
  $xml = auth();
  $options = array(
    CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
    CURLOPT_USERPWD => 'admin:34543sdd4!@0',
    CURLOPT_URL => 'https://modem.ВАШЕ_ИМЯ.keenetic.link/api/sms/send-sms',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERAGENT => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
    CURLOPT_HTTPHEADER => array("X-Requested-With: XMLHttpRequest",'Cookie:'. $xml->SesInfo,'__RequestVerificationToken:'. $xml->TokInfo,'"Content-Type:application/x-www-form-urlencoded; charset=UTF-8"'),
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => "<request><Index>-1</Index><Phones><Phone>".$sms_phone."</Phone></Phones><Sca/><Content>".$sms_message."</Content><Length>5</Length><Reserved>1</Reserved><Date>".date("Y-m-d H:i:s")."</Date></request>"
  );
  $curl = curl_init();
  curl_setopt_array($curl, $options);
  curl_exec($curl);
  curl_close($curl);
};

И сама отправка:
send($sms_phone, $sms_message);
На сервере нужно делать проверку номера и спам-защиту:
Проверка можно делать тут, включая ограничения по региону:
rosreestr.subnets.ru/?get=num&num=79152000200
--
Тем самым ваш сайт может слать смс. 

Вы можете отправлять и получать СМС в телеграм/из телеграм.
Ничего не платите, если не беспределите, не рассылаете рекламу и не превышаете лимиты

Для клиентов, когда важно передать именное смс, а не циферное, использую www.smsimple.ru
В среднем отправка 2,30 рубля
Чтобы отправить SMS на номер +79040601199 из php выполните код:
<?php

header('Content-Type: text/html; charset=utf-8');

$url = 'https://sms.ru/sms/send?api_id=0165484B-5891-4EA8-FD86-D4BB4A0A7CCA&to=79040601199&msg=Prvet+vsem&json=1';

echo file_get_contents($url);

Где api_id это уникальный ключ полученный из личного кабинета на сайте sms.ru,
to - номер получателя,
msg - текст сообщения.