NAzdarek..
Zadani
Spusitelny soubour /home/create , ktery ma jako jediny parametr prirozene cislo, vypise na standartni vystup dvojnasobek tohoto cisla.
Vytvoreni stranky v php, ktera tento script pouzije pro pocitami dvojnasobku cisla ze vstupu (formular pro vlozeni cisla + informace o vyledku)
Upresneni
Jde o to nalézt a použít jednoduchou funkci, která spustí externí
spustitelný soubor (skript pro bash, exe soubor) a převezme jeho výstup.
NEjak jsem nepochopil zadani protoze jsem se s tim jeste nesetkal... nema nekdo nejakou radu.. nebo alespon lidsky popis toho oc jde..... Diky moc..
<form>
<input type="text" name="num"/>
<input type="Submit"/>
</form>
<?php
if (is_numeric($_GET['num'])) passthru('/home/create ' . $_GET['num']);
?>
<HTML>A ten skript - předpokládám, že jde o shellskript - /home/create
<code>#!/bin/bash<br>echo "$1 * 2"|bc</code></HTML>
CHlapi diky ...... ale taky bych potreboval nejak textik k tomu o co vubec jde.. abych si mohl vygooglovat nejakej clanek aneco si k tomu precist....
<HTML>Dobře, takže:
PHP část:
Na straně php se ověří, zda jde o celé číslo (tady bych raději místo is_numeric použil is_int) a potom se zavolá funkce passthru. Funkce passthru spustí externí soubor a to, co spuštěný soubor vypíše do stdout, to se vypíše do zpracované stránky.
Externí část:
Jde o jednoduchý shellskript vykonávaný bashem. $1 je první parametr skriptu. Když je ten parametr např. 3, echo vypíše 3 * 2 a předá tento řetězec programu bc. bc není nic jiného, než kalkulátor - hodíš mu na vstup výraz a na výstup (stdout) pošle bc výsledek.</HTML>
Ztim diky... a omlouvam se za dalsi dotazy protoze jsem v tom lamicka :-)
Ale proc je tam ten fformular na zadani cisla.... jakou tam hraje roli.. kdyz se ma cist cislo z nejakeho programu.....
to je cislo toho programu nebo jak?
A ta funkce passthru... ta kdyz neco zjisti tak to automaticky vypise... nebo mam spojit ty dva scripty php a externi dohromady... ?
Nzdarek.....
nasel jsem je¨dnu vec...
vypadalo by to asi takhle..
system ( '/home/create ' , $promena);
NAvratova hodnota se zapïse do promene .... tu pak snadno vynasobim 2..
JEn nechapu proc je tam ten formular pro vlozeni cisla....
TAk zase zmena...
uz jsem pochopil
#!/bin/bash
echo "$1 * 2"|bc
kdyz uz vim co v BASHi znamena $1 .. tak uz chapu proc pouzit jen passthru...
ALe proc se dava jako druhy argument u fnce passthru to cislo zadane uzivatelem ?
DIky
Jo a jeste malickost...
nemam zkusenosti s BAshem..
takze vyslednej script by vypadal takto.?
<form>
<input type="text" name="num"/>
<input type="Submit"/>
</form>
<?php
if (is_numeric($_GET['num'])) passthru('/home/create ' . $_GET['num']);
#!/bin/bash
echo "$1 * 2"|bc
?>
toto je obsah souboru /home/create :
#!/bin/bash
echo "$1 * 2"|bc
to ostatni je v php skriptu. cili budes mit dva soubory: php skript a bash skript
A vite nedko proc se jako druhy argument u fnce passthru pouzije to cislo zadane uzivatelem ?
DIky
A jak ulozim ten bash script a jak ho zavolam php ? jen naincluduju?
Omlouvám se že nepodám radu, ale celkem mě to zaujalo a jsem zvědavý - to je domácí úkol z nějaké školy (střední/vysoké)? Jestli jo tak docela nechápu proč dávají úkol z něčeho o čem studenti/žáci absolutně nic neví.
Jestli pro skolu, tak je to normalni. U nas na vysce je to normalni. Dostaneme ukol, a je jedno, jak to vyresime, a jestli o tom neco vime. Proste samovyuka. Kdo chodil na prednasku, tak o tom neco malo vedel.
>> A vite nedko proc se jako druhy argument u fnce passthru pouzije to cislo zadane uzivatelem ?
To neni druhy argument. Je soucasti prikazu.
Timto cislem predavas hodnotu argumentu pro soubor /home/create. Uvnitr toho souboru se toto cislo prezentuje jako $1.
No právě, kdo chodil na přednášku tak o tom něco věděl. U Dawida mám pocit že absolutně neví která bije a to mě zaujalo. Já jsem taky chodil na vysokou takže vím že úkoly jsou často dost ve stylu "hození do jezera bez přípravy a plav". Jenže vždycky je to v rámci předmětu kde se daná problematika probírá takže všichni ví o co jde a mají aspoň představu jak na to.
Jde o to nalézt a použít jednoduchou funkci, která spustí externí
spustitelný soubor (skript pro bash, exe soubor) a převezme jeho výstup
Koukal jsem do manualu php...
passthru ( string command [, int return_var] )
Pokud je přítomen argument return_var, návratová hodnota tohoto příkazu se umístí sem.
TAkz ejak to chapu ja...
passthru ('/home/create ' , $promena );
a pak promenou vynasobim 2 a necham vypsat
------------------------------
nebo
Poslu tomu programu nejake cislo
<form>
<input type="text" name="num"/>
<input type="Submit"/>
</form>
<?php
if (is_numeric($_GET['num'])) passthru('/home/create ' . $_GET['num']);
?>
To se zpracuje a odesle se na vystup a na php strace se mi zobrazi.
JAk pak zpustim ten bash aby mi ho vynasobil 2
Tak and tim porad premyslim... a napadla mne posledni verze...
Ja tim passthru spostim ten soubor s tim bashem apredavam mu to cislo .. on to cislo veme a vynasoobi 2 a vypise...
Takkhle to je?
Argument return_var neni vstupni, ale vystupni. Kazda unixova aplikace vraci nejakou navratovou hodnotu (ukoncen vporadku, chyba v programu, ukoncen nekorektne, .... ). Pokud aplikace nic nevraci, tak je navratova hodnota vetsinou 0 (Vse OK).
Kdyz tak ctu, tak zadani neni zas tak tezky.
Takze mas dva soubory "/home/create" a treba "vypocet.php"
V souboru "/home/create" je obsah:
#!/bin/bash
echo "$1 * 2"|bc
Vysvetleni: Spusti se bash soubor jez ocekava argument (hodnota za souborem - /home/create 14). Tento argument(cislo-14) se vynasobi 2 a vysledek (28) vypise na vystup.
V souboru "vypocet.php" je obsah souboru:
<form>
<input type="text" name="num"/>
<input type="Submit" />
</form>
<?php
if (is_numeric($_GET['num'])) passthru('/home/create '. $_GET['num']);
?>
Vysvetleni: PHP skript obsahuje formular, do ktereho se zada cislo. Po stisknuti tlacitka se vykona skript - nejdrive otestuje, zda je odeslane cislo vubec cislo. Pokud je, tak zavola funkci passthru(). Coz znamena, ze se spusti prikaz " '/home/create'. $_GET['num'] ". Kde $_GET['num'] se nahradi zadanym cislem, takze se vlastne posle prikaz treba "/home/create 14". Vysledek prikazu (28) se pak zobrazi na vystup.
Zkousel jsem to na localhostu
v jedne slozce
vypis.php
<form>
<input type="text" name="num"/>
<input type="Submit" />
</form>
<?php
if (is_numeric($_GET['num'])) passthru('create '. $_GET['num']);
?>
a
create /bez pripony/
#!/bin/bash
echo "$1 * 2"|bc
A kdyz zpustim php ana pisu do nej cislo tak mi to nic nevypise....
A na wz to pise toto
Warning: passthru set_time_limit error_log ini_alter ini_set dl pfsockopen openlog syslog readlink symlink link leak fsockopen proc_open glob copy() has been disabled for security reasons in /3w/wz.cz/h/hokejparta/dawid/vypis.php on line 7
Cely tento ukol se vykonava na linuxu! Pokud to zkousis ve Windows, tak ti to nepujde. A zde na WZ je to zakazane. Pristupovat k systemovym prikazum neni zrovna dobry napad.
Chtěl sem si udělat vlastní návštěvní knihu.ale vubec mi to nefunguje.
nevíte co je tam sptane?
Nechce mi to vubec zpracovavat.
<?php
if ($zapsat)
$fp = fopen("./kniha.dat", "a");
if (!$fp) exit;
$prispevek = "<i>" . htmlspecialchars($jmeno) . "</i>";
if ($email)
$prispevek = "<a href=\"mailto:" . htmlspecialchars($email) . "\">" . $prispevek . "</a>";
$prispevek .=", " . date("j.n.Y G:i:s") . "\n<br>" .
nl2br(htmlspecialchars($text)) . "<hr>\n";
fputs($fp, $prispevek);
fclose($fp);
endif;
?>
tohle je druha cast.
<form action="<?php echo $PHP_SELF; ?>" method="post">
<table>
<tr><td align="left">Jméno: <input type="text" value="<?php echo $jmeno; ?>" name="jmeno" />
</td>
<td align="right">E-mail: <input type="text" value="<?php echo $email; ?>" name="email" /></td></tr>
<tr><td colspan="2">Zpráva:<br />
<textarea name="text" rows="5" cols="60"></textarea>
</td></tr>
</table>
<input type="submit" name="zapsat" value="Odeslat zprávu" />
</form>
<?php
if (File_exists("./kniha.dat"))
readfile("./kniha.dat");
?>
dik moc.
2Dan: je nelsušné se někomu nacpat do vlákna s úplně jiným problémem. Založ si vlastní vlákno.