>> Home >> PHP >> PHP: lokální příkazy

 

PHP: lokální příkazy

 

Scriptovací jazyk PHP má velice rozmanité použití. Mezi věci, které se nám mohou také hodit je to, že obsahuje funkce, díky kterým můžeme spouštět různé lokální aplikace, provádět všelijaká nastavení a mnoho dalších věcí. Pokud máme povolenou funkci exec(), můžeme provádět témeř všechny možné i nemožné příkazy na lokálním počítači.

PHP obsahuje všelijaké funkce k práci se soubory a složkami jako například chmod(), mkdir() a mnoho dalších. Chmod() nastavuje přístupová práva k danému souboru či složce, mkdir() nám vytvoří složku, rmdir() nám ji zase smaže a ku příkladu unlink() nám smaže vybraný soubor. Toto jsou sice funkce, které mohou provádět určité činnosti na lokálním počítači, ale dnes se chci zabývat spíše funkcí exec().

Funkce exec() nám dovoluje spustit jakýkoli externí příkaz. Můžeme tedy díky ní spouštět různé aplikace,  různě je přesměrovávat a podobně.Tato funkce nám ovšem nedá celý výpis, nýbrž vypíše jen poslední řádek. U následujícího výpisu by nám to samozřejmě stačilo.

 

<?php
echo exec('uptime');
?>

 

Tímto příkazem dostaneme výpis z programu uptime (v tomto případě musí běžet Apache na počítači s operačním systémem Linux, Unix nebo Solaris). Výstup by vypadal nějak takto: 19:58:33 up 8:54, 2 users, load average: 0.33, 0.50, 0.58. Pokud bychom chtěli jen některé hodnoty z tohoto výpisu, mohli bychom proměnnou ještě před vypsáním upravit patřičnými regulárními výrazi.

Pokud potřebujeme provést nějaký výpis, který má více řádků, nastal by v následujícím příkladu problém. Problém to ale není, protože funkci exec() můžeme předat jako vstupní parametr proměnnou, kterou využije jako pole. Každá hodnota v poli bude odpovídat jednomu řádku z výpisu programu.

Například:

 

<?php
exec('cat /proc/cpuinfo', $pole);
print_r($pole);
?>

 

Výpis tohoto scriptu by byl: Array ( [0] => processor : 0 [1] => vendor_id : AuthenticAMD [2] => cpu family : 15 [3] => model : 12 [4] => model name : AMD Athlon(tm) 64 Processor 3200+ [5] => stepping : 0 [6] => cpu MHz : 2200.000 [7] => cache size : 512 KB [8] => fdiv_bug : no [9] => hlt_bug : no [10] => f00f_bug : no [11] => coma_bug : no [12] => fpu : yes [13] => fpu_exception : yes [14] => cpuid level : 1 [15] => wp : yes [16] => flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext lm 3dnowext 3dnow up ts fid vid ttp [17] => bogomips : 4426.37 [18] => clflush size : 64 [19] => )

Samozřejmě se každý výpis bude lišit podle typu CPU ve vašem počítači.

Kdyby jsem chtěl vypsat jen modelové jméno procesoru, jeho frekvenci a jeho instrukce, tak bych učinil takto:

 

<?php
exec('cat /proc/cpuinfo', $pole);
echo $pole[4]."<br />".$pole[6]."<br />".$pole[16];
?>

 

U mého CPU by výpis vypadal následovně:

model name : AMD Athlon(tm) 64 Processor 3200+
cpu MHz : 2200.000
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext lm 3dnowext 3dnow up ts fid vid ttp

Další informace o funkci exec() na php.net.

 

pridej.cz Přidat.eu záložku

 

Diskuze k článku


 

Zatím žádné komentáže k tomuto článku.

 

Přidat nový komentář