PHP: создание папки в реестре - PullRequest
0 голосов
/ 02 апреля 2009

Как мне создать новое значение реестра с помощью PHP?

Следующий код не работает:

function registry_write($folder, $key, $value, $type="REG_SZ")
{
  $WshShell = new COM("WScript.Shell");

  $registry = "HKEY_LOCAL_MACHINE\\SOFTWARE\\" . $folder . "\\" . $key;
  //$result = $WshShell->RegRead($registry);
  $result = $WshShell->RegWrite($registry, $value, $type);

  return($result);
}

$folder = "7-ZIP";
$key = "Mac";
$value = "123";

registry_write($folder,$key,$value);

Там уже есть ключ с именем 7-ZIP внутри HKEY_LOCAL_MACHINE\SOFTWARE.

В apache / logs нет записи в error.log.

Кому: Томалак Как я могу изменить эти разрешения / идентичности? Есть ли способ сделать это с помощью php?

Что я пытаюсь сделать: У меня есть приложение Adobe AIR, которое я в комплекте с MySql и PHP. Когда это приложение установлено на компьютере, я хочу поместить некоторую информацию о машине в реестр, чтобы каждый раз приложение запускается, я могу проверить, не было ли оно пиратским.

1 Ответ

1 голос
/ 02 апреля 2009

Если вы не внесли изменения в разрешения / идентификаторы по умолчанию, процесс вашего веб-сервера (на котором работает PHP) не имеет разрешения на запись в HKEY_LOCAL_MACHINE.

Кроме этого, вы немного перепутали терминологию реестра.

Реестр состоит из «ключей» и «значений». Каждое значение имеет имя (и тип), каждый ключ может содержать несколько значений и ключей. Папок нет.

В этом свете я бы предложил рефакторинг вашей функции следующим образом:

function registry_write($key, $name, $value, $type="REG_SZ") {
  $WshShell = new COM("WScript.Shell");

  $path = "HKLM\\SOFTWARE\\$key\\$name";

  try {
    $WshShell->RegWrite($path, $value, $type);
    return true;
  }
  catch (Exception $e) {
    // echo or log the error
  }

  return false;
}
...