PHP NSUpdate Обновление строки TXT - PullRequest
0 голосов
/ 11 мая 2018

Я использую NSUpdate для обновления DNS-записей из PHP

все работает, но что-то идет не так, когда я хочу обновить / добавить TXT Record

Добавление текстовой записи не так сложно, как SRV OF SPF

Нет :) :)

Проблема: пытаясь добавить что-то вроде «Это запись TXT»

после отправки из PHP в NSUPDATE (работает с другими записями)

Bind DNS Server получает это: Домен IN TXT "Этот" "IS" "an" "TXT" "Запись" но это неправильно! проверил мой код, посмотрел вокруг ... это не работает ..

код:

    <?php
        if ($txt_true) {
             $ttl2 = '36';
                // TXT string could be almost anything, just make sure it's quoted.
                // $txt_var = str_replace("'", "", $txt_var);
                // $txt_var = str_replace('"', "", $txt_var);
                //$txt_var = '"'. $txt_var.'"';
                $data .= "update add ".$sub.".".$domain.". ".$ttl2." IN TXT ".$txt_var."\n"; 

          }

это идет к NSupdate (data + nsupdate и т. Д.). Dotn follow блок, который закомментирован

здесь:

function dns_update ($id_domain,$mydata) {
 global $nsupdate;

 if (domain_exists($id_domain)) {
  $infos = domain_infos($id_domain);
  $domain = $infos['domain'];
  $dnsip = $infos['dnsip'];
  $key = $infos['key'];
  if ($key != '') { $add = ' -y '.$key; }
  $data = "server $dnsip\n";
  $data .= "zone $domain\n";
  $data .= $mydata;
  $data .= "\n";
  $result = `echo "$data" | $nsupdate$add`;
  return $result;

 } else {
  return false;
 }
}

и Цитата TXT Record происходит с

HTML => INPUT => DO => Wirte DB & Function => NSUPDATE

1 Ответ

0 голосов
/ 11 мая 2018

Вам нужны кавычки вокруг текстовых данных. Если он содержит какие-либо встроенные кавычки, их необходимо экранировать:

$txt_var = str_replace('"', '\"', $txt_var);
$data .= "update add $sub.$domain. $ttl2 IN TXT \"$txt_var\"\n";

Поскольку эта строка содержит двойные кавычки, вы должны использовать одинарные кавычки в своем выражении echo:

$result = `echo '$data' | $nsupdate$add`;

Однако гораздо лучше было бы использовать API, а не делать это через командную строку. См. Библиотеку Net_DNS2 .

...