IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: shell_exec v PHP scriptu

Aktivity
Avatar
lubomirhajda
Člen
Avatar
lubomirhajda:13.2.2020 18:39

Prosím o pomoc při řešení následujícího (banálního) problému:
Na svém PC používám prostředí XAMPP (Apache + PHP atd.) pro spouštění svých programů v PHP. V jednom případě používám příkaz shell_exec pro vyvolání Příkazového řádku (cmd) s parametrem editovaného TXT souboru v samostatném okně. Nově otevřené okno se po vyvolání příkazu ihned otevře pro editaci souboru (viz příkazy níže). Po editaci tohoto TXT souboru a uložení změn okno ukončím a program se vrátí do předchozího okna. Tak to chci a tak to i funguje, ale pouze jednou! Při dalším vyvolání příkazu shell_exec se nové okno vytvoří, ale pouze v systémové liště. Pak musím klasicky kliknout na něj a až poté se mi zobrazí na obrazovce. Dělal jsem pokusy i s nastavením hodnot max_execution_ti­me i max_input_time, ale výsledek je vždy stejný. Jediné na co jsem náhodou přišel je to, že po aktualizaci (reinstalaci) XAMPP se mi výše spomínané okno otevře a zobrazí na obrazovce k dalšímu použití, ale při dalším použití příkazu pro jiný TXT soubor je to opět ve starých kolejích. Funguje to opět pouze jednou. Neví někdo, které nastavení Apache nebo PHP způsobuje tuto změnu? Děkuji za použitelné rady. Pro jistotu uvádím použité příkazy:

$wSoubor = @$_GET['wSoubor'];
ini_set('max_execution_time', 0);    // max. povolený čas v sekundách na provedení skriptu
ini_set('max_input_time', 0);        // 0 = neomezený čas pro analýzu vstupů

if(function_exists('exec'))
   {
   $prikaz = "c:/windows/notepad.exe c:/xampp/htdocs/software/".$wSoubor;
   echo shell_exec($prikaz);
   }
?>

<SCRIPT language=JavaScript>
<!--
JavaScript:window.history.go(-2);
// -->
</SCRIPT>

Zkusil jsem: Změny hodnot max_execution_ti­me i max_input_time nemají asi vliv na tento problém.

Chci docílit: Cíl je zřejmý z popisu výše.

 
Odpovědět
13.2.2020 18:39
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14.2.2020 8:25

Nevim, proc to chces delat? Ceho chces ve vysledku docilit? Nemuzes treba spoustet kod javascriptem pres casovac, musis to mit v php? Jako, urcite se prohlizece a system brani podobnemu chovani, protoze presne podobne finty pouzivaji hackeri a ruzni skudci.

 
Nahoru Odpovědět
14.2.2020 8:25
Avatar
Neaktivní uživatel:15.2.2020 10:24

Nemyslím, že by to mělo s nastavením Apache něco společného. Ostatně shell_exec nebyl určen pro spouštění aplikací s grafickým rozhraním, ale pro práci s aplikacemi v příkazové řádce.

Vyzkoušej drobou úpravu a tenhle trik na spouštění maximalizovaného okna. Mohlo by Ti to pomoc.

c:\windows\system32\cmd.exe /c start /max c:\windows\notepad.exe c:\pathtofile\file.txt
Nahoru Odpovědět
15.2.2020 10:24
Neaktivní uživatelský účet
Avatar
lubomirhajda
Člen
Avatar
Odpovídá na Neaktivní uživatel
lubomirhajda:15.2.2020 11:55

Díky Martine, jsi jediný (ze dvou), kdo mi skutečně chtěl pomoct a také pomohl. Akorát jsem musel udělat jednu změnu, protože tvůj příkaz mi otevřel samostatné okno se strukturou adresářů, což jsem nechtěl. Změnil jsem zpětná lomítka na normální, takže fungující příkaz vypadá takto:

$prikaz = "cmd.exe /c start /max c:/windows/notepad.exe c:/xampp/htdocs/software/".$wSoubor;
echo shell_exec($prikaz);

Ještě jednou ti děkuji a vlákno může být uzavřeno.
Přeju příjemný den.

 
Nahoru Odpovědět
15.2.2020 11:55
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.