Gå til innhold

Utføre CMD kommando med PHP


Anbefalte innlegg

Skrevet

Hai2u

 

Som tittelen sier, ønsker jeg å utføre en CMD kommando på serveren med PHP.

 

 

Si at jeg har et tekstfelt, og en knapp. Det som fylles inn i tekstfeltet skal være kommandoen som skal utføres.

 

Jeg har søkt litt rundt, men finner bare exec kommandoen som kan starte programmer/bat filer på serveren.

 

 

Er det jeg spør om mulig? I så fall, hvordan?

Videoannonse
Annonse
Skrevet

Hva er det du prøver å oppnå?

 

Mulig du ser etter denne: shell_exec(); // Execute command via shell and return the complete output as a string

Skrevet (endret)

Greia er at jeg kjører Windows Server 2003 med Active Directory, og skal opprette brukere via command-interface.

 

Jeg vil helst at dette kan gjøres eksternt, så man ikke trenger å logge inn på serveren for å legge til nye brukere.

 

Edit:

Skal se litt på den, pulse ;)

Endret av lefsaker
Skrevet (endret)

Hvordan får jeg tekstfeltet til å være kommandoen?

 

$time = "100";

 

 

shell_exec("shutdown -s -t $time"); funka ikke

shell_exec("shutdown -s -t "$time); funka ikke

Endret av lefsaker
Skrevet (endret)

Den du linka til viser bare hvordan man kjører bat filer :p

 

Har også sett igjennom hele shell_exec dokumentasjonen der, og det står jo at det skal funke med feks. "ping $host"

Endret av lefsaker
Skrevet (endret)

Skulle tro denne burde funke:

 

<?php
// Hente teksten fra tekstfeltet og lagre i en variabel:
$tekstfelt = $_POST['tekstfelt']; 
// Utførsel: 
system("cmd.exe /c $tekstfelt");
?>

 

Denne utfører i alle fall det du spør om, og returnerer results.

Endret av Limstift
Skrevet
Den du linka til viser bare hvordan man kjører bat filer :p

 

Har også sett igjennom hele shell_exec dokumentasjonen der, og det står jo at det skal funke med feks. "ping $host"

 

Jeg forstår ikke helt problemet ditt. Du sier at php ikke kan kjøre terminal kommandoer på serveren din? Vil dette si alle kommandoer?

 

Dette høres underlig ut.

 

Kan jo være en rettighets greie osgå.

 

Hvis php har lov til å kjøre kommandoene av windows, så er det uansett ingenting som hindrer deg å lagre en batch fil, og så eksekvere den, hvis det er parameter problemer du har.

Skrevet

Hmm...

 

Når jeg satte inn hele kommandoen som skal utføres, med ca 10 variabler, så legger den bare inn "$brukernavn" og "$samid" osv. Ikke det som står i tekstfeltet...

Skrevet (endret)

Jeg skal ikke på skolen før fredag, så da poster jeg koden i ni tiden da :)

 

Edit: Jeg dro vist innom skolen :p

Endret av lefsaker
Skrevet

<?php
// Hente teksten fra tekstfeltet og lagre i en variabel:
$fornavn = "adminhaxx";
// Utførsel:
system('cmd.exe /c echo Dsadd user "cn=$fornavn $etternavn, ou=Trinn1, ou=Elever, dc=svarttjern,dc=skole" -samid $brukernavn -upn [email protected] -pwd $passord -fn $fornavn -ln $etternavn -display $fornavn -memberof "CN=Klasse1A, ou=Klassetrinn, ou=Elever, DC=svarttjern, DC=skole" "CN=Bibliotek, ou=Klassetrinn, ou=Elever, DC=svarttjern, DC=skole" -tel $telefonnummer -desc "$beskrivelse" -profile \\svarttjern-ad\profiles\trinn1');
?>

 

Tøddelene(?) må være der for at brukeren skal bli lagt til i Active Directory

Skrevet

Vil ikke dette være enklere å legge i en .bat fil med parameter ?

 

utestet

$output=system("adduser.bat ".$fornavn." ".$etternavn." ".$brukernavn." ".$passord." ".$telefonnummer." ".$beskrivelse);

 

adduser.bat

:: %1 fornavn
:: %2 etternavn
:: %3 brukernavn
:: %4 passord
:: %5 tlf
:: %6 beskrivelse

Dsadd user "cn=%1 %2, ou=Trinn1, ou=Elever, dc=svarttjern,dc=skole" -samid %3 -upn %[email protected] -pwd %4 -fn %1 -ln %2 -display %1 -memberof "CN=Klasse1A, ou=Klassetrinn, ou=Elever, DC=svarttjern, DC=skole" "CN=Bibliotek, ou=Klassetrinn, ou=Elever, DC=svarttjern, DC=skole" -tel %5 -desc "%6" -profile \\svarttjern-ad\profiles\trinn1

 

