2009-04-02 12 views
0

Comment créer une nouvelle valeur de registre en utilisant PHP?PHP: Création d'un dossier dans le registre

Le code suivant ne fonctionne pas:

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); 

Il existe déjà une clé nommée 7-ZIP à l'intérieur HKEY_LOCAL_MACHINE\SOFTWARE.

Il n'y a pas d'entrée dans error.log dans apache/logs.

À: Tomalak Comment modifier ces autorisations/identités? Y a-t-il un moyen de le faire avec PHP? Qu'est-ce que j'essaie de faire: J'ai une application Adobe AIR que je regroupe avec MySQL et PHP. Lorsque cette application est installée sur une machine, je veux mettre des informations sur la machine dans le registre, de sorte que chaque fois que l'application s'exécute, je peux vérifier si elle n'a pas été piratée.

+0

De quelle façon échouer? Accès refusé? – Tomalak

+0

Veuillez publier le contenu de votre fichier error.log dans le dossier du journal apache. –

Répondre

1

Sauf si vous avez apporté des modifications aux autorisations/identités par défaut, votre processus de serveur Web (celui exécuté par PHP) n'a pas d'autorisation d'écriture sur HKEY_LOCAL_MACHINE. A part ça, vous avez un peu mélangé la terminologie de votre registre.

Le registre est constitué de "clés" et de "valeurs". Chaque valeur a un nom (et un type), chaque clé peut contenir plusieurs valeurs et clés. Il n'y a pas de dossiers.

Dans cette optique, je suggère refactorisation votre fonction comme ceci:

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; 
} 
+0

Je pense que vous pourriez même faire le RegRead dans le bloc try, et je pense qu'il retournera une exception si la clé n'existe pas. –

+0

Depuis que le RegRead a été mis en commentaire, je ne l'ai pas inclus dans mon code. Lorsque cette fonction renvoie true, tout s'est bien passé. Il n'est pas nécessaire de lire la valeur que vous venez d'écrire. – Tomalak

+0

Comment modifier ces autorisations/identités? Existe-t-il un moyen de le faire avec PHP? – dharm0us