Как программно создавать домены аддонов на общих планах хостинга - PullRequest
5 голосов
/ 10 июля 2010

На разделяемом хостинге на основе Linux, администрируемом с помощью cpanel, существует ли программный способ создания надёжных доменов для моего сайта, если я знаю информацию для входа в cpanel и / или информацию FTP?

Примечание: в данном случае интересуются PHP и cpanel.

Ответы [ 4 ]

10 голосов
/ 11 июля 2010

Спасибо @Alex C, который поставил меня на правильный путь.Следующее будет работать со многими планами общего хостинга, но вы сначала захотите проверить их политику.

В приведенном ниже примере я бы уже купил root.com в качестве основного корневого домена моегоплан виртуального хостинга.Тогда я бы хотел добавить домен под названием addon.com.Я установил имя пользователя на addon_user и пароль на addon_pass.Также я разместил файлы для нового домена в public_html / addon.com.Чтобы подключиться к Cpanel, я ввел URL-адрес домашней страницы cpanel (зависит от плана хостинга), чтобы ее можно было проанализировать и использовать повторно.Кроме того, я предоставил информацию о пользователях / проходах cpanel для root.com в качестве root_user и root_pass.

Последний оператор echo - это просто выходной ответ, сработал он или нет.Однако, если вы хотите проанализировать его на предмет неудачи, вы, вероятно, можете проанализировать фразу «не добавлено».

Обратите внимание, что некоторые планы хостинга блокируют file_get_contents при подключении к URL, поэтому вам, возможно, придется переключиться с помощью fopen ($sURL, 'r') или Curl API.

<?php

// @ input vars - change these as you see fit
$sPastedCpanelHomepageURL = 'https://root.com:2083/frontend/x3/index.html';
$sNewDomain = 'addon.com';
$sNewDomainUser = 'addon_user';
$sNewDomainPass = 'addon_pass';
$sNewDomainFolder = 'public_html/addon.com';
$sCPanelUser = 'root_user';
$sCPanelPass = 'root_pass';

// @ processing
$sCP = dirname($sPastedCpanelHomepageURL);
$sCP = str_replace('://','://' . $sCPanelUser . ':' . $sCPanelPass . '@',$sCP);

$sTask = '/addon/doadddomain.html?';

$sNewDomain = urlencode($sNewDomain);
$sNewDomainUser = urlencode($sNewDomainUser);
$sNewDomainPass = urlencode($sNewDomainPass);
$sNewDomainFolder = urlencode($sNewDomainFolder);
$sCPanelUser = urlencode($sCPanelUser);
$sCPanelPass = urlencode($sCPanelPass);

$asData = array(
  'domain' => $sNewDomain,
  'user' => $sNewDomainUser,
  'dir' => $sNewDomainFolder,
  'pass' => $sNewDomainPass,
  'pass2' => $sNewDomainPass
);
$sData = http_build_query($asData);

$s = file_get_contents($sCP . $sTask . $sData);

echo "$s\n";
7 голосов
/ 10 июля 2010

Вы можете использовать API cPanel, здесь документ . Это не так легко прочитать, если вы хотите поиграть с ними на PHP, вы можете использовать бесплатные классы PHP (которые используют этот API за кулисами), некоторые из них здесь, на форуме cPanel , другие здесь .

3 голосов
/ 10 июля 2010

Это зависит от того, размещен ли ваш DNS-сервер где-то под вашим контролем, и есть ли API для изменения записей DNS (или просто доступа к самим конфигурациям DNS-сервера).Я не пользователь cPanel, но я собираюсь склоняться к «нет».

В среде, где вы управляете обслуживающей системой DNS, довольно просто написать код, чтобы добавить больше записей в ваш DNSзаписи (хотя очевидно, что распространение все еще требует времени) и добавление новых сайтов в sites-enabled.Это также может быть очень трудно сделать безопасно и безопасно, но все готово.Но я сомневаюсь, что у вас есть такая возможность с помощью cPanel.

Что-то, что только что пришло на ум, - это возможность использовать универсальные домены (наличие записи сайта по умолчанию в ваших файлах конфигурации Apache, на которую могут указывать все неопределенные субдомены) и программно.определить, какой сайт должен работать оттуда, но в этом подходе так много недостатков, что я бы не советовал даже смотреть на него.

2 голосов
/ 10 июля 2010

Раньше я делал это с fopen - я не могу вспомнить точные URL-адреса и у меня больше нет доступа к cPanel, но если вы проверите используемые URL-адреса, вы сможете сделать что-то вроде

fopen("https://username:pass@domain.com:1084/cpanel/doaddparked.html?domain=domain.com", "r");

(вам придется проверять пути и порты, я не могу их запомнить) - и я последний раз делал это в проекте два года назад, когда наша подписка создавала электронные письма через cpanel - они могли изменить его с тех пор, но я обнаружил, что самый простой способ. В то время они определенно работали с GET-данными, а не с POST, если вы изменили их на POST, вам может понадобиться посмотреть на CURL.

...