Mulig du bør sjekke hvilke(n) "bruker"/rettigheter web server servicen (om windows og kjører som service) kjører som/har.

Skrevet (endret)

Kjører Apache som Administrator, men det funka ikke med .bat fil... Ingenting skjer når jeg åpner den manuelt heller...

 

Det funker så lenge jeg bruker:

<?php system(" og ikke

<?php system('

 

Jeg kan ikke bruke " IOM at " er i bruk inne i selve cmd kommandoen som utføres

Endret av lefsaker
Skrevet

Lær deg stringbehandling. ' vil sei at php *ikkje* prøver å bytte ut variabler med innholdet av variabelen.

$foo = "bar";

echo '$foo'; vil printe $foo, ikkje innholdet av $foo.

 

Les også ei linje eller tre om escaping av quotes.

Skrevet

Burde ikke dette funke?

system('cmd.exe /c Dsadd user "cn='.$fornavn.' '.$etternavn.', ou=Trinn1, ou=Elever, dc=svarttjern,dc=skole" -samid '.$brukernavn.' -upn '.$brukernavn.'@svarttjern.skole -pwd '.$passord.' -fn '.$fornavn.' -ln '.$etternavn.' -display '.$fornavn.' -memberof "CN=Klasse1A, ou=Klassetrinn, ou=Elever, DC=svarttjern, DC=skole" "CN=Bibliotek, ou=Klassetrinn, ou=Elever, DC=svarttjern, DC=skole" -tel '.$telefonnummer.' -desc "'.$beksrivelse.'" -profile \\svarttjern-ad\profiles\trinn1');

Skrevet
Burde ikke dette funke?

system('cmd.exe /c Dsadd user "cn='.$fornavn.' '.$etternavn.', ou=Trinn1, ou=Elever, dc=svarttjern,dc=skole" -samid '.$brukernavn.' -upn '.$brukernavn.'@svarttjern.skole -pwd '.$passord.' -fn '.$fornavn.' -ln '.$etternavn.' -display '.$fornavn.' -memberof "CN=Klasse1A, ou=Klassetrinn, ou=Elever, DC=svarttjern, DC=skole" "CN=Bibliotek, ou=Klassetrinn, ou=Elever, DC=svarttjern, DC=skole" -tel '.$telefonnummer.' -desc "'.$beksrivelse.'" -profile \\svarttjern-ad\profiles\trinn1');

 

Dette ser ut som en stor suppe. Du får mye større kontroll på hva du holder på med hvis du sktiver kode med litt struktur.

 

Jeg kjenner ikke til selve kommandoen i detalj men lister meg ut på ett eksempel:

$system_call  = "cmd.exe ";
$system_call .= "/c Dsadd user ";
$system_call .= "\"";
$system_call .= "cn=".$fornavn." ".$etternavn.", ";
$system_call .= "ou=Trinn1, ";
$system_call .= "ou=Elever, ";
$system_call .= "dc=svarttjern, ";
$system_call .= "dc=skole";
$system_call .= "\" ";
$system_call .= "-samid ";
$system_call .= $brukernavn." ";
$system_call .= "-upn ";
$system_call .= $brukernavn."@svarttjern.skole ";
$system_call .= "-pwd ";
$system_call .= $passord." ";
$system_call .= "-fn ";
$system_call .= $fornavn." ";
$system_call .= "-ln ";
$system_call .= $etternavn." ";
$system_call .= "-display ";
$system_call .= $fornavn." ";
$system_call .= "-memberof ";
$system_call .= "\"CN=Klasse1A, ou=Klassetrinn, ou=Elever, DC=svarttjern, DC=skole\" ";
$system_call .= "\"CN=Bibliotek, ou=Klassetrinn, ou=Elever, DC=svarttjern, DC=skole\" ";
$system_call .= "-tel ";
$system_call .= $telefonnummer." ";
$system_call .= "-desc ";
$system_call .= "\"".$beksrivelse."\" ";
$system_call .= "-profile ";
$system_call .= "\\svarttjern-ad\profiles\trinn1";

system($system_call);

 

du kan jo også prøve med echo $system_call kopiere fra kilden i nettleseren, stappe det inn i ett kall i ett terminalvindu, og kjøre kommandoen.

 

Hvis det funker i ett terminalvindu, men ikke fra ett system kall, så er det trolig ett rettighetsproblem.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...