Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem PHP exec/system problém

Ahoj, mám následující problém:

V PHP potřebuji rozběhnout přes system(), nebo exec() příkaz pro spuštění programu SyncBack (používám pro synchronizaci s FTP).

Takto to funguje přímo v CMD:

"C:\Program Files (x86)\2BrightSparks\SyncBackSE\SyncBackSE.exe" "parametr_s _nazvem_profilu"

Když výše uvedený příkaz spustím přímo v CMD, nebo ho vložím do souboru.BAT, tak to funguje.

Když ale udělám toto v php:

system('"C:\Program Files (x86)\2BrightSparks\SyncBackSE\SyncBackSE.exe" "parametr_s _nazvem_profilu"');

nebo

exec('"C:\Program Files (x86)\2BrightSparks\SyncBackSE\SyncBackSE.exe" "parametr_s _nazvem_profilu"');

Tak vidím, že se proces SyncBackSE.exe spustí, ale nefunguje a nikdy se neukončí.

Netušíte, kde by mohl být problém? Díky moc!

P.S.: exec a system funguje - jiné bat soubory, nebo přímo příkazy mi fungují...

Předmět Autor Datum
http://us3.php.net/manual/en/function.escapeshella rg.php bezpečněji, spolehlivěji. Nezapomeň na me…
touchwood 07.11.2013 17:09
touchwood
Ahoj, jj, to jsem našel ale nepomohlo to... Snad jsem to tedy použil správně - takto: <?php system…
n.u.r.v. 08.11.2013 08:58
n.u.r.v.
měl jsi tam blbě uvozovky. <?php system('"C:\Program Files (x86)\2BrightSparks\SyncBackSE\SyncBackS…
touchwood 08.11.2013 10:28
touchwood
Bohužel - nefunguje... Problém bude jinde, protože když udělám následující "prasárnu", tak když spus…
n.u.r.v. 08.11.2013 13:43
n.u.r.v.
a pod jakým účtem ti to PHP běží? ten "pokus" je co?
touchwood 08.11.2013 13:46
touchwood
No ten parametr "pokus" je název profilu, který se má synchronizovat. Jinak php běží z mého profilu…
n.u.r.v. 08.11.2013 14:04
n.u.r.v.
co znamená "z mého profilu"? Spouštíš jej ručně jako proces ve svém profilu, nebo jako službu?
touchwood 08.11.2013 14:06
touchwood
No na pc mám localhost-vertrigoserv, který spouští server jako službu (service). Spouštím tu ještě j…
n.u.r.v. 08.11.2013 14:11
n.u.r.v.
Tak už jsem zjistil problém, ale nevím, jak ho vyřešit: Když udělám následující php script: script…
n.u.r.v. 11.11.2013 00:07
n.u.r.v.
je to jak jsem říkal - ty to PHP běžíš pod jiným účtem (a ten nemá přístup k datům/parametrům/regist…
touchwood 11.11.2013 06:58
touchwood
Hmm, no, tak to je v háji, co se s tím dá dělat? Apache (vertrigo serv) jsem instaloval já jako admi…
n.u.r.v. 11.11.2013 08:23
n.u.r.v.
to je problém, který se dá řešit několika způsoby. Pokud se jedná o soubor, stačí jej přemístit tam,…
touchwood 11.11.2013 09:40
touchwood
No, jen to shrnu: Na mém PC (localhost) to je takto: Pod svým účtem jsem nainstaloval jak apache,…
n.u.r.v. 11.11.2013 10:00
n.u.r.v.
koukni se do taskmamažeru, pod jakým účtem to jede. V podstatě, pokud to stačí někde v tom programu…
touchwood 11.11.2013 10:42
touchwood
Tak nevím, zda to spouštím/zapisujic v php správně: Udělal jsem si jednoduchý script: text.bat: e…
n.u.r.v. 11.11.2013 10:24
n.u.r.v.
runas musíš spustit s proměnnými prostředí profilu (/profile), jinak ti to nebude fungovat (budeš ve…
touchwood 11.11.2013 10:43
touchwood
Ok, ale teď koukám, že runas nebere parametr password - chce ho napsat ručně
n.u.r.v. 11.11.2013 10:55
n.u.r.v.
poprvé ho musíš zadat ručně. spusť si v daném profilu cmd (můžeš klidně přes to PHP)
touchwood 11.11.2013 11:03
touchwood
hmm, bohužel přes php neotevřu cmd tak, aby se mi zobrazilo okno
n.u.r.v. 11.11.2013 13:10
n.u.r.v.
tak se už koukni pod jakým účtem to běží a udělej to napoprvé ručně. Předpokládám, že to je SYSTEM.
touchwood 11.11.2013 15:35
touchwood
ok, dal jsem toto: runas.exe /profile /savecred /user:THINKPAD_1\SYSTEM "C:\Program Files (x86)\2Br… poslední
n.u.r.v. 11.11.2013 15:46
n.u.r.v.

Ahoj, jj, to jsem našel ale nepomohlo to...

Snad jsem to tedy použil správně - takto:

<?php
system('"C:\Program Files (x86)\2BrightSparks\SyncBackSE\SyncBackSE.exe "'.escapeshellarg('pokus'), $ret);
echo $ret;
?>

Výše uvedený kod ale vůbec proces nespustí a vrátí se mi číslo 1.

Myslím si, že to nebude problém PHP..

Bohužel - nefunguje... Problém bude jinde, protože když udělám následující "prasárnu", tak když spustím soubor 1.bat ručně, tak to funguje a když spustím 1.bat přes php, tak to nejde:

1) vytvořím soubor 1.bat a do něj vložím:

C:\2.bat

2) vytvořím soubor 2.bat a do něj vložím:

"C:\Program Files (x86)\2BrightSparks\SyncBackSE\SyncBackSE.exe" "pokus"

Výše uvedený případ by měl vyloučit chybu v zápisu, protože soubor 1.bat funguje jako spouštěč...

No ten parametr "pokus" je název profilu, který se má synchronizovat.

Jinak php běží z mého profilu - zatím dělám na localhostu...

Když to spustím přes php, tak ve správci úloh v procesech dokonce vidím, že se spustil proces SyncBackSE.exe, ale nic nedělá a nikdy se neukončí...zároveň pořád běží php script...když ve správci ukončím ten proces, tak se ukončí i php script...

Tak už jsem zjistil problém, ale nevím, jak ho vyřešit:

Když udělám následující php script:

script.php:

<?php
system('"C:\Program Files (x86)\2BrightSparks\SyncBackSE\SyncBackSE.exe" pokus',$ret);
echo $ret;
?>

A spustím v prohlížeči, tak to nejde, ale pokud spustím cmd a do něj vložím:

cmd:

C:\Users\Jméno Příjmení>"C:\Program Files (x86)\VertrigoServ\Php\php.exe" "C:\Pro
gram Files (x86)\VertrigoServ\www\pokusy\script.php"

tak to funguje

Když si spustím přes prohlížeč php s tímto obsahem : system('echo %USERNAME%'), tak to vypíše název pc: PC1$

Když ale ten php výpis spustím ručně v cmd, tak to vypíše jméno přihlášeného uživatele...

Tedy jak udělat, aby apache běžel jakoby pod mým účtem, nebo jak nastavit program SyncBackSE.exe tak, aby se spustil jakýmkoliv uživatelem? Díky

to je problém, který se dá řešit několika způsoby. Pokud se jedná o soubor, stačí jej přemístit tam, kde na něj proces uvidí. Pokud se jedná o záznamy v registry, máš v podstatě 2 možnosti: použít runas a celý proces spouštěný voláním exec spustit pod tvým účtem (to je ten horší model), NEBO si celu konfiguraci programu naklikat pod daným úštem, pod kterým běží to PHP.

No, jen to shrnu:

Na mém PC (localhost) to je takto:

Pod svým účtem jsem nainstaloval jak apache, tak program, který chci pomocí php spouštět. I php script spouštím pod svým účtem...Takže nevím, proč najednou apache běží ne pod mým účtem, ale pod účtem PC1$.

Tedy jak se přepnout do účtu PC1$ abych to tam mohl naklikat? Díky moc...

EDIT: Zkusím ten runas...

ok, dal jsem toto:

runas.exe /profile /savecred /user:THINKPAD_1\SYSTEM "C:\Program Files (x86)\2BrightSparks\SyncBackSE\SyncBackSE.exe pokusy"

Chtělo to heslo, tak jsem na první pokus dal jen enter

vrátila se mi chyba: -2147467259: Nespecifikovaná chyba

Tak jsem to spustil znova a dal moje heslo - stejná chyba

Zpět do poradny Odpovědět na původní otázku Nahoru