Batchbestand met PHP aanroepen + een parameter

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • freebee666
  • Registratie: Juni 2001
  • Laatst online: 20-10-2024
Eerst maar even vermelden wat ik draai. Webserver is WAMP5 v1.6.1 met PHP v5.1.2 op een windowsbak.

Op een website wat ik nu aan het maken ben, wil ik een batchbestand aanroepen vanuit php die op zijn beurt weer een share aanmaakt, een dir-commando uitvoert en in textfile opslaat en de share weer verwijderd. Nou heb ik zelf een tijd eraan gezeten maar ik kreeg het niet helemaal werkend. Met een paar mensen in #devschuur ben ik wel verder gekomen, maar het werkt nog niet zoals ik wil dat het werkt.

Het punt zit hem volgens mij in dat het batchbestand het pad niet goed doorkrijgt.

Ik heb in een textfile een lijst met shares. Deze heb ik tevens in een database staan.
Ik heb verschillende aanroepmethodes geprobeerd, maar het schijnt enkel te werken als ik het hardcoded in een variabele zet. Dit wil ik uiteraard niet, omdat het script dan niet dynamisch is.

Aanroep waarop het wel werkt:
code:
1
2
3
$sharetest = "\\\\192.168.247.1\\Open"; // sharepath in een variabele zetten
$cmd = "C:\_webserver\webroot\drupal\files\shares\shares.bat ".$sharetest;
shell_exec($cmd);

Bij diegene die wel werken, komt er netjes de directorystructuur van de share in het textbestand.
Nog een aanroep die wel werkt:
code:
1
shell_exec('C:/_webserver/webroot/drupal/files/shares/shares.bat \\\\192.168.247.1\Open');

Zoals je ziet maakt het niet uit of in het pad naar het batchbestand slashes of backslashes gebruikt worden.

Niet werkende aanroepen, maar op de manier waarop ik het werkend wil hebben (met een var):
code:
1
2
shell_exec('C:/_webserver/webroot/drupal/files/shares/shares.bat '.$shares["1"]); // array met de shares
shell_exec($cmd);

code:
1
2
shell_exec('C:/_webserver/webroot/drupal/files/shares/shares.bat '.$shares['1']); // array met de shares
shell_exec($cmd);

code:
1
2
3
$shareVar = $shares['1'];
$cmd = "C:\_webserver\webroot\drupal\files\shares\shares.bat ".addslashes($shareVar);
shell_exec($cmd);

Bij diegene die niet werken, wordt er een leeg textbestand weggeschreven.

Ik echo steeds de variabele die ik meegeef aan de batchfile-aanroep, en die klopt wel.

Ik kom er nu echt niet meer uit en zie echt niet waar het aan ligt en daarom als laatste redmiddel hoop ik dat wij samen misschien de oplossing kunnen achterhalen.

Powered by ProBNC


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Blijkbaar klopt de string die je opbouwt toch niet, anders zou die in ene geval ook niet werken. Gebruik var_dump() op alles voordat je het in shell_exec stopt, en vergelijk die waarden eens heel goed. Zowel van degene die werkt als degene die niet werkt.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • freebee666
  • Registratie: Juni 2001
  • Laatst online: 20-10-2024
Ja dat had ik inderdaad eerst ook gedaan en toen kwam ik erachter dat als ik 'm inlas vanuit de textfile dat er nog whitespace achter kwam. Dat had ik er al vanaf gehaald met trim().

Ik heb ze nu allemaal gecontroleerd met var_dump() en daarbij zijn de resultaten nagenoeg gelijk:

string(73) "C:\_webserver\webroot\drupal\files\shares\shares.bat \\192.168.247.1\Open"
string(20) "\\192.168.247.1\Open"
string(76) "C:\_webserver\webroot\drupal\files\shares\shares.bat \\\\192.168.247.1\\Open"

Hij krijgt het pad dus lijkt me wel correct door :S

Powered by ProBNC


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Het lijkt me dan dat de waarde $shares['l'] niet klopt, de waarde kan bijna niet gelijk zijn aan de hardcoded waarde. Het lijkt me anders een vrij onwaarschijnlijke bug.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • freebee666
  • Registratie: Juni 2001
  • Laatst online: 20-10-2024
Er is geen zichtbaar verschil. Vanuit de txtfile ingelezen met trim() eroverheen zit er "\\192.168.247.1\Open" in. Vanuit de database ingelezen zit er "\\192.168.247.1\Open" in en hardcoded zit er "\\192.168.247.1\Open" in.

Vandaar mijn wanhoop over het feit dat het niet wil werken :'(

Powered by ProBNC


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Nagenoeg is blijbaar niet exact hetzelfde. Sowieso zie ik door je topic heen allemaal verschillende slashes. De ene keer heb je \\, de volgende keer \ en weer een andere keer /.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • freebee666
  • Registratie: Juni 2001
  • Laatst online: 20-10-2024
Hmmm, opgelost volgens mij.
Ik heb nu trim() eroverheen gehaald voordat ie het inleest vanuit txtfile in een array en nu lijkt het te werken. Wel apart dan dat ie het niet correct doe als ik trim() eroverheen haal in een tussenstap van array naar variabele en variabele naar shell_exec() aanroep.

Thanks voor het meedenken in ieder geval :)
Janoz schreef op maandag 25 juni 2007 @ 14:46:
Nagenoeg is blijbaar niet exact hetzelfde. Sowieso zie ik door je topic heen allemaal verschillende slashes. De ene keer heb je \\, de volgende keer \ en weer een andere keer /.
Dat was, omdat iemand zei dat 't niet werkte met backslahes en t met forwardslashes moest. Dus ik heb met beide geprobeerd om aan te tonen dat dat niet uit maakt op een windowsbak.
Plus het lag eraan wat ik met var_dump() dumpte, een $cmd, $shares['1'] of hardcoded.

[ Voor 45% gewijzigd door freebee666 op 25-06-2007 14:55 ]

Powered by ProBNC


Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

Move naar Programming
Pagina: 1